Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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 如何从服务器读取此json数据?_Android_Json_Arraylist - Fatal编程技术网

Android 如何从服务器读取此json数据?

Android 如何从服务器读取此json数据?,android,json,arraylist,Android,Json,Arraylist,我在读取json数据和从服务器读取图像时遇到问题 { "DS": { "LST": [ { "OID": 1, "OCD": "1", "OPE": "AIRCEL", "IPH": "Images/provider/aircelsm.jpg", "MIL": 10,

我在读取json数据和从服务器读取图像时遇到问题

  {
    "DS": {
        "LST": [
            {
                "OID": 1,
                "OCD": "1",
                "OPE": "AIRCEL",
                "IPH": "Images/provider/aircelsm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 2,
                "OCD": "3",
                "OPE": "AIRTEL",
                "IPH": "Images/provider/airtelsm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 4,
                "OCD": "4",
                "OPE": "BSNL",
                "IPH": "Images/provider/bsnlsm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 6,
                "OCD": "5",
                "OPE": "DOCOMO",
                "IPH": "Images/provider/docomosm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 7,
                "OCD": "6",
                "OPE": "IDEA",
                "IPH": "Images/provider/ideasm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 8,
                "OCD": "7",
                "OPE": "MTS",
                "IPH": "Images/provider/mtssm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 5,
                "OCD": "8",
                "OPE": "RELAINCE",
                "IPH": "Images/provider/reliancesm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 3,
                "OCD": "9",
                "OPE": "VODAFONE",
                "IPH": "Images/provider/vodafonesm.jpg",
                "MIL": 10,
                "MXL": 10
            }
        ]
}
}
我试过这个代码,但不起作用

    ArrayList<SpinnerMenu> selectedNetwork = new ArrayList<>();
        if(jsonStr != null){
            JSONObject json = null;
            SpinnerMenu spinnerData = new SpinnerMenu();
            try {
                JSONObject json = new JSONObject(jsonStr);
            } catch (JSONException e1) {
                e1.printStackTrace();
            }
            // Create the root JSONObject from the JSON string.
            JSONObject jsonRootObject = null;
            jsonRootObject = json.optJSONObject("DS");

            //Get the instance of JSONArray that contains JSONObjects
            JSONArray jsonArray = jsonRootObject.optJSONArray("LST");

            //Iterate the jsonArray and print the info of JSONObjects
            for(int i=0; i < jsonArray.length(); i++){
                JSONObject jsonObject = null;
                try {
                    jsonObject = jsonArray.getJSONObject(i);
                } catch (JSONException e1) {
                    e1.printStackTrace();
                }
                String iph = null;

                String oid = jsonObject.optString("OID").toString();
                String ocd = jsonObject.optString("OCD").toString();
                String opd = jsonObject.optString("OPE").toString();
                String mil = jsonObject.optString("MIL").toString();
                String mxl = jsonObject.optString("MXL").toString();


                try {
                    iph = jsonObject.getString("IPH").toString();
                } catch (JSONException e1) {
                    e1.printStackTrace();
                }

                String urldisplay = "http://192/TotalRecharge/"+iph;
                Bitmap mIcon11 = null;
                try {
                    InputStream in = new java.net.URL(urldisplay).openStream();
                    mIcon11 = BitmapFactory.decodeStream(in);
                } catch (Exception e3) {
                    e3.printStackTrace();
                }

                spinnerData.setOid(oid);
                spinnerData.setOcd(ocd);
                spinnerData.setOpd(opd);
                spinnerData.setMil(mil);
                spinnerData.setMix(mxl);
                spinnerData.setImage(mIcon11);

                selectedNetwork.add(spinnerData);

            }
ArrayList selectedNetwork=new ArrayList();
if(jsonStr!=null){
JSONObject json=null;
喷丝头菜单喷丝头数据=新喷丝头菜单();
试一试{
JSONObject json=新的JSONObject(jsonStr);
}捕获(JSONException e1){
e1.printStackTrace();
}
//从JSON字符串创建根JSONObject。
JSONObject jsonRootObject=null;
jsonRootObject=json.optJSONObject(“DS”);

//获取包含JSONObject的JSONArray实例 JSONArray JSONArray=jsonRootObject.optJSONArray(“LST”); //迭代jsonArray并打印JSONObject的信息 for(int i=0;i

我的代码中有什么错误。如何获取json数据并将其保存在arraylist中。在我的代码中,当我获取json数据并保存在arraylist中但返回null时,我不知道如何解决此问题。请帮助我。您声明了两次名为json的变量。这甚至不应该编译。您想在try block之前使用声明的变量

我还建议使用Log.e代替printStackTrace(在所有catch块中)

spinnerData对象存在另一个问题。您需要为每条记录创建新实例。您正在创建一个实例,并且只覆盖其中的值。移动此行:

SpinnerMenu spinnerData = new SpinnerMenu();
进入循环:

//Iterate the jsonArray and print the info of JSONObjects
for(int i=0; i < jsonArray.length(); i++) {
    JSONObject jsonObject = null;
    SpinnerMenu spinnerData = new SpinnerMenu();
//迭代jsonArray并打印JSONObject的信息
for(int i=0;i
嗨,伙计,我看到你正在努力使用JSONObject为每个价值出价,你可以使用Jackson是一个Java的JSON库,它更好,这里有一个链接供你开始:

要总结您需要做的事情: -创建POJO的 -使用JacksonMapper将其绑定 例子: 第一波乔 是

将是

public class FirstPojo{
@JsonProperty("OID")
Integer oid;
@JsonProperty("OCD")
String ocd;
@JsonProperty("OPE")
String ope;
@JsonProperty("IPH")
String iph;
@JsonProperty("MIL")
Integer mil;
@JsonProperty("MXL")
Integer mxl;
//Getters and Setters
}
第二个POJO将是第一个POJO的列表

    public class SecondPojo{
    @JsonProperty("LST")
    private List<FirstPojo> lstList;
//Getters and Setters
}
SecondPojo公共类{
@JsonProperty(“LST”)
私人名单;
//接球手和接球手
}
依此类推,第三个POJO将包含第二个POJO的一个属性名为DS的对象 然后你可以打电话给你的Jackson映射器,使用第二类getter获取你的列表 比如: 假设您有或从网络请求中获得JSON作为字符串

String jsonString ="{\"DS\":...... ";


try {

    ThirdPojo thirdPojo = objectMapper.readValue(jsonString, ThirdPojo.class);
    List<FirstPojo> list=thirdPojo.getlst.getlstList();
} catch (IOException e) {
    e.printStackTrace();
}
String jsonString=“{\'DS\”:…”;
试一试{
ThirdPojo ThirdPojo=objectMapper.readValue(jsonString,ThirdPojo.class);
List List=thirdPojo.getlst.getlstList();
}捕获(IOE异常){
e、 printStackTrace();
}

慢慢来,发现Jackson库:)祝你好运

你甚至没有试着将它保存在数组列表中..ArrayList selectedNetwork=new ArrayList();如果它是实例,它是局部变量还是实例?如果它是局部的,它就不会在方法的一侧工作。@ImAtWar请查看我的代码selectedNetwork.add(spinnerData);所选网络是arraylist//获取包含JSONObject的JSONArray JSONArray=jsonRootObject.optJSONArray(“LST”);使用getJsonArray(“LST”);//获取包含JSONObject的JSONArray JSONArray=jsonRootObject.getJsonArray(“LST”)的JSONArray实例;并检查ArraySpinner数据对象的长度是否需要在数组中loop@cricket_007你说得对,这是我没有看到的代码的另一个问题。@cricket\u 007你能发布你的答案吗
    public class SecondPojo{
    @JsonProperty("LST")
    private List<FirstPojo> lstList;
//Getters and Setters
}
String jsonString ="{\"DS\":...... ";


try {

    ThirdPojo thirdPojo = objectMapper.readValue(jsonString, ThirdPojo.class);
    List<FirstPojo> list=thirdPojo.getlst.getlstList();
} catch (IOException e) {
    e.printStackTrace();
}