Android 如何从服务器读取此json数据?
我在读取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,
{
"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();
}