在android微调器中填充json数组

时间:2016-05-06 07:13:34

标签: android arrays json android-spinner

我在android spinner中解析json时遇到问题。我已经尝试了下面列出的代码,但我在spinner中获得完整的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);
        }
    }

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

HI从服务器更改您的Json响应,或者您可以手动更改。

这是您的格式:

{"Department"
 [
  {
   "1": "Computer"
  },
  {
   "2": "IT"
  },
  {
   "3": "Civil"
  }
 ]
}

请在线查看任何json查看器格式。

答案 2 :(得分:0)

这种类型的json数据: 检查这个json数组:

{
    "schools": [{
        "Name": "Hill View Elementary",
        "SchoolID": "HVE"
    }, {
        "Name": "Mill View",
        "SchoolID": "MVE"
    }, {
        "Name": "Big School",
        "SchoolID": "BSC"
    }]
}

你的错误是你没有在两个对象之间加上逗号

答案 3 :(得分:0)

获取Json文件的方式是错误的,已经有Json类可以轻松地单独获取每个数组,对象或密钥。

#!/bin/sh func() { eval ${NAME}_SUFFIX=`result_of_some_command` } NAME=my_name func # This variable will become my_name_SUFFIX # but how can I reference it using $NAME? eval echo "\${${NAME}_SUFFIX}" 是我们将用于org.jsonJSONArray类的库。

在开始之前,您应该了解对Json文件方案的基本了解:

JSONObject这是由{}符号表示的数组语法,此数组可以包含数组,对象或键。

"name":{}代表和对象,它也可以容纳数组和键,但它没有名称。

[]现在是密钥类型,可以保存您想要的数据或值,并且有一个密钥可以按名称检索它。

现在这里有一段代码来获取文件并单独获取Json文件的每个部分,然后您可以根据需要填充它。

"key":"value"

使用此类,您可以获得一个String数组,其中包含您所拥有的json文件所需的部门。

数组和对象之间的层次结构非常重要,因此请记住,当您编写json文件时,可以更轻松地提取信息。