2012-07-18 14 views
5

में Asynctask और webservice के साथ स्वत: पूर्ण टेक्स्ट व्यू मैं सर्वर के साथ AsyncTask का उपयोग करके स्वत: पूर्ण करने की कोशिश कर रहा हूं। मैंने अपना कोड यहां साझा किया।एंड्रॉइड 4

AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.mainautocomplete); 
textView.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void afterTextChanged(Editable editable) { 

    } 

    @Override 
    public void beforeTextChanged(CharSequence charSequence, int arg1, int arg2, int arg3) { 

    } 

    @Override 
    public void onTextChanged(CharSequence charSequence, int start, int before, int count) { 
     String text=charSequence.toString(); 
     if (text.length() > 3) { 
      MyAsyncTask myTask = new MyAsyncTask(); 
      try { 
       ArrayList<String> adapterList = new ArrayList<String>(); 
       adapterList=myTask.execute(url).get();/*My Web service url*/ 
       if(!adapterList.isEmpty()){ 
        Log.v("ADPTER LIST",adapterList.toString()); 
        adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.list_item, adapterList); 
        textView.setAdapter(adapter); 
       }else{ 
        Log.v("ADPTER LIST","No VALUES"); 
       } 
      } catch (InterruptedException e) { 
       Log.v("catch",e.getMessage()); 
      } catch (ExecutionException e) { 
       Log.v("catch2",e.getMessage()); 
      } 
     } 
    } 
}); 

और मेरे AsyncTask कोड है,

private class MyAsyncTask extends AsyncTask<String, Void, ArrayList<String>>{ 
    @Override 
    protected void onPreExecute(){ 
     pd = ProgressDialog.show(HomeLayoutActivity.this,"", "Please Wait!"); 
    } 

    @Override 
    protected ArrayList<String> doInBackground(String... params) { 
     try { 
      String myQuery=params[0]; 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpResponse response = null; 
      InputStream is = null; 
      String result = null; 
      StringBuilder sb = null; 

      response = httpClient.execute(new HttpGet(myQuery)); 
      is = response.getEntity().getContent(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); 
      sb = new StringBuilder(); 
      sb.append(reader.readLine() + "\n"); 
      String line = "0"; 

      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 

      is.close(); 
      result = sb.toString(); 
      JSONArray jArray = new JSONArray(result); 
      JSONObject jData = null; 
      tags.clear(); 

      for (int i = 0; i < jArray.length(); i++) { 
       jData = jArray.getJSONObject(i); 
       tags.add(jData.getString("tagname")); 
      } 
      Log.v("JSON",""+tags.toString()); 

     } catch(Exception e){ 
      Log.v("MUGBUG4",e.getMessage()); 
     } 
     return tags; 
    } 

    @Override 
    protected void onProgressUpdate(Void...strings){ 

    } 

    @Override 
    protected void onPostExecute(ArrayList<String> result){ 
     Log.v("OPE",result.toString()); 
     pd.dismiss(); 
    } 

} 

मेरे समस्या है,

  • मैं ArrayList के परिणामों लॉग इन कर सकते हैं:

    यह मेरा AutocompleteTextwatcher के लिए कोड है AsyncTask से (मैंने लॉग और चेक किया)। लेकिन मान स्वतः पूर्ण ड्रॉपडाउन में नहीं दिख रहे हैं।

  • मैं यहां हैरान हूं, मैंने टाइप किए गए तीन से अधिक वर्णों के लिए वेब सर्वर को ऑटो पूर्ण अनुरोध किया है। एक बार 3 से अधिक वर्ण टाइप करने के बाद, अनुरोध चल रहा है, कोई सुझाव नहीं दिखाया गया है। लेकिन एक बार अनुरोध के बाद टाइप किए गए 3 से कम वर्णों के लिए दिखाए गए सुझाव।
  • मेरे कोड से कोई अपवाद नहीं है।

क्या मैं करने की कोशिश की,

  • मैं AsyncTask की onPostExecute में अनुकूलक सेट करने की कोशिश की। वही आउटपुट दिखा रहा है।
  • मैंने एंड्रॉइड 2.3 एम्यूलेटर के साथ प्रयास किया। यह ठीक काम कर रहा है।

एंड्रॉइड 4 और AsynctaskdoInBackground() के साथ कोई समस्या है?

उत्तर

8

मेरे पास एक ही स्थिति है। मुझे नहीं पता कि यह मदद करेगा, लेकिन मैं आपको अपने एडाप्टर जोड़ने के बाद कोड की इन पंक्तियों को जोड़ने की सलाह देता हूं।

if (!textView.isPopupShowing()) { 
     textView.showDropDown(); 
    } 

इससे मेरी मदद मिली। सच होने के लिए मुझे इस व्यवहार का सटीक कारण पता नहीं है, लेकिन ऑटोकंपलेटटेक्स्टव्यू के पहले कार्यान्वयन में उन्होंने ड्रॉपव्यू प्रदर्शित करने के लिए ListView का उपयोग किया था। 4.0 (और शायद पहले) में वे ListPopupWindow का उपयोग शुरू करते हैं। यही कारण हो सकता है। चीयर्स

+0

मैं एक ही था समस्या, यह एडाप्टर से पहले इसे सेट करने के बाद दिखाया गया है, लेकिनडेटाट चेंज() को सूचित करने के बारे में क्या है। क्या वह काम कर सकता है? – kabuto178

+1

यहां कोड पोस्ट करने का तरीका पता नहीं लगा सकता है, लेकिन शब्दों में - सब कुछ ठीक होना चाहिए DataSetChanged()। आपके पास वास्तव में क्या समस्या है? – Infernus

0

MyAsyncTask (में निम्न कोड लिखें) OnPostExecute() विधि

ArrayList<String> adapterList = new ArrayList<String>(); 
adapterList=myTask.execute(url).get(); 
if(!adapterList.isEmpty()){ 
    ..... 
} 
संबंधित मुद्दे