Android 如何从gallery将图像设置为imageview?请告诉我如何实现它?提前谢谢

Android 如何从gallery将图像设置为imageview?请告诉我如何实现它?提前谢谢,android,image,onactivityresult,Android,Image,Onactivityresult,这是我的MainActivity.java public class MainActivity extends AppCompatActivity { int PICK_IMAGE_REQUEST=1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

这是我的MainActivity.java

public class MainActivity extends AppCompatActivity {

int PICK_IMAGE_REQUEST=1;

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

    Button btn= (Button) findViewById(R.id.btnImgGet);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();

            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);

            startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
        }
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(resultCode==RESULT_OK){

        if(requestCode==PICK_IMAGE_REQUEST && null != data)
        {
            //Toast.makeText(getApplicationContext(),"onActivityResult working",Toast.LENGTH_SHORT).show();
          try {
              Uri uri = data.getData();
              String[] projection = {MediaStore.Images.Media.DATA};

           Cursor cursor = getContentResolver().query(uri,projection,null,null,null);
              cursor.moveToFirst();
             int column_index=cursor.getColumnIndex(projection[0]);

              String path = getString(column_index);
              cursor.close();
            //  Log.d("Image Path is->",path);
              ImageView imageView = (ImageView) findViewById(R.id.imgView);
              imageView.setImageBitmap(BitmapFactory.decodeFile(path));
          }catch (NullPointerException ex){ex.printStackTrace();}

        }

    }


}

}
这是航海日志

01-23 18:13:41.767 7528-7528/com.example.manpreetsingh.gridviewimages W/ResourceType: No package identifier when getting value for resource number 0x00000000
01-23 18:13:41.778 7528-7528/com.example.manpreetsingh.gridviewimages D/AndroidRuntime: Shutting down VM
01-23 18:13:41.834 7528-7528/com.example.manpreetsingh.gridviewimages E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.manpreetsingh.gridviewimages, PID: 7528
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.providers.media.documents/document/image:21776 flg=0x1 }} to activity {com.example.manpreetsingh.gridviewimages/com.example.manpreetsingh.gridviewimages.MainActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x0
        at android.app.ActivityThread.deliverResults(ActivityThread.java:3659)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3702)
        at android.app.ActivityThread.access$1300(ActivityThread.java:155)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1366)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5343)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
     Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0
        at android.content.res.Resources.getText(Resources.java:299)
        at android.content.res.Resources.getString(Resources.java:385)
        at android.content.Context.getString(Context.java:377)
        at com.example.manpreetsingh.gridviewimages.MainActivity.onActivityResult(MainActivity.java:68)
        at android.app.Activity.dispatchActivityResult(Activity.java:6218)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:3655)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3702) 
        at android.app.ActivityThread.access$1300(ActivityThread.java:155) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1366) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5343) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 
01-23 18:13:44.494 7528-7528/? I/Process: Sending signal. PID: 7528 SIG: 9

这里有很多问题

从策略上讲,您是在
活动上调用
getString()
,而不是在
光标上调用
,这将不起作用

除此之外,ActivityResult()中的
几乎所有内容都是不正确的。您获得的
Uri
不一定在
MediaStore
中,并且
MediaStore
不必提供您可以读取的路径

请使用,like,获取
Uri
并将图像放入
ImageView

如果您坚持自己这样做,请拨出一个后台线程,在
ContentResolver
上使用
getInputStream()
,将该流传递给
BitmapFactory
上的
decodeStream()
imageView.setImageURI(uri)