2017-01-03 6 views
0
package rappiddevelopers.destinationadvisor; 

import android.content.Context; 
import android.os.AsyncTask; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.AutoCompleteTextView; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

import rappiddevelopers.destinationadvisor.models.TranslatorModel; 

public class MainActivity extends AppCompatActivity { 


    private AutoCompleteTextView autoCompleteTextView; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView); 


     new HttpGetTask().execute("http://192.168.0.107/abc/translator.php"); 

    } 

    public class HttpGetTask extends AsyncTask<String, String, List<TranslatorModel>> { 


     @Override 
     protected List<TranslatorModel> doInBackground(String... params) { 
      HttpURLConnection connection = null; 
      BufferedReader reader = null; 


      try { 
       URL url = new URL(params[0]); 
       connection = (HttpURLConnection) url.openConnection(); 
       connection.connect(); 

       InputStream stream = connection.getInputStream(); 

       reader = new BufferedReader(new InputStreamReader(stream)); 

       StringBuffer buffer = new StringBuffer(); 

       String line = ""; 
       while ((line = reader.readLine()) != null) { 
        buffer.append(line); 
       } 

       String finalJson = buffer.toString(); 
       JSONArray parentArray = new JSONArray(finalJson); 

       List<TranslatorModel> translatorModelList = new ArrayList<>(); 


       for(int i= 0; i<parentArray.length();i++) { 

        JSONObject finalObject = parentArray.getJSONObject(i); 

        TranslatorModel translatorModel = new TranslatorModel(); 


         translatorModel.setEnglish(finalObject.getString("englishSentence")); 


         translatorModelList.add(translatorModel); 
        } 



       return translatorModelList; 

      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } finally { 
       if (connection != null) { 
        connection.disconnect(); 
       } 

       try { 
        if (reader != null) { 
         reader.close(); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      return null; 
     } 


     @Override 
     protected void onPostExecute(List<TranslatorModel> data) { 


      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data); 

      autoCompleteTextView.setAdapter(adapter); 
      autoCompleteTextView.setThreshold(1); 



      super.onPostExecute(data); 
     } 
    } 
} 

json文字列オブジェクト(englishSentence)からautocompleteTextviewに値を表示します。Android ArrayAdapterクラスコンストラクターにエラーがあります

TranslatorModelクラスには、jsonObjectsのgetterメソッドとsetterメソッドがあります。

arrayAdapter宣言行でエラーが見つかりました。あなたが故にカスタムオブジェクトではない文字列を使用している

+1

ようArrayAdapterを拡張custumアダプタを作成する必要があり、それがあることをクールだArrayAdapter –

+1

を拡張してカスタムアダプタを作成する必要がありますエラー...何ですか? –

+1

また、 'ArrayAdapter'を作成するスコープ内の' this'は 'Context'ではない' HttpGetTask'を参照します。 'this'を' MainActivity.this'に置き換え、 'Activity'を' Context'として使います。 –

答えて

1

リストは、カスタムクラスのオブジェクトが含まれているので、あなたはこの

public class MyClassAdapter extends ArrayAdapter<MyClass> { 

    private static class ViewHolder { 
     private TextView itemView; 
    } 

    public MyClassAdapter(Context context, int textViewResourceId, ArrayList<MyClass> items) { 
     super(context, textViewResourceId, items); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      convertView = LayoutInflater.from(this.getContext()) 
      .inflate(R.layout.listview_association, parent, false); 

      viewHolder = new ViewHolder(); 
      viewHolder.itemView = (TextView) convertView.findViewById(R.id.ItemView); 

      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     MyClass item = getItem(position); 
     if (item!= null) { 
      // My layout has only one TextView 
       // do whatever you want with your string and long 
      viewHolder.itemView.setText(String.format("%s %d", item.reason, item.long_val)); 
     } 

     return convertView; 
    } 
} 
関連する問題