Android 如何使用异步任务动态设置微调器中的内容?

Android 如何使用异步任务动态设置微调器中的内容?,android,android-studio,android-spinner,Android,Android Studio,Android Spinner,我是android新手。我正在尝试从数据库获取spinner中的数据。但我不知道为什么我的列表没有设置在spinner中 我的代码是 public class AddBasicDetail extends Fragment implements AdapterView.OnItemSelectedListener { // array list for spinner adapter private ArrayList<State> categoriesList;

我是android新手。我正在尝试从数据库获取spinner中的数据。但我不知道为什么我的列表没有设置在spinner中

我的代码是

public class AddBasicDetail extends Fragment implements AdapterView.OnItemSelectedListener {

    // array list for spinner adapter
    private ArrayList<State> categoriesList;
    ProgressDialog pDialog;

    Spinner sp_state;
    // API urls
    // Url to create new category
    private String URL_NEW_CATEGORY = "http://mandirdekhoo.com/app/md_eng/state.php";

    public AddBasicDetail() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.add_basic_detail, container, false);

        sp_state = (Spinner) v.findViewById(R.id.sp_state);
        categoriesList = new ArrayList<State>();

        // spinner item select listener
        //sp_state.setOnItemSelectedListener((AdapterView.OnItemSelectedListener) getActivity());

        new GetCategories().execute();

        return v;
    }

    /**
    * Adding spinner data
    * */
    private void populateSpinner() {
         List<String> lables = new ArrayList<String>();

         //txtCategory.setText("");

         for (int i = 0; i < categoriesList.size(); i++) {
              lables.add(categoriesList.get(i).getName());
         }

         // Creating adapter for spinner
         ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(getContext(),
                        android.R.layout.simple_spinner_item, lables);

         // Drop down layout style - list view with radio button
         spinnerAdapter                           .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

         // attaching data adapter to spinner
         sp_state.setAdapter(spinnerAdapter);
    }

    /**
    * Async task to get all food categories
    * */
    private class GetCategories extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(getContext());
            pDialog.setMessage("Fetching food categories..");
            pDialog.setCancelable(false);
            pDialog.show();

        }

        @Override
        protected Void doInBackground(Void... arg0) {
            ServiceHandler jsonParser = new ServiceHandler();
            String json = jsonParser.makeServiceCall(URL_NEW_CATEGORY, ServiceHandler.GET);

            Log.e("Response: ", "> " + json);

            if (json != null) {

                try {
                    JSONObject jsonObj = new JSONObject(json);
                    Log.e("my response: ", "> " + jsonObj);
                    if (jsonObj != null) {
                        JSONArray categories = jsonObj                                            .getJSONArray("result");

                                for (int i = 0; i < categories.length(); i++) {
                                    JSONObject catObj = (JSONObject) categories.get(i);
                                    State cat = new State(catObj.getInt("id"),
                                            catObj.getString("state_name"));
                                    categoriesList.add(cat);
                                }
                            }

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

                    } else {
                        Log.e("JSON Data", "Didn't receive any data from server!");
                    }

                    return null;
                }

                @Override
                protected void onPostExecute(Void result) {
                    super.onPostExecute(result);
                    if (pDialog.isShowing())
                        pDialog.dismiss();
                    //populateSpinner();
                }

            }
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    Toast.makeText(
                        getContext(),
                        parent.getItemAtPosition(position).toString() + " Selected" ,
                        Toast.LENGTH_LONG).show();

            }

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

请帮助

嘿,在获得正确响应后,尝试添加此代码

例如,我正在尝试硬编码值。用json替换它

   final List<String> yourlist=new ArrayList<String>();
    yourlist.add("Item 1");
    yourlist.add("Item 2");
    yourlist.add("Item 3");
    yourlist.add("Item 4");
    yourlist.add("Item 5");  
final Spinner sp1= (Spinner) findViewById(R.id.spinner1);
final Spinner sp2= (Spinner) findViewById(R.id.spinner2);

ArrayAdapter<String> adp1=new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1,yourlist);
    adp1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    sp1.setAdapter(adp1);
final List yourlist=new ArrayList();
添加(“第1项”);
添加(“第2项”);
添加(“第3项”);
添加(“第4项”);
添加(“第5项”);
最终微调器sp1=(微调器)findViewById(R.id.spinner1);
最终微调器sp2=(微调器)findViewById(R.id.spinner2);
ArrayAdapter adp1=新的ArrayAdapter(此,
android.R.layout.simple\u list\u item\u 1,yourlist);
adp1.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
设置适配器(adp1);

希望这有帮助。:

像这样改变你的方法

private void populateSpinner(List<String> categoriesList) {
  List<String> lables = new ArrayList<String>();


 for (int i = 0; i < categoriesList.size(); i++) {
     lables.add(categoriesList.get(i).getName());
 }

 // Creating adapter for spinner
 ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(getContext(),
        android.R.layout.simple_spinner_item, lables);

 // Drop down layout style - list view with radio button
 spinnerAdapter
        .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // attaching data adapter to spinner
    sp_state.setAdapter(spinnerAdapter);
}

希望这将帮助您

Log.e(“Response:”,“>”+json)中从服务器获得什么行?从onPostExecute()01-11 10:10:51.870 2471-2531/?E/Response::>{result:[{id:“1”,“州名”:“阿萨姆”,“州名”:“成功”,“状态”:1},{id:“2”,“州名”:“比哈尔”,“州名”:“成功”,“状态”:1},{id:“3”,“州名”:“昌迪加尔”,“州名”:“成功”,“状态”:1},{id:“4”,“州名”:“恰蒂斯加尔”,“msg:“成功”,“状态”:1},{id:“5”,“州名”:“德里”,“州名”:“成功”,“status”:1},{“id”:“6”,“state_name”:“Gujarat”,“msg”:“Successfully”,“status”:1},{“id”:“7”,“state_name”:“Haryana”,“msg”:“Successfully”,“status”:1},{“id”:“8”,“state_name”:“查谟和克什米尔”,“msg”:“Successfully”,“status”:1}]}httpclient已被弃用,您还有其他一些库。我想您还没有在onPostExecute()中调用populateSpinner();
   final List<String> yourlist=new ArrayList<String>();
    yourlist.add("Item 1");
    yourlist.add("Item 2");
    yourlist.add("Item 3");
    yourlist.add("Item 4");
    yourlist.add("Item 5");  
final Spinner sp1= (Spinner) findViewById(R.id.spinner1);
final Spinner sp2= (Spinner) findViewById(R.id.spinner2);

ArrayAdapter<String> adp1=new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1,yourlist);
    adp1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    sp1.setAdapter(adp1);
private void populateSpinner(List<String> categoriesList) {
  List<String> lables = new ArrayList<String>();


 for (int i = 0; i < categoriesList.size(); i++) {
     lables.add(categoriesList.get(i).getName());
 }

 // Creating adapter for spinner
 ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(getContext(),
        android.R.layout.simple_spinner_item, lables);

 // Drop down layout style - list view with radio button
 spinnerAdapter
        .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // attaching data adapter to spinner
    sp_state.setAdapter(spinnerAdapter);
}
  @Override
protected void onPostExecute(Void result) {
    super.onPostExecute(result);
    if (pDialog.isShowing())
        pDialog.dismiss();
    populateSpinner(categoriesList);
}