2011-05-30 24 views
15

पर सबमिट करने के लिए एंड्रॉइड का उपयोग करना पहली बार यहां एक प्रश्न पूछना। आम तौर पर मैं पूछने के बिना अपना जवाब पा सकता हूं, लेकिन इस बार मैं फंस गया हूं और यह पता नहीं लगा सकता कि मैं क्या खो रहा हूं।Google स्प्रेडशीट फ़ॉर्म

मैं बस अपना एंड्रॉइड ऐप वेबसाइट पर एक फॉर्म भरने की कोशिश कर रहा हूं और इसे सबमिट कर रहा हूं। मुझे किसी भी डेटा को वापस भेजने के साथ ऐप की आवश्यकता नहीं है, बस फॉर्म भरें और सबमिट करें। असल में मैं एक मतदान ऐप के परिणाम एकत्र करने की कोशिश कर रहा हूं। मैंने सोचा कि फ़ॉर्म सबमिशन सरल होगा इसलिए मैंने Google स्प्रेडशीट बनाई और इसका एक फॉर्म बनाया। मैंने सोचा कि मैं एंड्रॉइड ऐप को फॉर्म पर इंगित करूंगा और फिर बाद में देखने के लिए स्प्रेडशीट में सभी डेटा होगा। हालांकि एंड्रॉइड ऐप वास्तव में फॉर्म भरने के लिए नहीं मिल सकता है। यहां संसाधन हैं।

Form

Spreadsheet

private void submitVote(String outcome) { 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost("https://spreadsheets.google.com/spreadsheet/formResponse?hl=en_US&formkey=dDlwZzh4bGFvNFBxUmRsR0d2VTVhYnc6MQ&ifq"); 

    List<BasicNameValuePair> results = new ArrayList<BasicNameValuePair>(); 
    results.add(new BasicNameValuePair("entry.0.single", cardOneURL)); 
    results.add(new BasicNameValuePair("entry.1.single", outcome)); 
    results.add(new BasicNameValuePair("entry.2.single", cardTwoURL)); 

    try { 
     post.setEntity(new UrlEncodedFormEntity(results)); 
    } catch (UnsupportedEncodingException e) { 
     // Auto-generated catch block 
     Log.e("YOUR_TAG", "An error has occurred", e); 
    } 
    try { 
     client.execute(post); 
    } catch (ClientProtocolException e) { 
     // Auto-generated catch block 
     Log.e("YOUR_TAG", "An error has occurred", e); 
    } catch (IOException e) { 
     // Auto-generated catch block 
     Log.e("YOUR_TAG", "An error has occurred", e); 
    } 
} 

मैं दोनों फार्म और स्प्रेडशीट सार्वजनिक तो यह के साथ चारों ओर गंदगी के लिए स्वतंत्र महसूस और कोशिश करते हैं और यह अपने आप को काम करने के लिए मिलता है बनाया है।

मुझे अपने प्रोग्राम से कोई त्रुटि नहीं है, कोई संकलन त्रुटियां नहीं हैं, डीडीएमएस में कोई त्रुटि नहीं है। जब मैं वास्तव में प्रोग्राम चलाता हूं और इस कोड को निष्पादित करने वाले बटन पर क्लिक करता हूं तो मैं देरी देख सकता हूं क्योंकि यह अभी यूआई थ्रेड में है, इसलिए मुझे पता है कि यह इसे निष्पादित कर रहा है। ऐसा प्रतीत होता है जैसे सबकुछ पूरी तरह से काम कर रहा है, लेकिन मेरी स्प्रेडशीट बिल्कुल अपडेट नहीं होती है।

कोई विचार? मुझे यकीन है कि यह कुछ बेवकूफ है कि मैं याद कर रहा हूं, लेकिन किसी भी मदद की सराहना की जाएगी।

यहां लॉगिंग और डिबगिंग सामग्री के साथ अद्यतन कोड है।

private void submitVote(String outcome) { 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost("https://spreadsheets.google.com/spreadsheet/formResponse?hl=en_US&amp;formkey=dDlwZzh4bGFvNFBxUmRsR0d2VTVhYnc6MQ&amp;ifq"); 

    List<BasicNameValuePair> results = new ArrayList<BasicNameValuePair>(); 
    results.add(new BasicNameValuePair("entry.0.single", cardOneURL)); 
    results.add(new BasicNameValuePair("entry.1.single", outcome)); 
    results.add(new BasicNameValuePair("entry.2.single", cardTwoURL)); 

    try { 
     post.setEntity(new UrlEncodedFormEntity(results)); 
    } catch (UnsupportedEncodingException e) { 
     // Auto-generated catch block 
     Log.e("YOUR_TAG", "An error has occurred", e); 
    } 
    try { 
     HttpResponse httpResponse = client.execute(post); 
     Log.e("RESPONSE", "info: " + httpResponse); 

     BufferedReader rd = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent())); 
     String line; 
     while ((line = rd.readLine()) != null) { 
     Log.i("words", line); 
     } 

     Intent intent = new Intent(this, ReadingView.class); 
     intent.putExtra("html", line); 
     startActivity(intent); 
    } catch (ClientProtocolException e) { 
     // Auto-generated catch block 
     Log.e("YOUR_TAG", "client protocol exception", e); 
    } catch (IOException e) { 
     // Auto-generated catch block 
     Log.e("YOUR_TAG", "io exception", e); 
    } 
} 

मैं अपने अनुप्रयोग में कुछ और के लिए ReadingView.class उपयोग करें, लेकिन यह प्रवेश प्रयोजन के लिए यह अभी अपहरण कर लिया। इसमें केवल ऑनक्रेट() विधि है, जो नीचे है।

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.readingview); 

    WebView mWebView = (WebView) findViewById(R.id.webview); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    //mWebView.loadUrl(getIntent().getExtras().getString("url")); 
    mWebView.loadData(getIntent().getExtras().getString("html"), "text/html", "utf-8"); 
} 

यह भी ध्यान देने योग्य है कि डीडीएमएस में यह केवल लाइन के एक आउटपुट को लॉग करता है। मेरा मानना ​​है कि यह इसलिए है क्योंकि एचटीएमएल कोड सभी को एक पंक्ति के रूप में वापस कर दिया जाता है। यदि मैं गलत हूं तो मुझे सही करों।

+1

यह एक अच्छा लेख है जो आपके लिए उपयोगी हो सकता है। http://www.morningcopy.com.au/tutorials/how-to-style-google-forms/ – JackyBoi

उत्तर

18

तो आखिरकार मुझे पता चला कि क्या हो रहा था। फॉर्म POST url के अंत में मैन्युअल रूप से एन्कोडिंग उत्तरों के साथ गड़बड़ी के माध्यम से मैं यह पाया कि स्रोत को देखने पर दिए गए यूआरएल में इसके स्वयं के एन्कोडिंग समस्याएं थीं।

यहाँ स्रोत से यूआरएल है:

<form action="https://spreadsheets.google.com/spreadsheet/formResponse?hl=en_US&amp;formkey=dDlwZzh4bGFvNFBxUmRsR0d2VTVhYnc6MQ&amp;ifq" method="POST" id="ss-form"> 

लेकिन यहाँ क्या यह वास्तव में उपरोक्त कोड में काम करने के लिए होने की जरूरत है है:

https://spreadsheets.google.com/spreadsheet/formResponse?hl=en_US&formkey=dDlwZzh4bGFvNFBxUmRsR0d2VTVhYnc6MQ 

अतिरिक्त amp; क्या यह गड़बड़ कर रहा था। किसी भी कारण से यह पिछले & ifq के बिना भी काम करता है, इसलिए मैंने इसे छोड़ दिया। वैसे भी, यहां पूरा कोड है:

private void submitVote(String outcome) { 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost("https://spreadsheets.google.com/spreadsheet/formResponse?hl=en_US&formkey=dDlwZzh4bGFvNFBxUmRsR0d2VTVhYnc6MQ"); 

    List<BasicNameValuePair> results = new ArrayList<BasicNameValuePair>(); 
    results.add(new BasicNameValuePair("entry.0.single", cardOneURL)); 
    results.add(new BasicNameValuePair("entry.1.single", outcome)); 
    results.add(new BasicNameValuePair("entry.2.single", cardTwoURL)); 

    try { 
     post.setEntity(new UrlEncodedFormEntity(results)); 
    } catch (UnsupportedEncodingException e) { 
     // Auto-generated catch block 
     Log.e("YOUR_TAG", "An error has occurred", e); 
    } 
    try { 
     client.execute(post); 
    } catch (ClientProtocolException e) { 
     // Auto-generated catch block 
     Log.e("YOUR_TAG", "client protocol exception", e); 
    } catch (IOException e) { 
     // Auto-generated catch block 
     Log.e("YOUR_TAG", "io exception", e); 
    } 
} 

आशा है कि यह Google स्प्रेडशीट फ़ॉर्म के साथ काम करने का प्रयास करते समय किसी और की सहायता करता है। और मुझे सही दिशा में इंगित करने के लिए @ पांडेर का धन्यवाद।

+1

इस प्रश्न को लाने के लिए धन्यवाद। मैं एक समान काम करने की कोशिश कर रहा हूं और मेरे साथ एक नोब देव हूं। ऑनक्रेट में वेब व्यू क्या है? क्या आप सबमिट करने के लिए टेक्स्ट फ़ील्ड और बटन के साथ मूल एंड्रॉइड फॉर्म बनाते हैं और फिर सबमिटवॉट() को कॉल करते हैं? यदि हां, तो वेब दृश्य का बिंदु क्या है? – Zaheer

+0

क्या आप कृपया मुझे बता सकते हैं कि फ़ॉर्म का यूआरएल कैसे ढूंढें? –

+0

अपाचे HTTP क्लाइंट जो ऊपर दिए गए उदाहरण का उपयोग करता था [हटाया गया] [http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client) एंड्रॉइड 6.0 में । [HttpUrlConnection] (http://developer.android.com/reference/java/net/HttpURLConnection.html) के साथ एक ही चीज़ कैसे पूरी की जा सकती है? –

1

शायद आप त्रुटियों को नहीं देख रहे हैं क्योंकि आप गलत तरीके से अपवाद छाप रहे हैं।
आप e.printStackTrace(); का उपयोग कर रहे हैं जो डीडीएमएस/लॉगकैट में दिखाई नहीं देता है।

इसके बजाय आप
Log.e("YOUR_TAG, "An error has occurred", e);

जो डी डी एम एस/Logcat में अपने त्रुटि प्रवेश करेंगे उपयोग करना चाहिए। आपको अपवाद का स्टैकट्रैक देखना चाहिए, और इससे आपको यह समझने में मदद मिलेगी कि क्या गलत है।

संपादित करें: क्या आपने client.execute(post); में वापस लौटाया है?
आप ऐसा करके जाँच करनी चाहिए क्या पोस्ट जवाब में लौटाया जा रहा है:

HttpResponse httpResponse = client.execute(post); 

तुम भी डिबग मोड में आवेदन जहां यह दुर्घटनाग्रस्त है चलाने के लिए और जांच कर सकते हैं/

+0

मुझे लगता है कि यह मदद करेगा? मैंने इसे डीडीएमएस में कुछ भी नहीं मिला है। मैंने अपनी मूल पोस्ट भी अपडेट की है ताकि अन्य उस पर ध्यान केंद्रित न करें। मुझे बस "विंडो पहले से केंद्रित" के बारे में एक संदेश मिलता है, और यह संदेश उपर्युक्त कोड के बिना भी है। असल में वे अपना वोट जमा करते हैं और फिर दो नई तस्वीरें वोट देने के लिए आती हैं। क्या यह Google फॉर्म के साथ कुछ हो सकता है? – doeiqts

+0

मैंने प्रतिक्रिया संपादित की है, जांचें कि क्या यह आपको – pandre

+0

में मदद करता है, जब मैं घर जाता हूं तो मैं इसे देखता हूं। मुझे यकीन नहीं है कि मुझे वास्तव में किस प्रतिक्रिया की उम्मीद करनी चाहिए, क्योंकि मुझे एप्लिकेशन के लिए इसकी आवश्यकता नहीं है। क्या सबमिट करने पर कोई डिफ़ॉल्ट फॉर्म प्रतिक्रिया है जिसके लिए मैं जांच कर सकता हूं? साथ ही, प्रोग्राम चलाने के दौरान कोई क्रैश नहीं होता है, यह ठीक होने पर सबकुछ की तरह कार्य करता है, लेकिन परिणाम स्प्रेडशीट में कभी दिखाई नहीं देते हैं। बस स्पष्ट होने की कोशिश कर रहा है। – doeiqts

2

रोक स्रोत पर एक नज़र डालें Acra के लिए। यह Google स्प्रेडशीट पर स्टैक निशान अपलोड करता है।

0

तो कार्डऑनउआरएल लेआउट.एक्सएमएल में टेक्स्ट एडिट फ़ील्ड हैं "results.add (new BasicNameValuePair (" entry.0.single ", cardOneURL));" धन्यवाद, जो

5

प्रारूप, प्रविष्टि 2.0.single कई मामलों में काम नहीं कर सकता है। अपना पोस्ट अनुरोध बनाने के लिए आपको हमेशा तत्वों की उचित आईडी मिलनी चाहिए। यह article एंड्रॉइड ऐप के माध्यम से Google डॉक्स शीट में डेटा पोस्ट करने का उचित तरीका प्रदान करता है।