问题描述
我正在开发一个使用排球库从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数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!