【发布时间】:2016-06-29 13:57:58
【问题描述】:
我试图在 onActivityResult 方法中从手机浏览图片后在 ImageView 中显示图片。我在 OnCreate 方法之前声明了我的 ImageView,在我通过布局上的 ID 找到它并最终想要显示所选图像之后。但是 imgPreview 仍然是灰色的,我可以看到消息“从未分配私有字段 ImageView”。虽然我在 onActivityResult 中的 imgPreview 上设置我的位图时没有遇到参考问题。
当我尝试调试此应用程序时,从拾取活动返回主活动时,我得到 java.lang.NullPointerException。如果我声明
ImageView imgPreview = (ImageView) findViewById(R.id.imageView);
另外在 OnActivityResult 中我没有收到错误。你能解释一下为什么会这样吗?当我想使用它时,我应该每次在方法中找到 imgPreview 吗?整个代码片段如下。
public class MainActivity extends AppCompatActivity implements TaskComplete {
private static final int BROWSE_PIC_REQUEST_CODE = 300;
private ImageView imgPreview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imgPreview = (ImageView) findViewById(R.id.imageView);
}
public void onClick3(View view) {
Intent i = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, BROWSE_PIC_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == BROWSE_PIC_REQUEST_CODE && resultCode == RESULT_OK) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
try {
imgPreview.setImageBitmap(BitmapFactory.decodeFile(picturePath,options));}
catch (Exception e) {
Log.e("test",e.toString());
}
else { some code };
}
【问题讨论】:
-
你有一个同名的局部和全局变量
imgPreview。只需删除本地声明。它应该可以正常工作。 -
我已经知道了。谢谢
-
@KNeerajLal 该变量没有全局范围(它不是公共/静态的),它是一个实例变量。
-
@MarkKeen 是的,我的意思是实例变量。我的错。 :)
标签: android nullpointerexception imageview onactivityresult