I am using this code to get the phonenumber of every contact
but I get the following error :
03-10 19:52:44.925: E/AndroidRuntime(15954): FATAL EXCEPTION: main
03-10 19:52:44.925: E/AndroidRuntime(15954):
java.lang.RuntimeException: Unable to start activity
ComponentInfo{contact.backup.alexander.fuchs/contact.backup.alexander.fuchs.App}:
android.database.CursorIndexOutOfBoundsException: Index -1 requested,
with a size of 1 03-10 19:52:44.925: E/AndroidRuntime(15954): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
03-10 19:52:44.925: E/AndroidRuntime(15954): at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
03-10 19:52:44.925: E/AndroidRuntime(15954): at
android.app.ActivityThread.access$1500(ActivityThread.java:117) 03-10
19:52:44.925: E/AndroidRuntime(15954): at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
03-10 19:52:44.925: E/AndroidRuntime(15954): at
android.os.Handler.dispatchMessage(Handler.java:99) 03-10
19:52:44.925: E/AndroidRuntime(15954): at
android.os.Looper.loop(Looper.java:130) 03-10 19:52:44.925:
E/AndroidRuntime(15954): at
android.app.ActivityThread.main(ActivityThread.java:3691) 03-10
19:52:44.925: E/AndroidRuntime(15954): at
java.lang.reflect.Method.invokeNative(Native Method) 03-10
19:52:44.925: E/AndroidRuntime(15954): at
java.lang.reflect.Method.invoke(Method.java:507) 03-10 19:52:44.925:
E/AndroidRuntime(15954): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
03-10 19:52:44.925: E/AndroidRuntime(15954): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 03-10
19:52:44.925: E/AndroidRuntime(15954): at
dalvik.system.NativeStart.main(Native Method) 03-10 19:52:44.925:
E/AndroidRuntime(15954): Caused by:
android.database.CursorIndexOutOfBoundsException: Index -1 requested,
with a size of 1 03-10 19:52:44.925: E/AndroidRuntime(15954): at
android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
03-10 19:52:44.925: E/AndroidRuntime(15954): at
android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
03-10 19:52:44.925: E/AndroidRuntime(15954): at
android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
03-10 19:52:44.925: E/AndroidRuntime(15954): at
android.database.CursorWrapper.getString(CursorWrapper.java:135) 03-10
19:52:44.925: E/AndroidRuntime(15954): at
contact.backup.alexander.fuchs.App.onCreate(App.java:85) 03-10
19:52:44.925: E/AndroidRuntime(15954): at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-10 19:52:44.925: E/AndroidRuntime(15954): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
03-10 19:52:44.925: E/AndroidRuntime(15954): … 11 more
My code :
package contact.backup.alexander.fuchs;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Contacts.People;
import android.provider.Contacts.Phones;
import android.provider.ContactsContract;
public class App extends Activity {
/** Called when the activity is first created. */
int i;
int i2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
util.deleteDir(new File("/data/data/contact.backup.alexander.fuchs/backup/"));
new File("/data/data/contact.backup.alexander.fuchs/backup/").mkdirs();
// get it
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
if (cur.getCount() > 0) {
i = 0;
i2 = 0;
while (cur.moveToNext()) {
String id = cur.getString(
cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(
cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// write
try
{
new File("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)).mkdirs();
FileWriter fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/id.txt");
BufferedWriter out = new BufferedWriter(fstream);
out.write(id);
//Close the output stream
out.close();
fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(i)+"/name.txt");
out = new BufferedWriter(fstream);
out.write(name);
//Close the output stream
out.close();
}
catch (Exception x)
{
}
if (Integer.parseInt(cur.getString(
cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
new String[]{id}, null);
String number = pCur.getString(
pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
while (pCur.moveToNext()) {
try
{
new File("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(id)).mkdirs();
FileWriter fstream = new FileWriter("/data/data/contact.backup.alexander.fuchs/backup/"+String.valueOf(id)+"/number.txt");
BufferedWriter out = new BufferedWriter(fstream);
out.write(number);
//Close the output stream
out.close();
}
catch(Exception x)
{
}
}
pCur.close();
}
i++;
}
}
}
}
//in oncreate
//this is what i get for getting all the contacts in the autocompletetextview here i will show u the row.xml that i am using in the simple adapter NOTE:in oncreate the current context IS NOT row.xml
row xml: