【问题标题】:parse multiple JSON object and arrays in android [duplicate]在android中解析多个JSON对象和数组[重复]
【发布时间】:2018-08-13 08:06:32
【问题描述】:

我正在尝试解析多个 JSON 对象和数组,但是当我尝试运行我的应用程序时出现此错误:

E/dalvikvm:找不到类“android.view.animation.PathInterpolator”,引用自方法android.support.v4.view.animation.PathInterpolatorCompat.create W/dalvikvm: VFY: 无法解析 Landroid/support/v4/view/animation/PathInterpolatorCompat 中的新实例 1834 (Landroid/view/animation/PathInterpolator;); D/dalvikvm: VFY: 在 0x0006 处替换操作码 0x22 DexOpt:无法在 Landroid/support/v4/view/animation/PathInterpolatorCompat;.create 中的 0x08 处选择直接调用 0x3f07 DexOpt:无法在 Landroid/support/v4/view/animation/PathInterpolatorCompat;.create 中的 0x08 处选择直接调用 0x3f08 DexOpt:无法在 Landroid/support/v4/view/animation/PathInterpolatorCompat;.create 中的 0x08 处选择直接调用 0x3f09 W/EGL_emulation:eglSurfaceAttrib 未实现 3093 12436 W/EGL_emulation:eglSurfaceAttrib 未实现 3093 12436 I/Choreographer:跳过了 40 帧!应用程序可能在其主线程上做了太多工作。 W/System.err:org.json.JSONException:java.lang.String 类型为 0 的值 https://shop.aftabrayaneh.com/image/cache/data/arduino/boards/due/Arduino_Due_%20_R3_1-500x500.jpg 无法转换为 JSONObject 在 org.json.JSON.typeMismatch(JSON.java:100) 在 org.json.JSONArray.getJSONObject(JSONArray.java:514) 在 com.a000webhostapp.mathhelperapp.www.daneshjaprj.Main2Activity$1$2.run(Main2Activity.java:91) 在 android.os.Handler.handleCallback(Handler.java:733) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5019) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 在 dalvik.system.NativeStart.main(本机方法) 这是我的功能:

@Override
public void onCompleted(Exception ex, AsyncHttpResponse source, final String result) {
    if (ex != null) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(Main2Activity.this, R.string.error, Toast.LENGTH_SHORT).show();
                wait.dismiss();
            }
        });

        ex.printStackTrace();
        return;
    }

    if (!result.equals("") && !result.equals("[]")) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                try {
                    JSONObject jsonObject = new JSONObject(result);
                    JSONArray jsonArray = jsonObject.getJSONArray("product");

                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject object = jsonArray.getJSONObject(i);
                        HashMap<String, Object> hash_add = new HashMap<>();
                        hash_add.put("ID", object.getString("id"));
                        hash_add.put("Name", object.getString("name"));
                        hash_add.put("Price", object.getString("price"));
                        hash_add.put("Description", object.getString("description"));
                        hash_add.put("Available", object.getString("available"));
                        hash_add.put("Like", object.getString("like"));
                        hash_store_list.add(hash_add);
                        items_store_list = new String[hash_store_list.size()];
                        JSONArray js = object.getJSONArray("images_url");
                        for (int j = 0; j < js.length(); j++) {
                            JSONObject ob = js.getJSONObject(j);
                            HashMap<String, Object> hash_addd = new HashMap<>();
                            hash_addd.put("image1", ob.getString("0"));
                            hash_addd.put("image2", ob.getString("1"));
                            hash_addd.put("image3", ob.getString("2"));
                            hash_store_image.add(hash_addd);
                            items_store_image = new String[hash_store_image.size()];
                        }

                        JSONArray json = object.getJSONArray("comments");
                        for (int x = 0; x < json.length(); x++) {
                            JSONObject obj = json.getJSONObject(x);
                            HashMap<String, Object> hash_adddd = new HashMap<>();
                            hash_adddd.put("username", obj.getString("username"));
                            hash_adddd.put("description", obj.getString("description"));
                            hash_store_comment.add(hash_adddd);
                            items_store_comment = new String[hash_store_comment.size()];
                        }

                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        customAdapter.notifyDataSetChanged();
                    }
                });

                wait.dismiss();
            }
        });
    }
}

这是我的 json 文件:

{ "product": [ { "id": 1, "name": "برد آردوینو Due", "price": 106400, "description": "برد آردوینو Due یک میکروکنترلر بر پایه SAM3X8E ARM Cortex-M3 CPU از شرکت Atmel می باشد. این برد، اولین برد آردوینویی است که بر اساس میکروکنترلر با هسته ARM 32 بیتی پایه ریزی شده است. دارای 54 پین دیجیتال ورودی/خروجی (که 12 تای آن می تواند به عنوان خروجی PWM استفاده شود)، 12 ورودی آنالوگ، 4 پورت UARTs (پورت های سریال سخت افزاری)، و یک ساعت 84 مگاهرتزی، an USB OTG capable connection ، یک DAC (دیجیتال به آنالوگ)، 2 عدد TWI، یک پاور جک، یک SPI header، یک JTACG header، یک دکمه ریست و یک دکمه پاک کردن می باشد.", "discount_percent": 0, "available": true, "images_url": [ "https://shop.aftabrayaneh.com/image/cache/data/arduino/boards/due/Arduino_Due_%20_R3_1-500x500.jpg", "https://shop.aftabrayaneh.com/image/cache/data/arduino/boards/due/Arduino_Due_%20_R3_2-500x500.jpg", "https://shop.aftabrayaneh.com/image/cache/data/arduino/boards/due/Arduino_Due_%20_R3_3-500x500.jpg" ], "like": "2k", "comments": [ { "username": "ali", "description": "عالی بود!" }, { "username": "reza", "description": "واقعا خوب هست" } ] }, { "id": 2, "name": "برد آردوینو MEGA R3", "price": 67000, "description": "برد آردوینو Mega2560 یک برد میکروکنترلر بر پایه ATmega2560 می باشد. این برد مجموعاً 54 پین ورودی/خروجی دیجیتال (که 15 تای آن می تواند به عنوان خروجی PWM استفاده گردد)، 16 ورودی آنالوگ، 4 پورت UART (پورت های سریال سخت افزاری)، یک نوسان ساز کریستال MHz 16، یک پورت USB، یک پاورجک، یکICSP Header و یک دکمه ریست دارد. برد Mega 2560 شامل کلیه امکانات مورد نیاز جهت بکارگیری میکروکنترلر موجود برروی برد می باشد. برای شروع، تنها با یک کـابل USB، به سادگی برد را به کامپیوتـرتان وصل کنید، و یا آن را با یـک آداپـتور AC-to-DC و یا باتری راه اندازی نمایید.", "discount_percent": 0, "available": true, "images_url": [ "https://shop.aftabrayaneh.com/image/cache/data/arduino/boards/Arduino-Mega2560-R3/Arduino%20Mega2560%20Rev3_2-500x500.jpg", "https://shop.aftabrayaneh.com/image/cache/data/arduino/boards/Arduino-Mega2560-R3/Arduino%20Mega2560%20Rev3_3-500x500.jpg" ], "like": "239", "comments": [ { "username": "ali", "description": "عالی بود!" }, { "username": "reza", "description": "واقعا خوب هست" } ] }, { "id": 3, "name": "برد آردوینو NANO", "price": 37000, "description": "برد آردوینو نانو ، یک برد کوچک و کامل می باشد ، طراحی آن به نحوی است که استفاده از آن بر روی bread board را ساده می نماید . میکرو کنترل استفاده شده در این برد ATmega328 می باشد و کارایی آن کم و بیش شبیه برد آردوینو Duemilanove است اما در یک شکل متفاوت. حذف سوکت منبع تغذیه ، استفاده از قطعات SMD و مینی USB به جای پورت USB استاندارد باعث کوچک شدن برد و کاهش وزن آن گردیده است . اندازه برد فقط 17,8 در 43,2 میلیمتر و وزن آن چیزی در حدود 6 گرم می باشد ، این خصوصیات منحصر به فرد استفاده از برد را برای ربات های پرنده و سایر ربات ها و ماشین های کوچک میسر می سازد.", "discount_percent": 10, "available": true, "images_url": [ "https://shop.aftabrayaneh.com/image/cache/data/aftabrayaneh/Arduino_Boards/Arduino_Nano_V3__AFTAB/Arduino_Nano_V3__AFTAB_3-500x500.jpg", "https://shop.aftabrayaneh.com/image/cache/data/aftabrayaneh/Arduino_Boards/Arduino_Nano_V3__AFTAB/Arduino_Nano_V3__AFTAB_2-500x500.jpg", "https://shop.aftabrayaneh.com/image/cache/data/aftabrayaneh/Arduino_Boards/Arduino_Nano_V3__AFTAB/Arduino_Nano_V3__AFTAB_1-500x500.jpg" ], "like": "2k", "comments": [ { "username": "ali", "description": "عالی بود!" }, { "username": "reza", "description": "واقعا خوب هست" } ] }, { "id": 4, "name": "برد آردوینو Uno R3", "price": 42000, "description": "برد آردوینو Uno یک میکروکنترلر بر پایه ATmega328 می باشد . این برد 14 پین ورودی و خروجی دیجیتال (که 6 تای آن می تواند به عنوان خروجی PWM استفاده گردد)، 6 ورودی آنالوگ، یک تشدیدگر سرامیکی 16مگاهرتز (Ceramic Resonator)، یک پورت USB، یک پاورجک (ورودی منبع تغذیه)، یک ICSP header و یک دکمه ریست دارد. برد Uno شامل کلیه امکانات مورد نیاز جهت بکارگیری میکروکنترلر موجود بر روی برد می باشد. برای شروع تنها با یک کابل USB، به سـادگی برد را به کامپیوترتان متصـل کنید و یـا آن را با یـک آداپـتور AC-To-DC و یا باتری راه اندازی نمایید.", "discount_percent": 10, "available": false, "images_url": [ "https://shop.aftabrayaneh.com/image/cache/data/aftabrayaneh/Arduino_Products/Arduino_Boards/Arduino_UNO_R3/Arduino_UNO_R3_235_1-500x500.jpg", "https://shop.aftabrayaneh.com/image/cache/data/aftabrayaneh/Arduino_Products/Arduino_Boards/Arduino_UNO_R3/Arduino_UNO_R3_235_2-500x500.jpg", "https://shop.aftabrayaneh.com/image/cache/data/aftabrayaneh/Arduino_Products/Arduino_Boards/Arduino_UNO_R3/Arduino_UNO_R3_235_3-500x500.jpg" ], "like": "27", "comments": [ { "username": "alireza", "description": "عالی بود!" }, { "username": "reza_ghch", "description": "واقعا خوب هست" } ] } ] }

【问题讨论】:

  • @mashia 请检查我的以下答案。

标签: java android json android-studio


【解决方案1】:

试试这个

使用此代码

for (int j = 0; j < js.length(); j++) {

    HashMap<String, Object> hash_addd = new HashMap<>();
    hash_addd.put("image"+j, js.getString(j));
    Log.e("image"+j,":"+js.getString(j));

 }

不是这个

for (int j = 0; j < js.length(); j++) {
    JSONObject ob = js.getJSONObject(j);
    HashMap<String, Object> hash_addd = new HashMap<>();
    hash_addd.put("image1", ob.getString("0"));
    hash_addd.put("image2", ob.getString("1"));
    hash_addd.put("image3", ob.getString("2"));
    hash_store_image.add(hash_addd);
    items_store_image = new String[hash_store_image.size()];
}

输出

【讨论】:

  • 非常感谢
  • @masiha 谢谢,很高兴为您提供帮助。
【解决方案2】:

我认为问题不在于解析,问题在于HashMap

替换

HashMap<String, Object> hash_addd = new HashMap<>();

HashMap<String, String> hash_addd = new HashMap<String, String>();

【讨论】:

  • 他没有帮忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
  • 2015-06-10
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多