2014-10-16 42 views
0

我正在學習Android開發,並開始與約翰尼曼森YouTube視頻來創建基本的CRUD應用程序。清除和最佳方法在初學者的Android工作室CRUD操作

在第6部分,他從圖庫中選擇圖像並設置ImageView URI。每個人都像視頻一樣思考,但我的ImageView設置空白當我從圖庫中選擇圖像?

_ContactImage.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(); 
      intent.setType("image/*"); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      startActivityForResult(Intent.createChooser(intent, "Select Contact Image"), 1); 
     } 
    }); 
} 

public void onActivityResult(int reqCode, int resCode, Intent data){ 
    if (resCode == RESULT_OK){ 
     if (reqCode == 1) 
      _ContactImage.setImageURI(data.getData()); // I reach here when i Debug 
    } 

logcat的時候使用位圖的解決方案

10-16 23:22:02.668 15504-15504/com.example.solutionwares.contactmanager E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.solutionwares.contactmanager, PID: 15504 
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://media/external/images/media/67 (has extras) }} to activity {com.example.solutionwares.contactmanager/com.example.solutionwares.contactmanager.MyActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/67 from pid=15504, uid=10252 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 
      at android.app.ActivityThread.deliverResults(ActivityThread.java:3551) 
      at android.app.ActivityThread.handleSendResult(ActivityThread.java:3594) 
      at android.app.ActivityThread.access$1400(ActivityThread.java:161) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1313) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:157) 
      at android.app.ActivityThread.main(ActivityThread.java:5356) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/67 from pid=15504, uid=10252 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 
      at android.os.Parcel.readException(Parcel.java:1465) 
      at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185) 
      at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:148) 
      at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:682) 
      at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1066) 
      at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:907) 
      at android.content.ContentResolver.openInputStream(ContentResolver.java:632) 
      at com.example.solutionwares.contactmanager.MyActivity.onActivityResult(MyActivity.java:117) 
      at android.app.Activity.dispatchActivityResult(Activity.java:5618) 
      at android.app.ActivityThread.deliverResults(ActivityThread.java:3547) 
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3594) 
            at android.app.ActivityThread.access$1400(ActivityThread.java:161) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1313) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:157) 
            at android.app.ActivityThread.main(ActivityThread.java:5356) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
            at dalvik.system.NativeStart.main(Native Method) 

要解決簡單的清單

</application> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
</manifest> 
+0

是什麼_ContactImage?一個ImageView? – alpinescrambler 2014-10-16 17:33:25

+0

是_ContactImage是ImageView – user3768146 2014-10-16 17:54:02

+0

_ContactImage.setImageURI(data.getData()); //我到達這裏時,我調試 – user3768146 2014-10-16 17:55:51

回答

0

添加權限試試這個代碼,而不是下面。這樣做的原因建議,是有一些注意事項在docs關於使用setImageURI可能引起打嗝......

UPDATE,樣品的onClick:

_ContactImage.setOnClickListener(new View.OnClickListener() { 
    @Override 
public void onClick(View view) { 
    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 
    startActivityForResult(intent, 1) 
    } 
}); 

private Bitmap bitmap; 

@Override 
protected void onActivityResult(int reqCode, int resCode, Intent data) { 
    if (reqCode== 1 && resCode == Activity.RESULT_OK) { 
     try { 

      if (bitmap != null) { 
       bitmap.recycle(); 
      } 

      InputStream stream = getContentResolver().openInputStream(
        data.getData()); 
      bitmap = BitmapFactory.decodeStream(stream); 
      stream.close(); 
      _ContactImage.setImageBitmap(bitmap); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    super.onActivityResult(reqCode, resCode, data); 
} 

} 
+0

我試過,但此代碼崩潰應用程序 – user3768146 2014-10-16 18:15:45

+0

它在哪裏崩潰?任何logcats? – alpinescrambler 2014-10-16 18:18:07