android - 如何使用 URL 处理多个微调器?

标签 android json http android-spinner

在我的应用程序中,我正在使用两个微调器,第一个微调器包含部门和 id 等数据,第二个微调器包含缺陷和 id,这里我正在使用一些 URL如下所示。

http://182.18.163.39/m/def.php?issue=1

此 URL 为我提供了第一个微调器值。从第一个微调器中选择一个值时,与该值相关的数据将出现在第二个微调器中。

这是我的第二个 URL,它提供了第二个微调器值。

"http://182.18.163.39/m/def.php?issue=2&dept= "+部门编号

在这个 URL 中,我想从第一个 URL 传递 id,这是我的问题,我能够从第一个微调器中获取所有值。当我从第一个微调器中选择一个值时,它不会在第二个微调器中给我相关值。 谁给我一个示例代码来解决这个问题。

代码如下:

  //Department spinner
    Spinner spinner;
    String URL="http://182.18.163.39/train/m/def.php?issue=1";
    ArrayList<String> Department;
    String uid;

    //Deficiency category spinner
    Spinner spinner2;
    String URL2 = "http://182.18.163.39/train/m/def.php?issue=2&dept="+dept_id;
    ArrayList<String>Deficiency;
    String defid;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_deficiency);

        //spinner for department
        Department = new ArrayList<>();
        spinner=(Spinner)findViewById(R.id.select_department);
        loadSpinnerData(URL);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                String department = spinner.getItemAtPosition(spinner.getSelectedItemPosition()).toString();
                Toast.makeText(getApplicationContext(),department,Toast.LENGTH_LONG).show();
            }
            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
                // DO Nothing here
            }
        });

        //spinner for deficiency
        Deficiency = new ArrayList<>();
        spinner2 = (Spinner)findViewById(R.id.deficiency_category);
        loadSpinnerDeficiency(URL2);

        spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                String deficiency =   spinner2.getItemAtPosition(spinner2.getSelectedItemPosition()).toString();
                Toast.makeText(getApplicationContext(),deficiency,Toast.LENGTH_LONG).show();
            }
            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
                // DO Nothing here
            }
        });

    }

    private void loadSpinnerData(String url) {

        try {

            HttpClient httpClient = new DefaultHttpClient();
            HttpGet httpPost = new HttpGet(url);
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();

            String responseString = EntityUtils.toString(entity);

            JSONArray jsonarray = new JSONArray(responseString);
            for (int i = 0; i < jsonarray.length(); i++) {
                JSONObject jsonobject = jsonarray.getJSONObject(i);
                String department = jsonobject.getString("Department");
                dept_id = jsonobject.getString("ID");
                Department.add(department);
            }

            spinner.setAdapter(new ArrayAdapter<String>(NewDeficiency.this, android.R.layout.simple_spinner_dropdown_item, Department));

        } catch (JSONException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private void loadSpinnerDeficiency(String url2) {

        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpGet httpPost = new HttpGet("http://182.18.163.39/train/m/def.php?issue=2&dept="+dept_id);
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();

            String responseString = EntityUtils.toString(entity);

            JSONArray jsonarray = new JSONArray(responseString);
            for (int i = 0; i < jsonarray.length(); i++) {
                JSONObject jsonobject = jsonarray.getJSONObject(i);
                String defcat = jsonobject.getString("Deficiency");
                defid = jsonobject.getString("ID");

                Deficiency.add(defcat);
            }

            spinner2.setAdapter(new ArrayAdapter<String>(NewDeficiency.this, android.R.layout.simple_spinner_dropdown_item, Deficiency));

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

这是我对第一个 URL 的 json 响应:

[{
    "Department": "Select Department",
    "ID": ""
}, {
    "Department": "Engg North",
    "ID": "1"
}, {
    "Department": "DIESEL SHED",
    "ID": "2"
}, {
    "Department": "S &amp; T",
    "ID": "3"
}, {
    "Department": "SAFETY",
    "ID": "4"
}, {
    "Department": "Srdenwest",
    "ID": "5"
}, {
    "Department": "enggwest",
    "ID": "6"
}, {
    "Department": "Engg central",
    "ID": "7"
}, {
    "Department": "electmaint",
    "ID": "8"
}, {
    "Department": "Operating",
    "ID": "9"
}, {
    "Department": "Security",
    "ID": "10"
}, {
    "Department": "Diesel  Shed",
    "ID": "11"
}, {
    "Department": "Electric Loco shed",
    "ID": "12"
}, {
    "Department": "C &amp; W",
    "ID": "13"
}, {
    "Department": "trso",
    "ID": "14"
}, {
    "Department": "trdohe",
    "ID": "15"
}, {
    "Department": "engg",
    "ID": "16"
}, {
    "Department": "commercial",
    "ID": "17"
}, {
    "Department": "engg South",
    "ID": "18"
}, {
    "Department": "Mechanical",
    "ID": "19"
}]

这是我对第二个 URL 的 json 响应:

[{
    "Deficiency": "Select Deficiency",
    "ID": ""
}, {
    "Deficiency": "Engg",
    "ID": "1"
}, {
    "Deficiency": "Track",
    "ID": "25"
}, {
    "Deficiency": "LCs",
    "ID": "26"
}, {
    "Deficiency": "Misc",
    "ID": "43"
}, {
    "Deficiency": "",
    "ID": "NULL"
}]

最佳答案

你应该像这样创建一个自定义对象

 private HashMap<String,String>departmentMap=new HashMap<>();
private void loadSpinnerData(String url) {

    try {

        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpPost = new HttpGet(url);
        HttpResponse response = httpClient.execute(httpPost);
        HttpEntity entity = response.getEntity();

        String responseString = EntityUtils.toString(entity);

        JSONArray jsonarray = new JSONArray(responseString);
        for (int i = 0; i < jsonarray.length(); i++) {
            JSONObject jsonobject = jsonarray.getJSONObject(i);
            String department = jsonobject.getString("Department");
            uid = jsonobject.getString("ID");
            Department.add(department);
            departmentMap.put(department,uid);
        }

        spinner.setAdapter(new ArrayAdapter<String>(NewDeficiency.this, android.R.layout.simple_spinner_dropdown_item, Department));

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

并像这样修改你的 firstSpinner onclick

 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l){
            String department=spinner.getItemAtPosition(spinner.getSelectedItemPosition()).toString();
            Toast.makeText(getApplicationContext(),department,Toast.LENGTH_LONG).show();
            String id=departmentMap.get(department);
            loadSpinnerDeficiency(URL2,id);
        }
        @Override
        public void onNothingSelected(AdapterView<?> adapterView){
            // DO Nothing here
        }
    });

现在您可以在 loadSpinnerDeficiency 方法中使用 id 来获得正确的响应

 private void loadSpinnerDeficiency(String url2,String uid) {

        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpGet httpPost = new HttpGet("http://182.18.163.39/train/m/def.php?issue=2&dept="+uid);
            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();

            String responseString = EntityUtils.toString(entity);

            JSONArray jsonarray = new JSONArray(responseString);
            for (int i = 0; i < jsonarray.length(); i++) {
                JSONObject jsonobject = jsonarray.getJSONObject(i);
                String defcat = jsonobject.getString("Deficiency");
                defid = jsonobject.getString("ID");

                Deficiency.add(defcat);
            }

            spinner2.setAdapter(new ArrayAdapter<String>(NewDeficiency.this, android.R.layout.simple_spinner_dropdown_item, Deficiency));

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

关于android - 如何使用 URL 处理多个微调器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49686776/

相关文章:

java - 与 HashMap<Long, String> 数据相比,为什么 data.entrySet().iterator() 的排序顺序不同?

java - 将 JSON 序列化为 Scala 案例类

json - 访问 JSON 对象 Prop - Angular JS

android - GridLayout LayoutParams - 以编程方式应用权重和跨度

android - 如何以编程方式加入 android 中的 2 个联系人?

javascript - 如何使用 getJSON 从文件中获取 JSON 数组?

java - 有最小消息队列吗?

http - 这个 goroutine 是如何失败的?

android - 移动到 SD 卡

java - 如何在数组中获取动态微调器选择的项目 ID?