Android 如何从gallery将图像设置为imageview?请告诉我如何实现它?提前谢谢
这是我的MainActivity.javaAndroid 如何从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);
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)代码>?