Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中获取Autocompletetextview所选项目的id?_Android_Android Arrayadapter_Android Volley_Autocompletetextview - Fatal编程技术网

如何在android中获取Autocompletetextview所选项目的id?

如何在android中获取Autocompletetextview所选项目的id?,android,android-arrayadapter,android-volley,autocompletetextview,Android,Android Arrayadapter,Android Volley,Autocompletetextview,我的问题是,当我从autocompletetextview中选择状态时,它总是返回1作为id。但是我想根据我的json获得相应的状态id。示例StateName=Assam,然后StateId=4。但我总是得到id为1。我使用模型类设置id并从中获取。但没有任何更改,我将id获取为1。如果有人知道如何解决这个问题,请告诉我。提前谢谢 This is my jsonResponce :- { "ReplyCode": 1, "Message": "Franchis

我的问题是,当我从autocompletetextview中选择状态时,它总是返回1作为id。但是我想根据我的json获得相应的状态id。示例StateName=Assam,然后StateId=4。但我总是得到id为1。我使用模型类设置id并从中获取。但没有任何更改,我将id获取为1。如果有人知道如何解决这个问题,请告诉我。提前谢谢

This is my jsonResponce :-   

 {
      "ReplyCode": 1,
      "Message": "Franchisee and Plans List",

     "data2": [
        {
          "StateId": 1,
          "StateName": "Andaman and Nicobar Island",
          "CountryId": 1
        },
        {
          "StateId": 2,
          "StateName": "Andhra Pradesh",
          "CountryId": 1
        },
        {
          "StateId": 3,
          "StateName": "Arunachal Pradesh",
          "CountryId": 1
        },
        {
          "StateId": 4,
          "StateName": "Assam",
          "CountryId": 1
        },
这是我从json获取数据的方法:-

public void volleyStatedata() {

        if (mGeneralUtilities.isConnected()) {
            mProgressDialog.show();
            StringRequest stateRequest = new StringRequest(Request.Method.POST, GlobalData.REGISTER_DATA_URL,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {


                            mProgressDialog.dismiss();

                            try {
                                JSONObject jsonObject = new JSONObject(response);
                                JSONArray jsonArray = jsonObject.getJSONArray("data2");
                                for (int i = 0; i < jsonArray.length(); i++) {
                                    PojoState pojoState = new PojoState();
                                    JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                                    String stateId = jsonObject1.getString("StateId");
                                    String stateName = jsonObject1.getString("StateName");
                                    mStateList.add(stateName);
                                    mStateIdList.add(stateId);
                                    pojoState.setmStateList(mStateList);
                                    pojoState.setmStateId(stateId);
                                    mpojoStateList.add(pojoState);



                                }


                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError volleyError) {

                            Log.e("error", "" + volleyError.getMessage());


                        }
                    }) {
                @Override
                protected Map<String, String> getParams() throws AuthFailureError {

                    Map<String, String> params = new HashMap<String, String>();


                    return params;
                }
            };

            RequestQueue stateQueue = Volley.newRequestQueue(getContext());

            stateQueue.add(stateRequest);
        } else {

            mGeneralUtilities.showAlertDialog("Hey User !", "Please connect to the internet", "Ok");

        }
    }
这是我在AutoCompleteTextView上应用onItemclick listner的适配器:-

 ArrayAdapter<String> mStateAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, mStateList);
        mActState.setAdapter(mStateAdapter);
        mActState.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                mpojoStateList.get(i).getmStateId();


            }
        });
您的代码使用在onItemClick回调中返回的i,该回调指的是您从自动完成列表中的可见项(而不是原始列表)中单击的项。当您单击自动完成列表中的第一个项目时,i=0,这意味着它总是返回StateId=1的Andaman和Nicobar岛项目

在我的脑海中,您可以从mStateAdapter获取项字符串,并将其与mpojoStateList进行比较,找到相应的项。检查示例代码

    final ArrayAdapter<String> mStateAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, mStateList);
    mActState.setAdapter(mStateAdapter);
    mActState.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            String itemName = mStateAdapter.getItem(i);

            for (PojoState pojo : mpojoStateList) {
                if (pojo.mStateName.equals(itemName)) {
                    String id = pojo.getmStateId(); // This is the correct ID
                    break; // No need to keep looping once you found it.
                }
            }
        }
    });
如果在PojoState对象内重写toString方法并使其返回mStateName,并将mpojoStateList传递给适配器,而不必创建3个ArrayList,则效果更好。这样,mStateAdapter.getItemi将返回一个PojoState对象而不是字符串,并且您可以使用它的ID而不引用返回的位置i