- 私は日本人なので、この質問には文法上の間違いがあるかもしれません。
そして簡単な英語で答えを書いてください。ごめん。
Android用のメールソフトを開発しています。
メールアプリの宛先を「連絡先」を選択して取得したいので、以下のようなコードを書きました。
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Method stubs that are automatically generated.
Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);
}
public void onActivityResult(int reqCode, int resultCode, Intent data){
super.onActivityResult(reqCode, resultCode, data);
switch(reqCode){
case (PICK_CONTACT):
if (resultCode == Activity.RESULT_OK){
Cursor c = managedQuery(Uri.parse(data.getDataString()), null, null, null, null);
if (c.moveToFirst()){
edittext1.setText( c.getString(
c.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA1)));
}
}
case .....
}
}
しかし、実行した結果、java.lang.IllegalStateException が発生しました。
01-06 19:28:19.364: E/AndroidRuntime(614): FATAL EXCEPTION: main
01-06 19:28:19.364: E/AndroidRuntime(614): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=3, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r1-CF25D709DAA6CF49D22F/1 flg=0x1 (has extras) }} to activity {com.example.voicemailer/com.example.voicemailer.MainActivity}: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
01-06 19:28:19.364: E/AndroidRuntime(614): at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
01-06 19:28:19.364: E/AndroidRuntime(614): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574)
01-06 19:28:19.364: E/AndroidRuntime(614): at android.app.ActivityThread.access$2000(ActivityThread.java:117)
01-06 19:28:19.364: E/AndroidRuntime(614): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961)
01-06 19:28:19.364: E/AndroidRuntime(614): at android.os.Handler.dispatchMessage(Handler.java:99)
01-06 19:28:19.364: E/AndroidRuntime(614): at android.os.Looper.loop(Looper.java:123)
01-06 19:28:19.364: E/AndroidRuntime(614): at android.app.ActivityThread.main(ActivityThread.java:3683)
01-06 19:28:19.364: E/AndroidRuntime(614): at java.lang.reflect.Method.invokeNative(Native Method)
01-06 19:28:19.364: E/AndroidRuntime(614): at java.lang.reflect.Method.invoke(Method.java:507)
01-06 19:28:19.364: E/AndroidRuntime(614): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-06 19:28:19.364: E/AndroidRuntime(614): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-06 19:28:19.364: E/AndroidRuntime(614): at dalvik.system.NativeStart.main(Native Method)
01-06 19:28:19.364: E/AndroidRuntime(614): Caused by: java.lang.IllegalStateException: get field slot from row 0 col -1 failed
01-06 19:28:19.364: E/AndroidRuntime(614): at android.database.CursorWindow.getString_native(Native Method)
01-06 19:28:19.364: E/AndroidRuntime(614): at android.database.CursorWindow.getString(CursorWindow.java:329)
01-06 19:28:19.364: E/AndroidRuntime(614): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:49)
01-06 19:28:19.364: E/AndroidRuntime(614): at android.database.CursorWrapper.getString(CursorWrapper.java:135)
01-06 19:28:19.364: E/AndroidRuntime(614): at com.example.voicemailer.MainActivity.onActivityResult(MainActivity.java:116)
01-06 19:28:19.364: E/AndroidRuntime(614): at android.app.Activity.dispatchActivityResult(Activity.java:3908)
01-06 19:28:19.364: E/AndroidRuntime(614): at android.app.ActivityThread.deliverResults(ActivityThread.java:2528)
01-06 19:28:19.364: E/AndroidRuntime(614): ... 11 more
デバッグの結果、「Cursor c = managedQuery (null, null, null, null)), Uri.parse (data.getDataString ();」が原因だと思います。
しかし、私はそれを修正できませんでした。managedQuery() が推奨されないことは知っていますが、他の方法はわかりません。直し方を教えてください。...
PS確かにこのページを見ました: Cursor cursor = managedQuery(intent.getData().... nullpointerexception しかし、私は理解できませんでした. そのページに対する私の質問は、「getContactinfo() はどこにありますか? 使用方法は?」.