2014-02-20 25 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