android - 在 android spinner 中填充 json 数组

标签 android arrays json android-spinner

我在 android spinner 中解析 json 时遇到问题。我已经尝试过下面列出的代码,但我在微调器中得到了完整的 json 数组,如屏幕截图

click to see result

我的 Json 数组

{"Department":[{"1":"Computer"},{"2":"IT"},{"3":"Civil"}]} // like this type json string

我的代码

public class GetDropdownItems extends AsyncTask<Void, Void, String[]> {
        public GetDropdownItems() {
            super();
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Log.i("MY_NETWORK", "first");
        }

        @Override
        protected String[] doInBackground(Void... params) {
            StringBuilder sbstaffdep = new StringBuilder();
            String staffdepURL = StaticDataEntity.URL_GETDEP;
            String charset = "UTF-8";  // Or in Java 7 and later, use the constant: java.nio.charset.StandardCharsets.UTF_8.name()
            URLConnection connectionstaffDep = null;
            try {
                connectionstaffDep = new URL(staffdepURL).openConnection();
            } catch (IOException e) {
                e.printStackTrace();
            }

            connectionstaffDep.setDoOutput(true); // Triggers POST.
            connectionstaffDep.setRequestProperty("Accept-Charset", charset);
            connectionstaffDep.setConnectTimeout(6000);

            InputStream responsestaffDep = null;
            try {
                responsestaffDep = connectionstaffDep.getInputStream();
            } catch (IOException e) {
                e.printStackTrace
                        ();
                return new String[]{"unreachable"};

            }

            BufferedReader brstaffDep = new BufferedReader(new InputStreamReader(responsestaffDep));
            String readstaffDep;
            try {

                while ((readstaffDep = brstaffDep.readLine()) != null) {
                    //System.out.println(read);
                    sbstaffdep.append(readstaffDep);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            try {

                brstaffDep.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            String[] finaldata = new String[1];
            finaldata[0] = sbstaffdep.toString();
            return finaldata;
        }

        @Override
        protected void onPostExecute(String[] s) {
            super.onPostExecute(s);

            if (s[0].equals("unreachable")) {
                new SweetAlertDialog(SignUpStaff.this, SweetAlertDialog.ERROR_TYPE)
                        .setTitleText("Oops...")
                        .setContentText("Unable to connect to server ! \n Please try again later.")
                        .setCancelText("Ok")
                        .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                            @Override
                            public void onClick(SweetAlertDialog sweetAlertDialog) {
                                sweetAlertDialog.cancel();
                            }
                        })
                        .show();
                return;
            }
            Log.i("MY_NETWORK", s.toString());
            String[] dataofdropdowndep = s[0].split(",");
            ArrayAdapter<String> adapterdep = new ArrayAdapter<String>(SignUpStaff.this, android.R.layout.simple_list_item_1, dataofdropdowndep);
            adapterdep.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            dropstaffdep.setAdapter(adapterdep);
        }
    }

最佳答案

public class GetDropdownItems extends AsyncTask<Void, Void, String> {
        public GetDropdownItems() {
            super();
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Log.i("MY_NETWORK", "first");
        }

        @Override
        protected String doInBackground(Void... params) {
            StringBuilder sbstaffdep = new StringBuilder();
            String staffdepURL = StaticDataEntity.URL_GETDEP;
            String charset = "UTF-8";  // Or in Java 7 and later, use the constant: java.nio.charset.StandardCharsets.UTF_8.name()
            URLConnection connectionstaffDep = null;
            try {
                connectionstaffDep = new URL(staffdepURL).openConnection();
            } catch (IOException e) {
                e.printStackTrace();
            }

            connectionstaffDep.setDoOutput(true); // Triggers POST.
            connectionstaffDep.setRequestProperty("Accept-Charset", charset);
            connectionstaffDep.setConnectTimeout(6000);

            InputStream responsestaffDep = null;
            try {
                responsestaffDep = connectionstaffDep.getInputStream();
            } catch (IOException e) {
                e.printStackTrace
                        ();
                return "unreachable";

            }
try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    responsestaffDep, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();

            Log.d("-------------", json);
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }


            return json;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);

            if (s.equals("unreachable")) {
                new SweetAlertDialog(SignUpStaff.this, SweetAlertDialog.ERROR_TYPE)
                        .setTitleText("Oops...")
                        .setContentText("Unable to connect to server ! \n Please try again later.")
                        .setCancelText("Ok")
                        .setCancelClickListener(new SweetAlertDialog.OnSweetClickListener() {
                            @Override
                            public void onClick(SweetAlertDialog sweetAlertDialog) {
                                sweetAlertDialog.cancel();
                            }
                        })
                        .show();
                return;
            }
            Log.i("MY_NETWORK", s.toString());
            Json js=new Json(s);
JSONArray array=js.getJSONArray("Department");
for(JSONArray b:array){
// traverse array here
}
            ArrayAdapter<String> adapterdep = new ArrayAdapter<String>(SignUpStaff.this, android.R.layout.simple_list_item_1, dataofdropdowndep);
            adapterdep.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            dropstaffdep.setAdapter(adapterdep);
        }
    }

关于android - 在 android spinner 中填充 json 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37066439/

相关文章:

android - 如何在自定义 View 中绘制文本?

arrays - 如何使这个 PowerShell 函数返回纯字符串,而不返回字符串数组?

android - 如何在 Ubuntu 上安装 Buildozer 以创建 Kivy 应用程序的 Android APK?

c++ - 当函数有多个参数时读取表会返回错误

c++ - 我的选择排序代码是否存在导致它跳过数组中的元素的问题?

json - Go json.Unmarshal 字段案例

arrays - 如何检查Java中的JSONArray是否为空?

javascript - CI 中的 Ajax 问题。获取数据但JQuery显示错误

android - 语音识别在几秒钟后停止收听

java - 如何避免连续两次生成相同的 2 个随机数