- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试获取以下 JSONArray 对象。有 2 个项目,但通过我实现的循环,我只能获取 1 个项目。我使用了 2 个 for 循环。如何解决?还有其他获取所有数据的方法吗?如果我从 -1 开始 for 循环,那么它会显示数组索引超出范围。
JSON结构如下
{
"status": 200,
"list": [
{
"quot_uid": "QUOTE2018@1",
"id": "1",
"expiry_date": "2018-05-29",
"created_at": "2018-05-22 11:45:58",
"left_days": "9",
"items": [
{
"ITEM_NAME": "Copper Wires",
"UNIT": "MT",
"qty": "5",
"make": null
},
{
"ITEM_NAME": "OFC Cables",
"UNIT": "MT",
"qty": "2",
"make": null
}
]
}
]
}
这是我已经尝试过的代码
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("list");
tv.removeAllViewsInLayout();
int flag = 1;
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
JSONArray jsonArray1 = jsonObject1.getJSONArray("items");
for (int j = 0; j < jsonArray1.length(); j++) {
TableRow tr = new TableRow(Main2Activity.this);
tr.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
if (flag == 1) {
TextView t1 = new TextView(Main2Activity.this);
t1.setPadding(10, 30, 10, 30);
t1.setText("ITEM NAME");
t1.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
t1.setTop(20);
t1.setTextColor(Color.BLACK);
t1.setTextSize(15);
t1.setTypeface(null, Typeface.BOLD);
tr.addView(t1);
TextView t2 = new TextView(Main2Activity.this);
t2.setPadding(10, 30, 10, 30);
t2.setText("QTY");
t2.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
t2.setTop(20);
t2.setTextColor(Color.BLACK);
t2.setTextSize(15);
t2.setTypeface(null, Typeface.BOLD);
tr.addView(t2);
tv.addView(tr);
final View vline = new View(Main2Activity.this);
vline.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, 10));
vline.setBackgroundColor(Color.BLUE);
tv.addView(vline);
flag = 0;
} else {
JSONObject jsonObject2 = jsonArray1.getJSONObject(j);
TextView tv1 = new TextView(Main2Activity.this);
tv1.setPadding(5, 30, 5, 30);
String item_nm = jsonObject2.getString("ITEM_NAME");
tv1.setText(item_nm);
tv1.setTextColor(Color.BLACK);
tv1.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
tv1.setTextSize(15);
tr.addView(tv1);
TextView tv2 = new TextView(Main2Activity.this);
tv2.setPadding(5, 30, 5, 30);
String item_qty = jsonObject2.getString("qty");
tv2.setText(item_qty);
tv2.setTextColor(Color.BLACK);
tv2.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
tv2.setTextSize(15);
tr.addView(tv2);
tv.addView(tr);
final View vline1 = new View(Main2Activity.this);
vline1.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, 1));
vline1.setBackgroundColor(Color.rgb(1, 132, 143));
tv.addView(vline1);
}
最佳答案
试试这个对我有用。我只是给出了完整的架构打印或使用您想要的值作为您的要求,作为一个示例,我记录了几个值。
主要区别是我用过
JSONObject listObj1=new JSONObject(jsonArray.get(i).toString());
代替你的台词
JSONObject listObj1=newjsonArray.getJSONObject(i);
完整的代码框架如下。我在字符串中使用了您的 JSON,而不是从响应中获取,尝试一下是否有效,然后将其更改为响应。它对我很有效。
String response="{'status':200,'list':[{'quot_uid':'QUOTE2018@1','id':'1','expiry_date':'2018-05-29','created_at':'2018-05-2211:45:58','left_days':'9','items':[{'ITEM_NAME':'CopperWires','UNIT':'MT','qty':'5','make':null},{'ITEM_NAME':'OFCCables','UNIT':'MT','qty':'2','make':null}]}]}";
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(response);
String status=jsonObject.get("status").toString();
Log.e("Status is ",status);
JSONArray jsonArray = jsonObject.getJSONArray("list");
for(int i=0;i<jsonArray.length();i++){
//In this loop, you will parse all the array elements inside list array
JSONObject listObj1=new JSONObject(jsonArray.get(i).toString());
String qoutid= listObj1.getString("quot_uid");
Log.e("quot uid is ",qoutid);
JSONArray lisItems=listObj1.getJSONArray("items");
for(int j=0;j<lisItems.length();j++){
JSONObject innerObj=new JSONObject(lisItems.get(j).toString());
String ITEM_NAME=innerObj.getString("ITEM_NAME");
Log.e("TAG",ITEM_NAME);
}
}
} catch (JSONException e) {
Log.e("TAG","Error "+e.toString());
e.printStackTrace();
}
还要检查错误日志,因为它会返回任何 JSON 解析错误
关于android - 使用 volley 获取 json 对象和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50734443/
我目前正在测试 Volley 库。但是当请求失败 (404) 时,它不会再次执行,或者至少没有错误。但是缺少数据。如果请求失败,这是重试请求的正确方法吗? 提前致谢 req.setRetryPolic
我是新来从事Volley和缓存工作的:P。尽管我已经看过许多与Volley进行图像缓存有关的文章和帖子,但是我仍然不清楚采用Volley进行图像缓存的最佳/首选方式。像磁盘缓存还是内存? Volley
我想使用 Volley 从我的 Android 应用发送请求。 我已经把它包含在 build.gradle 中了 dependencies { ... compile 'com.andr
我的目标是从另一个类调用 Volley,这是一种非常简洁、模块化的方式,即: VolleyListener newListener = new VolleyListener()
我的代码是: class MyService extends Service{ public void onCreate(){ new ImageLoader(mReque
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我需要帮助来解决 Volley 库错误。我已使用 nodejs api 向服务器发送一些凭据以进行用户注册。在成功的情况下,当我的所有凭据对于创建新用户帐户都是唯一的时,它会向我显示所有响应等的所有内
我正在尝试完善我的应用程序中的错误处理,但我找不到 Volley 触发某些错误的集中位置以及原因。例如,我想知道如果我的请求的状态代码是 500 或更大,它肯定会触发 ServerError,但我似乎
当我在调试器中运行该方法时,数据按预期显示,但是每当我尝试使用它执行任何操作时,parentObject 的值都会返回为 null。 我只是想从服务器获取响应并将其存储为 JSONObject 以便在
我正在使用 Android Volley 缓存请求,这在我使用 GET 时工作正常,但由于某些原因我改用 POST。现在我想用不同的 POST 数据缓存相同的 URL。 请求 1 -> URL1,PO
我的情况是使用 Android-volley至 POST我的 json 对象,我可以成功发布所有内容,我的数据在服务器中可见,但服务器响应为 String不像 json ,这就是出现错误的原因。 co
我正在使用 volley 从 REST api 解析电影详细信息,并将解析的数据保存在名为 detailsMovies 的对象数组列表中。但是我无法在 onResponse 方法之外访问 ArrayL
我想知道如何解决这个问题。已完成代码的研究和替换,但问题仍然存在。 这是我使用 volley 的代码。 private void Regist(){ loading.setVisibility
如何创建一个单独的类,在其中定义所有关于 volley在另一个 Activity 中,我们直接传递 URL、CONTEXT 和 Get Response... 最佳答案 首先在Activity中创建回
我正在使用 volley 库并以 XML 格式获取响应。我想知道我们如何使用/volley 库解析响应。谢谢。 最佳答案 StringRequest req = new StringReque
当我在android studio中搜索 Volley 时,同时获取com.mcxiaoke.volley:library:1.0.19和com.mcxiaoke.volley:library-aar
我是 volley 和 android 的新手,我已经用 gradle 安装了 volley 并做了与官方教程相同的操作。但是没有响应,这意味着 Errorlistener 和 Responselis
当我在 Volley 中发出请求时,我收到 com.android.volley.ServerError 和响应代码 400。 我正在做这样的事情(通用示例代码): final String para
我引用了http://www.androidhive.info/2016/02/android-push-notifications-using-gcm-php-mysql-realtime-chat
当我将以下行添加到依赖项的 build.gradle 行时,Android Studio 显示此错误消息:compile 'com.android.volley:volley:1.0.0' apply
我是一名优秀的程序员,十分优秀!