Android ManagedQuery()開いたときのIllegalargumentExceptionは、1つの連絡先へのURIパスを返しました
-
29-10-2019 - |
質問
Professional Android 2アプリケーション開発からのチュートリアルアプリケーションに問題があります。私はAndroid 2.3のために開発していますが、コードが改訂でかなり変わったようです。
基本的に私は2つのアクティビティを持っています。1つはもう1つを起動し、連絡先のリストを取得し、その後、選択した最初のアクティビティに戻り、画面に表示される最初のアクティビティに戻ります。Androidにはすでにこれを行うことがわかりますが、私はここで学ぼうとしているm:p
アクティビティ間のすべての通信は、意図を使用して処理されます。最初のアクティビティは他のアクティビティを正常に開始し、連絡先を選ぶことができ、それを最初のアクティビティに返します。それは実行されます onReturnActivity()
大丈夫だ。しかし、私がカーソルを作成しようとするとき(使用して managedQuery()
) の onReturnActivity()
シングルリターンされた連絡先データベースエントリを開くには、すべてが真似になり、IllegalargumentExceptionが表示されます。
その返されたURIパスは、content://com.android.contacts/contacts15(または別の番号)です。
エラーは次のとおりです。
java.lang.RuntimeException: Failure delivering result ResultInfo {
who=null, request=1, result=-1, data=Intent {
dat=content://com.android.contacts/contacts15 }}
to activity {com.paad.contactPicker/com.paad.contactPicker.ContactPickerTester}:
java.lang.IllegalArgumentException:
URI: content://com.android.contacts/contacts15,
calling user: com.paad.contactPicker,
calling package:com.paad.contactPicker
しかし、他のアクティビティでカーソルを作成することは大丈夫です。したがって、(Androidの私の非常に限られた知識で)私が考えることができる唯一のことは、URIパスまたは何も含まれていない他のアクティビティから返されたエントリの問題であるということです。しかし、私はそれが最初だと信じたいと思っています。
すべての権限が設定されており、他のアクティビティの連絡先データベースにアクセスできます。
これに関するいくつかの助けを本当に感謝しています、私は過去2日間立ち往生しています:/
編集
これが2番目のアクティビティを呼び出しています:
public void onClick(View _view) {
Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://android.provider.ContactsContract")) ;
startActivityForResult(intent, PICK_CONTACT) ;
}
私は実際にこの意図に渡すURIを使用していませんが、これは次のように2番目のアクティビティにハードコードされています。
final Uri data = ContactsContract.Contacts.CONTENT_URI ;
そして、ここで私がManagedQuery()を初めて(それが機能する場所)と呼ぶ場所です:
final Cursor c = managedQuery(data, null, null, null, null) ;
これは、再ターンアクティビティです:public void onactivityResult(int reqcode、int sustade、intent data){super.onactivityResult(reqcode、sustode、data);
switch(reqCode) {
case(PICK_CONTACT) : {
if(resCode == Activity.RESULT_OK) {
Uri contactData = data.getData() ;
Cursor c = managedQuery(contactData, null, null, null, null) ;
c.moveToFirst() ;
String name = c.getString(c.getColumnIndexOrThrow("DISPLAY_NAME")) ;
TextView tv = (TextView)findViewById(R.id.textView2) ;
tv.setText(name) ;
}
}
break ;
}
}
正しい解決策はありません