【问题标题】:JSON array to auto complete text view in androidJSON数组在android中自动完成文本视图
【发布时间】:2014-05-29 05:05:06
【问题描述】:

我正在开发一个 Android 应用程序,我必须在其中解析 Json 数组并将其调整为自动完成文本视图。我从我的服务器得到了正确的响应,因为我对 android 和 Json 解析比较陌生,所以我不知道如何将该 json 数组解析为数组适配器并将其添加到自动完成文本视图中。

任何机构都可以建议我怎么做吗..?

回复如下。

[
{
city: "bng",
area: "anagar",
id: 510000032
},
{
city: "bng",
area: "bnagar",
id: 510000021
},
{
city: "bng",
area: "cnagar",
id: 510000037
}
] 

我希望在我的自动完成文本视图中匹配区域。

我在布局文件中创建了自动完成文本视图。

这就是我的尝试

    public class MainActivity extends Activity {

     List<String> responseList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AutoCompleteTextView auto1 = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);

        new HttpGetTask().execute();

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_expandable_list_item_2, responseList);
        auto1.setAdapter(adapter);
    }

    private class HttpGetTask extends AsyncTask<Void, Void, String> {

        String URL = "http://xyz/cities.json?app_id=test";
        AndroidHttpClient mClient = AndroidHttpClient.newInstance("");

        @Override
        protected String doInBackground(Void... params) {
            HttpGet request = new HttpGet(URL);
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            try {
                return mClient.execute(request, responseHandler);
            } catch (ClientProtocolException exception) {
                exception.printStackTrace();
            } catch (IOException exception) {
                exception.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            try {
                JSONArray json = new JSONArray(result);
                Log.v("ResponseCity", result);

                responseList = new ArrayList<String>();

                for (int i = 0; i < json.length(); i++) {
                    final JSONObject e = json.getJSONObject(i);
                    String name = e.getString("area");
                    responseList.add(name);

                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if (null != mClient)
                mClient.close();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

欢迎提出任何建议...

【问题讨论】:

    标签: android arrays json autocomplete autocompletetextview


    【解决方案1】:

    如果你想在

    中添加数据
    String[] arr=new String[100]; 
    

    那就错了。 您可以执行与 ArrayList 形式相同的工作,但请记住,您永远不会在此处放置 Getter/Setter 类。只需简单地声明它。请参阅此示例。

    在主分区中声明:

    ArrayList<String>arr=new ArrayList<>();
    

    然后以这种方式初始化它:

    for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject jsonObject1 = (JSONObject) jsonArray.get(i);
                    String imei = jsonObject1.getString("imei");
                    String name = jsonObject1.getString("name");
                    String my_pic = jsonObject1.getString("my_pic");
                    String email = jsonObject1.getString("email");
    
                    arr.add(name);
                }
                adapter= new ArrayAdapter<>
                        (this, android.R.layout.select_dialog_item, arr);
                autoCompleteText.setThreshold(1);//will start working from first character
                autoCompleteText.setAdapter(adapter);//setting the adapter data into the AutoCompleteTextView
                autoCompleteText.setTextColor(Color.RED);
            }
    

    我希望这对你有用

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        像这样将响应字符串添加到List&lt;String&gt;

         List<String> responseList = new ArrayList<String>();
        
         for (int i = 0; i < json.length(); i++) {
            final JSONObject e = json.getJSONObject(i);
             String name = e.getString("area");
             responseList.add(name);
          }
        

        现在,您可以像这样将响应列表设置为 AutoCompleteTextView

         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_dropdown_item_1line, responseList);
         AutoCompleteTextView textView = (AutoCompleteTextView)
                    findViewById(R.id.autoCompleteTextView1);
         textView.setAdapter(adapter);
        

        【讨论】:

        • 因为 responseList 是在 onPost() 方法中创建的。我无法在我的 onCreate() 方法中访问它。
        • 检查我更新的代码。我的自动完成文本视图中没有自动完成文本。
        • 您好,添加响应列表后需要在onPostExecute中设置适配器
        • 我在 onPostExecute 中尝试过,但“构造函数 ArrayAdapter(MainActivity.HttpGetTask, int, List) 未定义”我收到错误
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多