Reputation: 11
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);
}
Stacktrace:
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
Upvotes: 0
Views: 1014
Reputation: 6792
Change the below,
ContentResolver cr=getContentResolver();
Cursor phone=cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
if(phone!=null){
**phone.moveToFirst();**
do
{
String name = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
Log.d("name:", name);
get(name);
}while(phone.moveToNext());
phone.close();
}
phone.moveToFirst() is where you make your cursor point the first row of data available and then continue reading from there using moveToNext();
Upvotes: -1
Reputation: 39386
Cursor c=db.returnFriend(name);
Log.d("get", c.getString(0));
You don't moveToFirst
before you start acting on the cursor, therefore it is placed at -1.
Upvotes: 3