0

Android デバイスの最近の通話リストに取り組んでいますが、CallLog.Calls.CACHED_NAME で 1 つの問題が発生しています。

番号が連絡先リスト名に含まれているか、不明である可能性がある最近の通話の 2 つのケースが考えられます。名前が連絡先に存在する場合、それはCallLog.Calls.CACHED_NAMEに表示されますが、不明な番号の場合、どのような値が得られますか?

キャッシュされた名前がnullの場合を比較すると、名前として番号を付けていますが、シミュレーターでは正常に動作しますが、 samsung galaxy ACE DUOSにインストールすると、最近の呼び出しに不明な番号があるとクラッシュします。

たとえば、最近の通話がABC : 888-888-8888XYZ : 999-999-9999の 場合、問題なく動作します。

しかし、それがNO NAME : 444-444-4444 になると、クラッシュします。

この問題の何が問題なのか誰でもわかりますか?

4

2 に答える 2

2

名前のない通話履歴から電話番号を取得しようとしたときに、同じ問題が発生しました。CallLog.Calls.CACHED_NAMEnull であっても、値は返されませんでした。しばらくして、このカーソルを構築することでこの問題を解決しました。

Cursor c1 = SetStatsView.this.managedQuery(CallLog.Calls.CONTENT_URI, 
                                           new String[]{CallLog.Calls.CACHED_NAME,  
                                           CallLog.Calls.NUMBER, CallLog.Calls.DATE}, 
                                    CallLog.Calls.CACHED_NAME+" is null", null, null);

連絡先名のない番号のみを返します。

于 2012-10-08T08:26:41.340 に答える
0

前述のように、次の方法でこの作業を行いました。新しいクエリを作成する必要はありません。条件を使用して null 値を処理するだけです。次のコードを参照してください。

Cursor mCursor = managedQuery(CallLog.Calls.CONTENT_URI, null, null,null,null);
String Name;
List<String>NameHolder=new ArrayList<String>();
int nameValue=mCursor.getColumnIndex(CallLog.Calls.CACHED_NAME);
 while (mCursor.moveToNext()){
             String name=mCursor.getString(nameValue);
                   if(name==null){
                       Name="Unknown";
                       NameHolder.add(Name);
                                 }
                       else {
                           Name=name;
                           NameHolder.add(Name);                                 
                             }
                 }
于 2018-03-29T23:59:48.160 に答える