【问题标题】:How to get both data (id ,name ) of selected item from autocomplete textview when data is fetched from server从服务器获取数据时如何从自动完成文本视图中获取所选项目的数据(id,name)
【发布时间】:2017-10-16 12:04:11
【问题描述】:

问题是当我选择任何大学时,我在自动完成文本视图中设置了名称。但我也在寻找从服务器获取的键值对中的 ID:

"u_id": "1","university_name": "RGPV"`

我想要这个u_id 以及name。但我只得到这个名字。我需要u-id 用于进一步的目的。

我如何获得这个 id?

这里是获取json的代码

class FetchUniversitytask extends AsyncTask<Void,Void ,String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

      /*  progressDialog = new ProgressDialog(ActivitySignUp.this);
        progressDialog.setIndeterminate(true);
        progressDialog.setMessage("Please Wait...");
        progressDialog.show();*/

        linearLayout.setVisibility(View.VISIBLE);
        ObjectAnimator flip = ObjectAnimator.ofFloat(imgSpoon, "rotationY", 0f, 180f);
        flip.setDuration(800);
        flip.setRepeatCount(Animation.INFINITE);
        flip.start();
    }

    @Override
    protected String doInBackground(Void... params) {
        String result = WebServiceUtil.getInstance(ActivitySignUp.this).getJsonFromGetMethod(URLconstant.UNIVERSITY);
        return result;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        //progressDialog.dismiss();
        linearLayout.setVisibility(View.INVISIBLE);

        if (null != result) {
            try {
                final Universitydata univHolder = new Gson().fromJson(result, Universitydata.class);
                if ( null != univHolder) {
                    //  Log.d("uninholder", "" + univHolder.toString());
                    // Toast.makeText(ActivitySignUp.this, univHolder.toString(), Toast.LENGTH_SHORT).show();
                    Universitylist = new ArrayList<>();
                    for (University university  : univHolder.getData()) {
                        if (!university.getUniversityName().isEmpty()) {
                            Universitylist.add(university.getUniversityName());

                        }
                    }
                    if (Universitylist.size() > 0) {
                        /*  universityAdapter = new ArrayAdapter<String>(ActivitySignUp.this, R.layout.spinner_item, Universitylist);
                            universityAdapter.setDropDownViewResource(R.layout.spinner_itemforchild);*/
                        sadapter = new ArrayAdapter<String>(ActivitySignUp.this, android.R.layout.simple_dropdown_item_1line, Universitylist);
                        suuniversity.setThreshold(1);//will start working from first character
                        suuniversity.setAdapter(sadapter);//setting the adapter data into the AutoCompleteTextView
                        suuniversity.setTextColor(getColor(R.color.colorPrimary));
                        suuniversity.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                            @Override
                            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                                Log.d("univ", String.valueOf(adapterView.getItemAtPosition(i)));
                                Log.d("univ", String.valueOf(adapterView));
                                String data = (String)adapterView.getItemAtPosition(i);
                                int realPosition = Universitylist.indexOf(data);
                                University un = new University();
                                un.getUId();
                                u_id = String.valueOf(realPosition+1);
                                Log.d("univ_id",u_id);
                                fetchCollegeFromServerByUniversityName(u_id);
                            }
                        });                       
                    }
                } else {
                    Toast.makeText(ActivitySignUp.this, "Something not right  1", Toast.LENGTH_SHORT).show();
                }
            } catch (JsonSyntaxException e) {
                e.printStackTrace();
                Toast.makeText(ActivitySignUp.this, "Something not right  2", Toast.LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(ActivitySignUp.this, "Something not right  3", Toast.LENGTH_SHORT).show();
        }
    }
}

这是我的 json 代码

{
"data": [
    {
        "u_id": "1",
        "university_name": "RGPV"
    },
    {
        "u_id": "2",
        "university_name": "Samrat Ashok Technological Institute, Vidisha"
    },
    {
        "u_id": "3",
        "university_name": "Jabalpur Engineering College"
    },
    {
        "u_id": "4",
        "university_name": "Rewa Engineering College"
    },
    {
        "u_id": "5",
        "university_name": "University Institute of Technology, Shahdol\t"
    },
    {
        "u_id": "6",
        "university_name": "Indira Gandhi Engineering College, Sagar"
    },
    {
        "u_id": "7",
        "university_name": "Ujjain Engineering College"
    },
    {
        "u_id": "8",
        "university_name": "Shri Govindram Seksaria Institute of Technology and Science (SGSITS), Indore"
    },
    {
        "u_id": "9",
        "university_name": "University Institute of Technology, Jhabua"
    },
    {
        "u_id": "10",
        "university_name": "Madhav Institute of Technology & Science, Gwalior"
    },
    {
        "u_id": "11",
        "university_name": "University Institute of Technology, Bhopal"
    }
]

}

【问题讨论】:

  • 好吧,你错过了一些代码让我们完全回答这个问题。 getJsonFromGetMethod 和你的 Gson 模型以及 fetchCollegeFromServerByUniversityName

标签: android json android-arrayadapter autocompletetextview


【解决方案1】:

您仅将university.getUniversityName() 添加到适配器这一事实意味着您将无法提取 ID。

您应该创建一个ArrayAdapter&lt;University&gt; 并在 University 类中实现一个 toString 方法,该方法返回名称(如果您想查看它,还可以选择 ID)

List<University> universities = new ArrayList<>();
ArrayAdapter<University> adapter = new ArrayAdapter<>(ActivitySignUp.this, R.layout.universiry_dropdown_layout, universities);

suuniversity.setAdapter(adapter);
adapter.setDropDownViewResource(R.layout.spinner_itemforchild);

for (University university  : univHolder.getData()) {
    if (!university.getUniversityName().isEmpty()) {
        adapter.add(university);
    }
}

【讨论】:

  • 但是当我提取两个数据时,我应该如何获取这些数据
  • 提取和获取是一回事...如果你添加了整个大学的对象而不是只添加名称字符串,你可以获得与之关联的所有数据
  • 任何人都可以帮助我制作用于同时取出大学和大学 ID 的代码并将其设置在自动完成文本视图中
  • 可能,但它仍然需要您拥有ArrayAdapter&lt;University&gt;guides.codepath.com/android/Using-an-ArrayAdapter-with-ListView ...无论如何,我认为您无法自动完成这两个字段
猜你喜欢
  • 2019-05-19
  • 2015-12-07
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
相关资源
最近更新 更多