Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.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 使用第二个AsyncTask填充第二个微调器后,JSON id位置已更改_Android_Json_Loops_Android Asynctask_Android Spinner - Fatal编程技术网

Android 使用第二个AsyncTask填充第二个微调器后,JSON id位置已更改

Android 使用第二个AsyncTask填充第二个微调器后,JSON id位置已更改,android,json,loops,android-asynctask,android-spinner,Android,Json,Loops,Android Asynctask,Android Spinner,我有一个问题,我真的很困惑,做了这么多的调试,但仍然不能解决问题 id_kecamatan=categoriesList.get(position.getId()值在使用第二个Asynctask生成第二个微调器时发生更改,假设不会发生,但如果im不执行在public void中找到的代码,则选择ID position的值不会发生更改,假设会发生,如果我不放这段代码,我就不能填充第二个微调器,因为第二个微调器是基于第一个微调器的值。此问题导致SelectedItem上出现多个循环。请帮忙。谢谢 如

我有一个问题,我真的很困惑,做了这么多的调试,但仍然不能解决问题

id_kecamatan=categoriesList.get(position.getId()值在使用第二个Asynctask生成第二个微调器时发生更改,假设不会发生,但如果im不执行在
public void中找到的代码,则选择
ID position的值不会发生更改,假设会发生,如果我不放这段代码,我就不能填充第二个微调器,因为第二个微调器是基于第一个微调器的值。此问题导致SelectedItem上出现多个循环。请帮忙。谢谢

如果我把这段代码放在下面,
categoriesList.get(position.getId()已更改

    if (cekspin != cekstatusspin1){
                    spinnerFood2.setEnabled(true);
                    id_kecamatan = categoriesList.get(position).getId();
                    Log.d("MASUK KE 2: ", "> " + id_kecamatan);
                    cekstatusspin1 = cekspin;

//run the second asynctask for second spinner
                    runMultipleAsyncTask2();
                    }
以下是完整的代码:

public class MainActivity extends Activity implements OnItemSelectedListener {

    private Spinner spinnerFood;
    private Spinner spinnerFood2;
    // array list for spinner adapter
    private ArrayList<Category> categoriesList;
    private ArrayList<Category> categoriesList2;
    ProgressDialog pDialog;
    int id_kecamatan,id_kelurahan,vv;
    // API urls
    // Url to get all categories
    private String URL_CATEGORIES = "http://192.168.1.88/android_spinnner/get_categories.php";
    private String URL_CATEGORIES2 = "http://192.168.1.88/android_spinnner/get_kelurahan.php?id_kabupaten=";
    private String URL2 = URL_CATEGORIES2;
    TextView texji;
    String cekstatusspin1,cekspin,cekspin2,b= null;
    String nilai = "ada";
    ArrayAdapter<String> spinnerAdapter2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spinnerFood = (Spinner) findViewById(R.id.spinFood);
        spinnerFood2 = (Spinner) findViewById(R.id.spinner2);
        spinnerFood2.setEnabled(false);
        categoriesList = new ArrayList<Category>();
        categoriesList2 = new ArrayList<Category>();

        texji = (TextView)findViewById(R.id.text);
        // spinner item select listener
        spinnerFood.setOnItemSelectedListener(this);
        spinnerFood2.setOnItemSelectedListener(this);

        runMultipleAsyncTask();

    }


    /**
     * Adding spinner data
     * */
    private void populateSpinner() {
        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>(this,
                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
        spinnerFood.setAdapter(spinnerAdapter);

    }


    /**
     * Adding spinner data
     * */
    private void populateSpinner2() {
        if (spinnerAdapter2 != null) {
            spinnerAdapter2 = null;
        }
        Log.d("adapter terakhir: ", "> " + spinnerAdapter2);

        List<String> lables2 = new ArrayList<String>();
        Log.d("lables2: ", "> " + lables2);
        lables2.clear();
        Log.d("lables2 clear: ", "> " + lables2);

        for (int i = 0; i < categoriesList2.size(); i++) {
            lables2.add(categoriesList2.get(i).getName());
        }
        // Creating adapter for spinner
        spinnerAdapter2 = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, lables2);

        spinnerAdapter2.notifyDataSetChanged();
        Log.d("adapter terakhir: ", "> " + spinnerAdapter2);

        // Drop down layout style - list view with radio button
        spinnerAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        // attaching data adapter to spinner

        spinnerFood2.setAdapter(spinnerAdapter2);
    }



    private void runMultipleAsyncTask() // Run Multiple Async Task
    {
        GetCategories asyncTask = new GetCategories(); // First
        asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    }
    private void runMultipleAsyncTask2() // Run Multiple Async Task//
    {
        GetCategories2 asyncTask2 = new GetCategories2(); // Second
        // Above Api Level 13
        asyncTask2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    }

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

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Mengambil data KECAMATAN..");
            pDialog.setCancelable(false);
            pDialog.show();
        }
        protected Void doInBackground(Void... arg0) {
            ServiceHandler jsonParser = new ServiceHandler();
            String json = jsonParser.makeServiceCall(URL_CATEGORIES, ServiceHandler.GET);
            Log.e("Response: ", "> " + json);

            if (json != null) {
                try {
                    JSONObject jsonObj = new JSONObject(json);
                    if (jsonObj != null) {
                        JSONArray categories = jsonObj
                                .getJSONArray("categories");

                        for (int i = 0; i < categories.length(); i++) {
                            JSONObject catObj = (JSONObject) categories.get(i);
                            Category cat = new Category(catObj.getInt("id"),
                                    catObj.getString("name"));
                            categoriesList.add(cat);
                            Log.d("kecamatan BBBBBA: ", "> " + id_kecamatan);
                        }
                    }
                } 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();
        }
    }


    //Start Second Async Task:
    /**
     * Async task to get all food categories
     * */
    private class GetCategories2 extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(MainActivity.this);
            pDialog.setMessage("Mengambil data kELURAHAN..");
            pDialog.setCancelable(false);
            pDialog.show();
        }
        protected Void doInBackground(Void... arg0) {
            ServiceHandler jsonParser2 = new ServiceHandler();

            String json2 = jsonParser2.makeServiceCall(URL2+cekspin, ServiceHandler.GET);
            String x = URL2+cekspin;
            Log.d("URL: ", "> " + x);


            if (json2 != null) {
                try {
                    JSONObject jsonObj2 = new JSONObject(json2);
                    if (jsonObj2 != null) {
                        JSONArray categories = jsonObj2
                                .getJSONArray("categories");

                        for (int i = 0; i < categories.length(); i++) {
                            JSONObject catObj2 = (JSONObject) categories.get(i);
                            Category cat2 = new Category(catObj2.getInt("id"),
                                    catObj2.getString("kecamatan"));
                            categoriesList2.add(cat2);
                            Log.d("kecamatan BACKGOUNR: ", "> " + id_kecamatan);
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                Log.d("JSON3: ", "> " + json2);
            } 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();
            populateSpinner2();
        }
    }

        @Override
        public void onItemSelected (AdapterView<?> parent, View view,int position,
        long id){
        Toast.makeText(
                getApplicationContext(),
                parent.getItemAtPosition(position).toString() + " Selected",
                Toast.LENGTH_LONG).show();
            Log.d("cekspinA: ", "> " + cekspin);
            Log.d("cekstatuspin1A: ", "> " + cekstatusspin1);


            Log.d("kecamatan Q: ", "> " + id_kecamatan);
            id_kecamatan = categoriesList.get(position).getId();
            Log.d("kecamatan Z: ", "> " + id_kecamatan);

//          cekspin = cekstatusspin1;

            Log.d("categorylist: ", "> " + categoriesList);
            cekspin = String.valueOf(id_kecamatan);
            texji.setText(cekspin);

            Log.d("cekspin B: ", "> " + cekspin);
            Log.d("cekstatuspin1 B: ", "> " + cekstatusspin1);

            if (cekspin != cekstatusspin1){
                spinnerFood2.setEnabled(true);
                id_kecamatan = categoriesList.get(position).getId();
                Log.d("MASUK KE 2: ", "> " + id_kecamatan);
                cekstatusspin1 = cekspin;
 //run the second asynctask for second spinner
                runMultipleAsyncTask2();
                }
            }
    @Override
        public void onNothingSelected (AdapterView < ? > arg0){
    }
}

哦,我找到了一个解决方案,问题在
上被选中了
我只是添加了这个,问题就解决了

Spinner spinner = (Spinner) parent;
     if(spinner.getId() == R.id.spinner1)
     {
       //do this                    
     }
     else if(spinner.getId() == R.id.spinner2)
     {
       //do this
     }
Spinner spinner = (Spinner) parent;
     if(spinner.getId() == R.id.spinner1)
     {
       //do this                    
     }
     else if(spinner.getId() == R.id.spinner2)
     {
       //do this
     }