【发布时间】:2014-09-08 01:14:06
【问题描述】:
我不应该得到一个游标索引超出范围异常,我完全按照它应该使用的方式完成了它
if(cursor.moveToFirst)
我的代码如下所示
Log.w("colum3", String.valueOf(cursor.getCount()));
if (cursor.moveToFirst()) {
do {
//final Uri id = Uri.parse(cursor.getString(cursor.getColumnIndex("_id")));
//Log.d("PRINT3:", id.toString());
String link = cursor.getString(cursor.getColumnIndex("token_id"));
String URL_Update = "http://xxxxxxxxxxxxxxxx/add.json?token=" + link;
Log.d("Sync Url3:", URL_Update);
StringRequest req = new StringRequest(Request.Method.POST ,URL_Update,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// TODO Auto-generated method stub
try {
provider.delete(uri, cursor.getString(cursor.getColumnIndex("_id")), null);
getContext().getContentResolver().notifyChange(uri, null);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e("str Response3:", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<String, String>();
params.put("device_id",cursor.getString(cursor.getColumnIndex("device_id")));
params.put("latitude",cursor.getString(cursor.getColumnIndex("lat")));
params.put("longitude", cursor.getString(cursor.getColumnIndex("long")));
params.put("time", cursor.getString(cursor.getColumnIndex("time")));
Log.d("Parameter3", params.toString());
return params;
}
};
AppController.getInstance().addToRequestQueue(req);
cursor.moveToNext();
} while (cursor.isAfterLast());
}
有趣的是,它在此处的日志中显示了输出
final Uri id = Uri.parse(cursor.getString(cursor.getColumnIndex("_id")));
Log.d("PRINT3:", id.toString());
String link = cursor.getString(cursor.getColumnIndex("token_id"));
String URL_Update = "http://xxxxxxxxxxxxxxxx/add.json?token=" + link;
Log.d("Sync Url3:", URL_Update);
我在 Google Android 文档 中阅读了 Cursor 并且我做对了,但我似乎仍然不知道出了什么问题。只有当 Sqlite 数据库中只有一个数据时才会发生这种情况。
我的日志在下面
09-05 20:52:37.245: E/AndroidRuntime(5152): FATAL EXCEPTION: SyncAdapterThread-1
09-05 20:52:37.245: E/AndroidRuntime(5152): Process: com.deliveryscience.track:sync, PID: 5152
09-05 20:52:37.245: E/AndroidRuntime(5152): android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1
09-05 20:52:37.245: E/AndroidRuntime(5152): at android.database.AbstractCursor.checkPosition(AbstractCursor.java)
09-05 20:52:37.245: E/AndroidRuntime(5152): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java)
09-05 20:52:37.245: E/AndroidRuntime(5152): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java)
09-05 20:52:37.245: E/AndroidRuntime(5152): at com.deliveryscience.track.services.SyncAdapter.sendData(SyncAdapter.java:224)
09-05 20:52:37.245: E/AndroidRuntime(5152): at com.deliveryscience.track.services.SyncAdapter.onPerformSync(SyncAdapter.java:51)
09-05 20:52:37.245: E/AndroidRuntime(5152): at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java)
09-05 20:52:37.526: E/Volley(5152): [80521] NetworkDispatcher.run: Unhandled exception android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1
09-05 20:52:37.526: E/Volley(5152): android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1
09-05 20:52:37.526: E/Volley(5152): at android.database.AbstractCursor.checkPosition(AbstractCursor.java)
09-05 20:52:37.526: E/Volley(5152): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java)
09-05 20:52:37.526: E/Volley(5152): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java)
09-05 20:52:37.526: E/Volley(5152): at com.deliveryscience.track.services.SyncAdapter$9.getParams(SyncAdapter.java:257)
09-05 20:52:37.526: E/Volley(5152): at com.android.volley.Request.getBody(Request.java:433)
09-05 20:52:37.526: E/Volley(5152): at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:236)
09-05 20:52:37.526: E/Volley(5152): at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:210)
09-05 20:52:37.526: E/Volley(5152): at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:106)
09-05 20:52:37.526: E/Volley(5152): at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93)
09-05 20:52:37.526: E/Volley(5152): at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:110)
任何帮助将不胜感激,我已经问过一次问题但找不到任何答案,如果有人可以提供帮助,请再试一次
【问题讨论】:
-
试试
do{ }while(cursor.moveToNext()) -
查看我的回答,让我知道这是否适合您。
标签: android android-sqlite android-contentprovider