android arrayadapter类构造函数有错误

eufgjt7s  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(424)
  1. package rappiddevelopers.destinationadvisor;
  2. import android.content.Context;
  3. import android.os.AsyncTask;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.widget.ArrayAdapter;
  7. import android.widget.AutoCompleteTextView;
  8. import org.json.JSONArray;
  9. import org.json.JSONException;
  10. import org.json.JSONObject;
  11. import java.io.BufferedReader;
  12. import java.io.IOException;
  13. import java.io.InputStream;
  14. import java.io.InputStreamReader;
  15. import java.net.HttpURLConnection;
  16. import java.net.MalformedURLException;
  17. import java.net.URL;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. import rappiddevelopers.destinationadvisor.models.TranslatorModel;
  21. public class MainActivity extends AppCompatActivity {
  22. private AutoCompleteTextView autoCompleteTextView;
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.activity_main);
  27. autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
  28. new HttpGetTask().execute("http://192.168.0.107/abc/translator.php");
  29. }
  30. public class HttpGetTask extends AsyncTask<String, String, List<TranslatorModel>> {
  31. @Override
  32. protected List<TranslatorModel> doInBackground(String... params) {
  33. HttpURLConnection connection = null;
  34. BufferedReader reader = null;
  35. try {
  36. URL url = new URL(params[0]);
  37. connection = (HttpURLConnection) url.openConnection();
  38. connection.connect();
  39. InputStream stream = connection.getInputStream();
  40. reader = new BufferedReader(new InputStreamReader(stream));
  41. StringBuffer buffer = new StringBuffer();
  42. String line = "";
  43. while ((line = reader.readLine()) != null) {
  44. buffer.append(line);
  45. }
  46. String finalJson = buffer.toString();
  47. JSONArray parentArray = new JSONArray(finalJson);
  48. List<TranslatorModel> translatorModelList = new ArrayList<>();
  49. for(int i= 0; i<parentArray.length();i++) {
  50. JSONObject finalObject = parentArray.getJSONObject(i);
  51. TranslatorModel translatorModel = new TranslatorModel();
  52. translatorModel.setEnglish(finalObject.getString("englishSentence"));
  53. translatorModelList.add(translatorModel);
  54. }
  55. return translatorModelList;
  56. } catch (MalformedURLException e) {
  57. e.printStackTrace();
  58. } catch (IOException e) {
  59. e.printStackTrace();
  60. } catch (JSONException e) {
  61. e.printStackTrace();
  62. } finally {
  63. if (connection != null) {
  64. connection.disconnect();
  65. }
  66. try {
  67. if (reader != null) {
  68. reader.close();
  69. }
  70. } catch (IOException e) {
  71. e.printStackTrace();
  72. }
  73. }
  74. return null;
  75. }
  76. @Override
  77. protected void onPostExecute(List<TranslatorModel> data) {
  78. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
  79. autoCompleteTextView.setAdapter(adapter);
  80. autoCompleteTextView.setThreshold(1);
  81. super.onPostExecute(data);
  82. }
  83. }
  84. }

希望将json字符串对象(EnglishEntence)中的值显示到autocompletetextview中。
translatormodel类具有用于JSonObject的getter和setter方法。
在arrayadapter声明行上发现错误。

gg0vcinb

gg0vcinb1#

您使用的是自定义对象而不是字符串,因此需要创建custum适配器来扩展arrayadapter,如下所示

  1. public class MyClassAdapter extends ArrayAdapter<MyClass> {
  2. private static class ViewHolder {
  3. private TextView itemView;
  4. }
  5. public MyClassAdapter(Context context, int textViewResourceId, ArrayList<MyClass> items) {
  6. super(context, textViewResourceId, items);
  7. }
  8. public View getView(int position, View convertView, ViewGroup parent) {
  9. if (convertView == null) {
  10. convertView = LayoutInflater.from(this.getContext())
  11. .inflate(R.layout.listview_association, parent, false);
  12. viewHolder = new ViewHolder();
  13. viewHolder.itemView = (TextView) convertView.findViewById(R.id.ItemView);
  14. convertView.setTag(viewHolder);
  15. } else {
  16. viewHolder = (ViewHolder) convertView.getTag();
  17. }
  18. MyClass item = getItem(position);
  19. if (item!= null) {
  20. // My layout has only one TextView
  21. // do whatever you want with your string and long
  22. viewHolder.itemView.setText(String.format("%s %d", item.reason, item.long_val));
  23. }
  24. return convertView;
  25. }
  26. }
展开查看全部

相关问题