2014-02-20 26 views
0
public class TestActivity extends Activity{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ContentResolver cr=getContentResolver(); 
    Cursor phone=cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
    while(phone.moveToNext()) 
    { 
     String name=phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
     Log.d("name:", name); 
     get(name); 
    }phone.close(); 
} 

private void get(String name) { 
    DatabaseHandler db=new DatabaseHandler(getApplicationContext()); 
    Cursor c=db.returnFriend(name); 
    Log.d("get", c.getString(0)); 

} 


} 

    //Databse Handler Class query 
public Cursor returnFriendList(String names) 
{ 
    SQLiteDatabase db=this.getReadableDatabase(); 
    return db.query(TABLE_CONTACT, new String[]{name}, name+"=?", new String[] { String.valueOf(names) },null, null,null); 


} 

堆栈跟踪:安卓光标不工作得到错误

02-27 01:15:58.489: E/AndroidRuntime(32140): FATAL EXCEPTION: main 
02-27 01:15:58.489: E/AndroidRuntime(32140): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androidhive/com.example.androidhive.TestActivity}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0 
02-27 01:15:58.489: E/AndroidRuntime(32140): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at android.os.Looper.loop(Looper.java:137) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at android.app.ActivityThread.main(ActivityThread.java:4340) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at java.lang.reflect.Method.invokeNative(Native Method) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at java.lang.reflect.Method.invoke(Method.java:511) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at dalvik.system.NativeStart.main(Native Method) 
02-27 01:15:58.489: E/AndroidRuntime(32140): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0 
02-27 01:15:58.489: E/AndroidRuntime(32140): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:434) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at com.example.androidhive.TestActivity.get(TestActivity.java:33) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at com.example.androidhive.TestActivity.onCreate(TestActivity.java:26) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at android.app.Activity.performCreate(Activity.java:4465) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
02-27 01:15:58.489: E/AndroidRuntime(32140): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 
02-27 01:15:58.489: E/AndroidRuntime(32140): ... 11 more 
+1

游标不指向第一行 – Raghunandan

+0

我已经这么做了,然后它的shoiwing错误,cursoir出界了 – joshapoorva

+0

你可以发布returnFriend方法吗? – Giacomoni

回答

3
Cursor c=db.returnFriend(name); 
Log.d("get", c.getString(0)); 

你不moveToFirst你开始行动光标之前,因此它被放置在-1。

+0

写入后首先也显示光标超出限制的错误 – joshapoorva

+1

@ user3181391是的,因为光标是空的。检查'moveToFirst()'的返回值以查看光标指向移动后的某一行。 – laalto

-1

更改下方,

​​3210

phone.moveToFirst()是你让你的鼠标点提供的第一行数据,然后从那里继续使用使用MoveToNext阅读();

+0

这将跳过第一行,并不解决其他地方的实际问题。 – laalto

+0

@laalto - 没有得到你,你能解释一下吗? –

+0

'moveToFirst()'后跟'moveToNext()'将跳过第一个结果行。这不是OP的问题,它是其他游标,njzk2是正确的。 – laalto