【发布时间】:2018-07-23 15:32:41
【问题描述】:
我将我的数据发送到我的云服务器......它工作正常。但我想发送 SQlite db 表中存在的所有数据。我在 Map 方法下使用 Do while 循环,但它只发送一行。不完整。
String url = "http://blhc.com:1980/Mob/SendDoc.aspx";
SendDoctors(Context paramContext)
{
this.cont = paramContext;
}
@Override
protected String doInBackground(Void... voids) {
//region Sending
try{
ds = new DataSource(cont);
ds.open();
final Cursor cursor = ds.send();
if(cursor.moveToFirst())
do {
//region Sending Data
StringRequest stringRequest = new StringRequest(Request.Method.POST,url,
new Response.Listener<String>(){
@Override
public void onResponse(String response) {
Toast.makeText(cont,"Uploaded.." ,Toast.LENGTH_SHORT).show();
Log.v("jarvis" ,"Resposce" + response);
}
}
, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(cont,"Error.." ,Toast.LENGTH_SHORT).show();
error.printStackTrace();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> param = new HashMap<String, String>();
param.put("CELL_NO", cursor.getString(cursor.getColumnIndex(DatabaseHelper.COL_DA_PHONE_NUM)));
param.put("M_DATE", M_DATE);
param.put("M_TIME", M_TIME);
param.put("EMP_ID", cursor.getString(cursor.getColumnIndex(DatabaseHelper.COL_DA_EMP_ID)));
param.put("DOC_ID", cursor.getString(cursor.getColumnIndex(DatabaseHelper.COL_DA_DOC_ID)));
param.put("SA", cursor.getString(cursor.getColumnIndex(DatabaseHelper.COL_DA_SA)));
param.put("NOTE", "NOTE");
param.put("CO_ID", cursor.getString(cursor.getColumnIndex(DatabaseHelper.COL_DA_CO_ID)));
param.put("LAT", cursor.getString(cursor.getColumnIndex(DatabaseHelper.COL_DA_LOC_LAT)));
param.put("LNG", cursor.getString(cursor.getColumnIndex(DatabaseHelper.COL_DA_LOC_LON)));
param.put("USER_ID", String.valueOf(LoginActivity.ID));
return param;
}
};
MySingleton.getmInstance(cont).addToRequestQue(stringRequest);
//endregion
}while (cursor.moveToNext());
}catch(Exception e){}
//endregion
return null;
}
错误
E/Volley: [191] NetworkDispatcher.run: Unhandled exception android.database.CursorIndexOutOfBoundsException: Index 6 requested, with a size of 6
android.database.CursorIndexOutOfBoundsException: Index 6 requested, with a size of 6
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460)
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
at com.example.zed.androidapplication.SendDoctors$3.getParams(SendDoctors.java:84)
at com.android.volley.Request.getBody(Request.java:468)
at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:253)
at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:227)
at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:107)
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:97)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:114)
W/System.err: com.android.volley.VolleyError: android.database.CursorIndexOutOfBoundsException: Index 6 requested, with a size of 6
W/System.err: at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:143)
W/System.err: Caused by: android.database.CursorIndexOutOfBoundsException: Index 6 requested, with a size of 6
W/System.err: at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460)
W/System.err: at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
W/System.err: at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
W/System.err: at com.example.zed.androidapplication.SendDoctors$3.getParams(SendDoctors.java:84)
W/System.err: at com.android.volley.Request.getBody(Request.java:468)
W/System.err: at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:253)
W/System.err: at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:227)
W/System.err: at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:107)
W/System.err: at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:97)
W/System.err: at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:114)
应用循环。但它显示了一些错误...我超出了限制。
我必须在我的网络服务器上清除一件事 Api 采用变量而不是数组。现在我想我明白我的意思了吗?
注意:我正在使用 volley lib 向服务器发送数据。
提前致谢。真的很感谢你的帮助。
【问题讨论】:
-
首先准备好整个本地数据映射对象,然后调用 volley 请求。
-
尝试循环doInBackground
-
在循环内向服务器请求不是一个好主意。如果您的
Cursor有 1000 行或更多行会怎样?它将向服务器发送大量请求。尝试单个请求并以数组或列表的形式发送所有数据。 -
@AbuYousuf 我该怎么做?
-
@AbuYousuf 兄弟请看一看。我的问题是我无法在数组中发送我的数据。由于接收端,我必须发送变量。
标签: android sqlite android-asynctask