【问题标题】:How to put my async task data in a spinner?如何将我的异步任务数据放入微调器中?
【发布时间】:2017-06-13 07:47:45
【问题描述】:

我正在使用我自己制作的一些 API 开发一个 Android 应用程序。我快完成了,但我找不到将我获得的数据放入我的异步任务(获取我的 json 数据的人)中的方法。

这是我的代码:

String example;

static final String API_URL2 = "https://xxxxxxxx.xx";
//Start Used for spinner with different value and display
String[] textfordropdown = { "A",
        "B",
        "C",
};
String[] valueofdropdowtext =
        { "1",
                "2",
                "3",
        };
Spinner  spinnerdynamic;

OnCreate 我已经调用了我的异步任务以查看是否显示了某些内容,所以是的,它可以工作:

new GetList().execute();

我也在这里创建我的微调器

spinnerdynamic = (Spinner)findViewById(R.id.dynamic_spinner);
ArrayAdapter<String> adapter1 =
      new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_spinner_item, textfordropdown);
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerdynamic.setAdapter(adapter1);
spinnerdynamic.setOnItemSelectedListener(onItemSelectedListener1);

这里是onItemSelectedListener1的函数:

OnItemSelectedListener onItemSelectedListener1 =
        new OnItemSelectedListener(){

            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                                       int position, long id) {
                example = String.valueOf(valueofdropdowtext[position]);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {}

        };

这里是我的异步任务:

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


    protected void onPreExecute() {
    }

    protected String doInBackground(Void... urls) {
        try {
            URL url = new URL(API_URL2);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            try {
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                StringBuilder stringBuilder = new StringBuilder();
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    stringBuilder.append(line).append("\n");
                }
                bufferedReader.close();
                return stringBuilder.toString();
            } finally {
                urlConnection.disconnect();
            }
        } catch (Exception e) {
            Log.e("ERROR", e.getMessage(), e);
            return null;
        }
    }

    protected void onPostExecute(String response) {
        if (response == null) {
            response = "Une erreur c'est produite";
        }

        Log.i("INFO", response);

        try {
            JSONObject object = (JSONObject) new JSONTokener(response).nextValue();
            JSONArray prestationlist = object.getJSONArray("WhatIWant");

            //Permet de compter le nombre d'éléments dans le json array
            int arrSize = prestationlist.length();

            ArrayList<String> value = new ArrayList<String>(arrSize);
            ArrayList<String> name = new ArrayList<String>(arrSize);

            for(int i=0;i<arrSize;i++) {
                object = prestationlist.getJSONObject(i);
                value.add(object.getString("Value"));
                name.add(object.getString("Text"));
                //Here i've made some display to see if it works, i get the data.
                responseView.setText(value.toString());
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

那么如何将我的数据放入 String[] textfordropdown 或 valueofdropdowntext 中?

非常感谢!

【问题讨论】:

标签: java android asynchronous android-asynctask


【解决方案1】:

创建一个字符串数组列表并在文件顶部初始化

并在您的微调器中使用该数组列表

adapter1 =
  new ArrayAdapter<String>(MainActivity.this,
         android.R.layout.simple_spinner_item, yourarraylist);

并在 onPostExecute 方法中将您的值添加到该数组列表中

for(int i=0;i<arrSize;i++) {
            object = prestationlist.getJSONObject(i);
            value.add(object.getString("Value"));
            name.add(object.getString("Text"));
            //Here i've made some display to see if it works, i get the data.
           yourarraylist.add(object.getString("Text"));
            responseView.setText(value.toString());
        }
       adapter1.notifyDataSetChanged();

注意:您还需要在文件顶部初始化微调器适配器

【讨论】:

  • 听起来不错,但是当我把 add 放在我的 arraylist 上时,它给了我一个错误:无法解析方法 add(java.lang.string)
  • 我怎样才能通过这样做来实现我的价值?我想用我的新数组替换我的 valueofdropdowntext[position]
  • 你需要维护另一个具有相同索引的字符串数组列表
  • 什么意思?因为在我的微调器中我可以选择我的值但是当我单击它时似乎没有选择任何内容,我需要将我的 textfordropdown 替换为数组文本,所以没关系,但我还需要我的 valueofdropdowntext 替换为数组值,这不起作用:/
  • yourspinner.getSelectedItemPosition() 使用它,您将获得微调器的选定项目的索引。您可以在值数组列表中选择相同位置的值。如果您还维护一个值数组列表..
猜你喜欢
  • 2016-11-11
  • 1970-01-01
  • 2020-12-03
  • 2022-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多