本文介绍了花费太多时间使用php volley库从服务器获取大型json数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个使用排球库从PHP服务器同步数据的应用程序.我正在从php接收json数组响应.当响应很小时,它运行良好.但是,当json很大时,就会出现问题.我正在使用xaamp进行同步.加载数据花费了太多时间.有时根本不获取任何数据.我正在从php的json数组中准备语句,并将其添加到简单数组列表中.

I am developing an app that sync data from PHP server using volley library.I am receiving json array response from php. When response is little, it is working perfectly. But problem occurs when json is very large. I am using xaamp for sync. It is taking too much time to load the data. Sometimes not getting any data at all. I am preparing statement from json array of php and adding it to simple array list.

正在获取logcat错误为:

Am getting logcat error as :

36.713ms
W/art: Suspending all threads took: 7.657ms
I/art: Waiting for a blocking GC Alloc
W/art: Suspending all threads took: 85.126ms
W/art: Suspending all threads took: 40.203ms
I/art: Background partial concurrent mark sweep GC freed 541(18KB) AllocSpace objects, 33(130MB) LOS objects, 11% free, 123MB/139MB, paused 42.528ms total 557.827ms
I/art: WaitForGcToComplete blocked for 328.549ms for cause Alloc
I/art: Starting a blocking GC Alloc
W/art: Suspending all threads took: 5.369ms
I/art: Background sticky concurrent mark sweep GC freed 105(3KB) AllocSpace objects, 3(11MB) LOS objects, 0% free, 142MB/142MB, paused 7.807ms total 52.573ms
W/art: Suspending all threads took: 5.261ms
W/art: Suspending all threads took: 294.041ms
W/art: Suspending all threads took: 38.308ms
I/art: Background partial concurrent mark sweep GC freed 388(13KB) AllocSpace objects, 26(103MB) LOS objects, 10% free, 133MB/149MB, paused 40.009ms total 515.759ms
W/art: Suspending all threads took: 5.063ms
I/art: Background sticky concurrent mark sweep GC freed 157(5KB) AllocSpace objects, 3(11MB) LOS objects, 0% free, 150MB/150MB, paused 7.052ms total 34.742ms
I/art: Waiting for a blocking GC Alloc
W/art: Suspending all threads took: 129.556ms
I/art: Background partial concurrent mark sweep GC freed 494(16KB) AllocSpace objects, 36(142MB) LOS objects, 12% free, 110MB/126MB, paused 1.517ms total 672.880ms
I/art: WaitForGcToComplete blocked for 485.833ms for cause Alloc
I/art: Starting a blocking GC Alloc
W/art: Suspending all threads took: 13.120ms
I/art: Background sticky concurrent mark sweep GC freed 104(3KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 138MB/138MB, paused 16.321ms total 38.525ms
W/art: Suspending all threads took: 9.983ms
W/art: Suspending all threads took: 285.230ms
W/art: Suspending all threads took: 38.702ms
I/art: Background partial concurrent mark sweep GC freed 435(14KB) AllocSpace objects, 27(106MB) LOS objects, 11% free, 127MB/143MB, paused 40.305ms total 493.740ms
W/art: Suspending all threads took: 5.107ms
I/art: Background sticky concurrent mark sweep GC freed 156(5KB) AllocSpace objects, 3(11MB) LOS objects, 0% free, 145MB/145MB, paused 6.856ms total 25.414ms
W/art: Suspending all threads took: 413.504ms
W/art: Suspending all threads took: 56.440ms
I/art: Background partial concurrent mark sweep GC freed 14(464B) AllocSpace objects, 9(35MB) LOS objects, 12% free, 115MB/131MB, paused 59.022ms total 496.519ms
I/art: Background sticky concurrent mark sweep GC freed 154(5KB) AllocSpace objects, 3(11MB) LOS objects, 0% free, 133MB/133MB, paused 5.741ms total 23.296ms
I/art: Waiting for a blocking GC Alloc
W/art: Suspending all threads took: 96.541ms
W/art: Suspending all threads took: 43.589ms
I/art: Background partial concurrent mark sweep GC freed 548(18KB) AllocSpace objects, 33(130MB) LOS objects, 11% free, 122MB/138MB, paused 45.755ms total 511.247ms
I/art: WaitForGcToComplete blocked for 332.277ms for cause Alloc
I/art: Starting a blocking GC Alloc
W/art: Suspending all threads took: 12.093ms
I/art: Background sticky concurrent mark sweep GC freed 104(3KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 150MB/150MB, paused 15.972ms total 51.520ms
W/art: Suspending all threads took: 7.796ms

我的json数组如下链接. http://www.ktronsystem.com/data.json

My json array is as following link.http://www.ktronsystem.com/data.json

我的android代码是

my android code is

        public void m461async(){
        if (!(co.loggedInUserUniqid == "")) {
            jdialog= new ProgressDialog(all.this);
            jdialog.setMessage("m462   Please wait..We are processing your request.");
            jdialog.setIndeterminate(false);
            jdialog.setCancelable(false);
            jdialog.show();

            final Cursor mall = co.data_db.rawQuery("select * from mall", null);
            mall.moveToFirst();
            final int mrows = mall.getCount();
            System.out.print(mrows+"    ababababababababqa" );

            for (int idx = 0; idx < mrows; idx++) {
                System.out.print("loop of m462 55555555555555555555555");
                mall.moveToPosition(idx);
                mtempidx = idx;
                final String mfilename = f1.getCol(mall, "filename").toLowerCase().trim();
                String mfilepath = co.getDataPath(cn) + "/";
                final String mfilefullname = mfilepath + mfilename;

                if (new File(mfilefullname).exists()) {
                    StringRequest stringRequest= new StringRequest(Request.Method.POST, murl + "getonlinem461data.php",
                            new Response.Listener<String>() {
                                @Override
                                public void onResponse(final String response) {
                                    mjay = mjay + 1;
                                    System.out.println(mjay+ "  m461111111111111111"+response);

                                    class m461prepare extends AsyncTask<String, String, Integer> {
                                        @Override
                                        protected Integer doInBackground(String... params) {
                                            msuccess=1;
                                            System.out.println(mjay+"  m46211111111111111"+response);
                                            final String mquery="insert into m462 (accode,book,date,vno1,vno2,vno3,part,tot_debit,tot_credit,balance,cl_type,m462index) values ";
                                            String mquery2="";

                                            try {
                                                System.out.print("zzzzzzzzzzzzzzzzzzzzzzzzzzz");

                                                final SQLiteDatabase mdb1 =SQLiteDatabase.openDatabase(co.getDataPath(cn)+"/"+mfilename, null, SQLiteDatabase.OPEN_READWRITE);
                                                mdb1.execSQL("delete from m462");
                                                mdb1.close();
                                                JSONArray arr = new JSONArray(response);
                                                final ContentValues insertValues = new ContentValues();
                                                System.out.print("xxxxxxxxxxxxxxxxxxxxxx");

                                                if (arr.isNull(0)==false) {
                                                    System.out.print("ccccccccccccccccccccccccc");

                                                    for (int i = 0; i < arr.length(); i++) {
                                                        final JSONObject obj = (JSONObject) arr.get(i);
                                                        final String maccode = obj.get("maccode").toString();
                                                        final String mbook = obj.get("mbook").toString();
                                                        final String mdate = obj.get("mdate").toString();
                                                        final String mvno1 = obj.get("mvno1").toString();
                                                        final String mvno2 = obj.get("mvno2").toString();
                                                        final String mvno3 = obj.get("mvno3").toString();
                                                        final String mpart = obj.get("mpart").toString();
                                                        final String mtot_debit = obj.get("mtot_debit").toString();
                                                        final String mtot_credit = obj.get("mtot_credit").toString();
                                                        final String mbalance = obj.get("mbalance").toString();
                                                        final String mcl_type = obj.get("mcl_type").toString();
                                                        final String mm462index = obj.get("mm462index").toString();

                                                        mquery2 = mquery2
                                                                + "('" + f1.abc(maccode) + "'," +
                                                                "'" + mbook + "'," +
                                                                "'" + mdate + "'," +
                                                                "'" + mvno1 + "'," +
                                                                "'" + mvno2 + "'," +
                                                                "'" + mvno3 + "'," +
                                                                "'" + mpart + "'," +
                                                                "'" + mtot_debit + "'," +
                                                                "'" + mtot_credit + "'," +
                                                                "'" + mbalance + "'," +
                                                                "'" + mcl_type + "'," +
                                                                "'" + mm462index + "'),";
                                                    }
                                                    System.out.print("vvvvvvvvvvvvvvvvvvvvvvv");

                                                    String mfinalquery = (mquery.trim() + mquery2.trim());
                                                    mfinalquery = mfinalquery.substring(0, mfinalquery.length() - 1);

                                                    ArrayQuery.add(mfinalquery);
                                                    ArrayFilename.add(mfilefullname);
                                                }
                                            } catch (JSONException e) {
                                                e.printStackTrace();
                                            }
                                            System.out.print("bbbbbbbbbbbbbbbbbbbbbbb");

                                            return 0;
                                        }
                                        @Override
                                        protected void onPostExecute(Integer a){
                                            System.out.print("nnnnnnnnnnnnnnnnnnnnnnnnnnnn");

                                            if (mall.isLast()) {
                                                System.out.println("333333333333");
                                                jdialog.dismiss();
//                                                trasync();
                                            }
                                        }
                                    }

                                    new m461prepare().execute();
                                }
                            },
                            new Response.ErrorListener() {
                                @Override
                                public void onErrorResponse(VolleyError error) {
                                    merror=1;
                                    jdialog.dismiss();
                                    f1.wait_wind("Please check your internet connection", cn);
                                }
                            }) {
                        @Override
                        protected Map<String, String> getParams() throws AuthFailureError {
                            Map<String, String> params = new HashMap<>();
                            params.put("uniqid_guid", co.loggedInUserUniqid);
                            params.put("filename", mfilename);
                            return params;
                        }
                    };
                    stringRequest.setRetryPolicy(new DefaultRetryPolicy(999999999, -1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

                    AppController.getInstance().addToRequestQueue(stringRequest,"m462_req");

                }
            }
            mall.close();
        }
        else{
            f1.wait_wind("Please login first !",cn);
        }
    }

提前谢谢.

推荐答案

如果文件长度很大,则应在后台运行此方法.尝试以下代码:

 @Override
public void onResponse(String  response) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            JSONArray arr = new JSONArray(response);

            int len = arr.length();
            for (int i = 0; i < len; i++) {

               //write your parsing logic here



            }

        }
    }).start();
}

这篇关于花费太多时间使用php volley库从服务器获取大型json数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 21:29