2016-06-08 3 views
0

У меня есть ошибка для получения номера телефона и фотографии.java.lang.IllegalArgumentException: Недопустимые данные столбца1

Мне нужно сделать мою фотографию в образе просмотра и номер телефона в текстовом режиме.

Способ сделать снимок, это нормально, но для номера телефона это нормально no't

Код:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

    final ListView list = (ListView) rootView.findViewById(android.R.id.list); 
    final List<Map<String, Object>> contacts = retrieveContacts(getActivity().getContentResolver()); 

    if (contacts != null) 
    { 
     final SimpleAdapter adapter = new SimpleAdapter(getActivity(), contacts, R.layout.contact, new String[] { "contactNumber", "photo" }, new int[] { R.id.name, 
       R.id.photo }); 
     adapter.setViewBinder(new SimpleAdapter.ViewBinder() 
     { 

      @Override 
      public boolean setViewValue(View view, Object data, String textRepresentation) 
      { 
       if ((view instanceof ImageView) & (data instanceof Bitmap)) 
       { 
        final ImageView image = (ImageView) view; 
        final Bitmap photo = (Bitmap) data; 
        image.setImageBitmap(photo); 
        return true; 
       } 
       return false; 
      } 
     }); 

     list.setAdapter(adapter); 
    } 

    return rootView; 
} 

public List<Map<String, Object>> retrieveContacts(ContentResolver contentResolver) 
{ 
    final List<Map<String, Object>> contacts = new ArrayList<Map<String, Object>>(); 
    final Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER, 
      ContactsContract.Data._ID, ContactsContract.Contacts.HAS_PHONE_NUMBER }, null, null, null); 

    if (cursor == null) 
    { 
     Log.e("retrieveContacts", "Cannot retrieve the contacts"); 
     return null; 
    } 

    if (cursor.moveToFirst() == true) 
    { 
     do 
     { 
      final long id = Long.parseLong(cursor.getString(cursor.getColumnIndex(ContactsContract.Data._ID))); 
      final String contactNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      final int hasPhoneNumber = cursor.getInt(cursor.getColumnIndex(ContactsContract.Data.HAS_PHONE_NUMBER)); 

      if (hasPhoneNumber > 0) 
      { 
       final Bitmap photo = getPhoto(contentResolver, id); 
       final Map<String, Object> contact = new HashMap<String, Object>(); 
       contact.put("contactNumber", contactNumber); 
       contact.put("photo", photo); 

       contacts.add(contact); 
      } 
     } 
     while (cursor.moveToNext() == true); 
    } 

    if (cursor.isClosed() == false) 
    { 
     cursor.close(); 
    } 

    return contacts; 
} 
private Bitmap getPhoto(ContentResolver contentResolver, long contactId) 
{ 
    Bitmap photo = null; 
    final Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId); 
    final Uri photoUri = Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); 
    final Cursor cursor = contentResolver.query(photoUri, new String[] { ContactsContract.Contacts.Photo.DATA15 }, null, null, null); 

    if (cursor == null) 
    { 
     Log.e("getPhoto", "Cannot retrieve the photo of the contact with id '" + contactId + "'"); 
     return null; 
    } 

    if (cursor.moveToFirst() == true) 
    { 
     final byte[] data = cursor.getBlob(0); 

     if (data != null) 
     { 
      photo = BitmapFactory.decodeStream(new ByteArrayInputStream(data)); 
     } 
    } 

    if (cursor.isClosed() == false) 
    { 
     cursor.close(); 
    } 

    return photo; 
} 

LogCat:

java.lang.RuntimeException : Не удалось запустить активность ComponentInfo {net.lelandaislaposte.steven.contact/net.lelandaislaposte.steven.contact.MainActivity}: java.lang.IllegalArgumentException: Недопустимые данные столбца1 на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2416) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) на android.app.ActivityThread.-wrap11 (ActivityThread.java) на android. app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:148) на android. app.ActivityThread.main (ActivityThread.java:5417) at java.lang.reflect.Method.invoke (собственный метод) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit .java: 726) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) Вызвано: java.lang.IllegalArgumentException: Недопустимые данные столбца1 в android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils. Java: 165) на android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java:135) в android.content.ContentProviderProxy.query (ContentProviderNative.java:421) в android.content.ContentResolver.query (ContentResolver.java: 491) на android.content.ContentResolver.query (ContentResolver.java:434) at net.lelandaislaposte.steven.contact.MyFrag.ret rieveContacts (MyFrag.java:70) at net.lelandaislaposte.steven.contact.MyFrag.onCreateView (MyFrag.java:38) at android.support.v4.app.Fragment.performCreateView (Fragment.java:1974) at android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1067) на android.support.v4.app.FragmentManagerImpl.moveToState (FragmentManager.java:1252) на android.support.v4.app.BackStackRecord. run (BackStackRecord.java:742) на android.support.v4.app.FragmentManagerImpl.execPendingActions (FragmentManager.java:1617) на android.support.v4.app.FragmentController.execPendingActions (FragmentController.java:339) на android.support.v4.app.FragmentActivity.onStart (FragmentActivity.java:602) на android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1237) на android.app.Activity.performStart (Activity.java: 6253) на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2379) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) на android.app.ActivityThread.-wrap11 (ActivityThread.java) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:148) на android.app.ActivityThread.main (ActivityThread.java:5417) на java.lang.reflect.Method.invoke (Нативный метод) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

Спасибо за помощь ^^

+0

Вы пытаетесь получить имя столбца «data1», но она не существует. Проверьте свой запрос SQL и свою базу данных, если у вас есть правильное имя. – Johann67

ответ

0

Может быть слишком поздно, чтобы ответить на этот вопрос. Надеюсь, это может помочь кому-то. Это помогло мне. См. Эту ссылку.

Android Contact phone number using Loader Invalid column data1

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменяется –

Смежные вопросы