在Android

时间:2018-08-13 08:06:33

标签: java android json android-studio

我正在尝试解析多个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 /编舞:跳过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(本机方法)                     在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": "واقعا خوب هست" } ] } ] }

2 个答案:

答案 0 :(得分:0)

我认为问题不在解析中,问题在HashMap中出现

替换

oi.Items = new object[] // <--
{
    DateTime.Today.AddDays(-1), // deliveryDay
    dr, // deliveryDays
    Ai // AuctionIdentification
};

通过

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

答案 1 :(得分:0)

尝试

使用此代码

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

输出

enter image description here