0

私は連絡先の名前と電子メールIDを取得していますが、HTC Desireでは正常に動作しますが、galaxyタブでコードを実行しようとするたびにmemObjおよびnullポインタon ... while(emailCur.moveToNext())。メモリの問題/カーソルにnullポインタが表示される

は、ここに私のコード

private void getPeopleList() { 
    String name, email; 
    Runtime.getRuntime().maxMemory(); 
    c = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    if (c.getCount() > 0) { 
     while (c.moveToNext()) { 

      name = c.getString(c 
        .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

      String id = c.getString(c 
        .getColumnIndex(BaseColumns._ID)); 
      cr.query(
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
        null, 
        ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
          + " = ?", new String[] { id }, null); 


      emailCur = cr.query(Email.CONTENT_URI, null, 
        Email.CONTACT_ID + " = " + id, null, null); 

      int j = 0; 

      while (emailCur.moveToNext()) { 

       bindData = new BindData[emailCur.getCount()]; 
       bindData = new BindData(); 
       email = emailCur 
         .getString(emailCur 
           .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 

       bindData.setEmailId(email); 
       bindData.setName(name); 
       Log.d("doubt : ", name+"//"+email); 
       mArrayList.add(bindData); 
       j++; 


      } 
      emailCur.close();     
     } 
     c.close(); 

    } 


} 

私は実行可能なワーカースレッドを使用して、このメソッドを呼び出しています。

必要な情報があれば教えてください。現在、私はその問題は私のArrayList(mArraylist)である:

はここ

06-29 16:13:26.854: ERROR/IMemory(6180): binder=0xdf3f68 transaction failed fd=-2147483647, size=0, err=-2147483646 (Unknown error: 2147483646) 
06-29 16:13:26.854: ERROR/IMemory(6180): cannot dup fd=-2147483647, size=0, err=-2147483646 (Bad file number) 
06-29 16:13:26.854: ERROR/IMemory(6180): cannot map BpMemoryHeap (binder=0xdf3f68), size=0, fd=-1 (Bad file number) 
06-29 16:13:26.854: ERROR/JavaBinder(6180): *** Uncaught remote exception! (Exceptions are not yet supported across processes.) 
06-29 16:13:26.854: ERROR/JavaBinder(6180): java.lang.RuntimeException: No memory in memObj 
06-29 16:13:26.854: ERROR/JavaBinder(6180):  at android.database.CursorWindow.native_init(Native Method) 
06-29 16:13:26.854: ERROR/JavaBinder(6180):  at android.database.CursorWindow.<init>(CursorWindow.java:518) 
06-29 16:13:26.854: ERROR/JavaBinder(6180):  at android.database.CursorWindow.<init>(CursorWindow.java:27) 
06-29 16:13:26.854: ERROR/JavaBinder(6180):  at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:493) 
06-29 16:13:26.854: ERROR/JavaBinder(6180):  at android.database.CursorWindow$1.createFromParcel(CursorWindow.java:496) 
06-29 16:13:26.854: ERROR/JavaBinder(6180):  at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:103) 
06-29 16:13:26.854: ERROR/JavaBinder(6180):  at android.os.Binder.execTransact(Binder.java:288) 
06-29 16:13:26.854: ERROR/JavaBinder(6180):  at dalvik.system.NativeStart.run(Native Method) 
06-29 16:13:26.858: ERROR/AndroidRuntime(6388): FATAL EXCEPTION: main 
06-29 16:13:26.858: ERROR/AndroidRuntime(6388): java.lang.NullPointerException 
06-29 16:13:26.858: ERROR/AndroidRuntime(6388):  at com.meomyo.fanaticfaninit.utils.MyCustomList.getPeopleList(MyCustomList.java:172) 
06-29 16:13:26.858: ERROR/AndroidRuntime(6388):  at com.meomyo.fanaticfaninit.utils.MyCustomList.access$0(MyCustomList.java:144) 
06-29 16:13:26.858: ERROR/AndroidRuntime(6388):  at com.meomyo.fanaticfaninit.utils.MyCustomList$1.run(MyCustomList.java:121) 
06-29 16:13:26.858: ERROR/AndroidRuntime(6388):  at android.os.Handler.handleCallback(Handler.java:587) 
06-29 16:13:26.858: ERROR/AndroidRuntime(6388):  at android.os.Handler.dispatchMessage(Handler.java:92) 
06-29 16:13:26.858: ERROR/AndroidRuntime(6388):  at android.os.Looper.loop(Looper.java:123) 
06-29 16:13:26.858: ERROR/AndroidRuntime(6388):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
06-29 16:13:26.858: ERROR/AndroidRuntime(6388):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-29 16:13:26.858: ERROR/AndroidRuntime(6388):  at java.lang.reflect.Method.invoke(Method.java:521) 
06-29 16:13:26.858: ERROR/AndroidRuntime(6388):  at 
+0

どのラインがクラッシュしていますか? – nickfox

+0

@Nic:while(emailCur.moveToNext())。 – PiyushMishra

答えて

1

試すことができますしてください私のログ猫です私はこのarraylistをアダプターと一緒に渡しています。それはarraylistにとってオブジェクトを長持ちさせる理由です。だからここでソリューションは1つのDummy ArrayListを作成するあなたのデータを入れて、ArrayListをアダプタに渡すときに元のArrayListにコピーします。

ここにコードがあります。ループ

dummyArrayList.add(bindData); 

とアダプタのインスタンスを作成する前には、元のArrayList(あなたがアダプタに渡したいリスト)

new Thread(new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      getPeopleList(); 
      runOnUiThread(new Runnable() {     
       @Override 
       public void run() { 
        // TODO Auto-generated method stub 
        mArrayList.clear(); 
        for(int i = 0; i < dummyArrayList.size(); i++){ 
         mArrayList.add(dummyArrayList.get(i)); 
        } 
        dummyArrayList.clear(); 
        myAdapter.notifyDataSetChanged(); 
        progressDialog.cancel(); 
       } 
      }); 
     } 
    }).start(); 
にこのダミーのArrayListをコピーしながら、内部

ArrayList<BindData> dummyArrayList= new ArrayList<BindData> 

その後、オリジナルのArraylistを渡してアダプタインスタンスを作成することができます。

MyAdapter myAdapter= new MyAdapter(this, R.layout.contactlistrow, mArrayList); 

正常に動作します。

ありがとうございました

+1

もう一つの答えを見つける:このコード "cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI、 ヌル、 ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" =」、新しいString [] {ID}を削除し、ヌル); "とうまく動作します:)。 – PiyushMishra

1

あなたは答えを得た

if (emailCur.moveToFirst()) { 
do { 

} while (emailCur.moveToNext()); 
} 

代わりのemailCur.moveToNext()

+0

他には何もしていません....私はそれほど問題ではないと思っています... ansに感謝します。 – PiyushMishra

+0

あなたはlogcatを通過できますか? – Nikhil

+0

@Nick:内部のメール私はLog Log.d( "疑問:"、名前+ "//" +電子メール)を見ることができます。 私は電子メールIDの名前を取得することができますが、最終的に私はこのエラーを持っています。 – PiyushMishra

関連する問題