2016-12-06 89 views
0

我是Android的初学者,我正在做一个简单的应用程序,它能够将图像上传到服务器,并且我无法从图像中加载图像将图库放到ivImage图像视图中。这是我的代码,下面是错误。从图库检索到的图像无法加载到图像视图

public class Home extends AppCompatActivity implements View.OnClickListener{ 
private static final int RESULT_LOAD_IMAGE = 1; 

ImageView ivUpload, ivGallery, ivImage; 
EditText etItemdesc,etItemname; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_home); 

    ivImage = (ImageView) findViewById(R.id.ivImage); 
    ivUpload = (ImageView) findViewById(R.id.ivUpload); 
    ivGallery = (ImageView) findViewById(R.id.ivGallery); 
    etItemdesc = (EditText) findViewById(R.id.etItemdesc); 
    etItemname = (EditText) findViewById(R.id.etItemname); 

    ivGallery.setOnClickListener(this); 
    ivUpload.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    switch(v.getId()){ 
     case R.id.ivGallery: 
      Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(galleryIntent,RESULT_LOAD_IMAGE); 
      break; 
     case R.id.ivUpload: 

      break; 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == RESULT_LOAD_IMAGE && resultCode ==RESULT_OK && data!= null){ 
     Uri selectedImage = data.getData(); 
     ivImage.setImageURI(selectedImage); //error is on this row 
    } 
} 
} 

这里有错误

Unable to open content: content://media/external/images/media/42 
     java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/42 from pid=3098, uid=10058 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() 
      at android.os.Parcel.readException(Parcel.java:1599) 
      at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) 
      at android.database.DatabaseUtils.readExceptionWithFileNotFoundExceptionFromParcel(DatabaseUtils.java:146) 
      at android.content.ContentProviderProxy.openTypedAssetFile(ContentProviderNative.java:692) 
      at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1104) 
      at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:942) 
      at android.content.ContentResolver.openInputStream(ContentResolver.java:662) 
      at android.widget.ImageView.resolveUri(ImageView.java:832) 
      at android.widget.ImageView.setImageURI(ImageView.java:449) 
      at chengweifeng1132701116.fyp.Home.onActivityResult(Home.java:52) 
      at android.app.Activity.dispatchActivityResult(Activity.java:6428) 
      at android.app.ActivityThread.deliverResults(ActivityThread.java:3695) 
      at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 
      at android.app.ActivityThread.-wrap16(ActivityThread.java) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:148) 
      at android.app.ActivityThread.main(ActivityThread.java:5417) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+1

您需要使用''元素将'READ_EXTERNAL_STORAGE'添加到清单中。而且,如果您的'targetSdkVersion'为23或更高,则您需要为此权限[实现运行时权限](https://developer.android.com/training/permissions/requesting.html)。 – CommonsWare

+0

[Marshmallow中的存储权限错误]的可能重复(http://stackoverflow.com/questions/33162152/storage-permission-error-in-marshmallow) –

+1

你应该真的只使用'ACTION_GET_CONTENT'。这不需要存储权限(不像'ACTION_PICK'和使用'MediaStore') – ianhanniballake

回答

0

你忘了添加该权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

,如果你是在api20 +请务必增加运行时间允许的测试。请参阅此处的文档:https://developer.android.com/training/permissions/requesting.html

+0

我在哪里执行运行时间许可?在案件或onActivityResult()函数? –

+0

将READ_EXTERNAL_STORAGE权限添加到您的清单 – msdev16

+0

请按照链接获取更多详细信息......如果未授予权限,则必须请求权限;如果授予权限,则在onRequestPermissionsResult()中运行Intent.ACTION_PICK代码。 – msdev16