2017-06-13 107 views
0

我正在使用我自己制作的一些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里面?

非常感谢!

+0

请参阅[这个答案](https://stackoverflow.com/questions/7370107/update-city-spinner-with-notifydatasetchanged-after-state-is-selected)。 –

回答

1

创建一个字符串数组列表,并在文件

顶部初始化并使用ArrayList的在您的微调

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(); 

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

+0

听起来是个好主意,但是,当我把加在我的ArrayList它给了我一个错误:无法解析方法Add(java.lang.String中) –

+0

好吧是我不好,它的工作! –

+0

我如何通过这样做来实现我的价值?我想用我的新数组 –