2017-07-04 43 views
-4

东西有点怪异的是在我的代码发生的事情,我不明白它是什么......安卓:在ImageView的小部件怪异的NullPointerException

我有一些Imageviews,其中4个,可单击,以启动CropActivity,裁剪图像,裁剪的图像将显示在点击ImageView

所以,找出其中的4 ImageViews被点击我这样做:

public void onImageViewClicked(View v){ 
     String tag = v.getTag().toString(); 
     switch (tag){ 
      case "imgvW_1": 
       this.clickedImgVw = (ImageView) findViewById(R.id.imgvW_1); 
       break; 
      case "imgvW_2": 
       this.clickedImgVw = (ImageView) findViewById(R.id.imgvW_2); 
       break; 
      case "imgvW_3": 
       this.clickedImgVw = (ImageView) findViewById(R.id.imgvW_3); 
       break; 
      case "imgvW_4": 
       this.clickedImgVw = (ImageView) findViewById(R.id.imgvW_4); 
       break; 

     } 

    } 

所以现在......如果我是正确的....点击ImageView存储在clickedImgVw .....

的问题是...当我尝试访问clickedImgVwonActivityResult,裁剪后,我得到NullPointerException

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == 0 && resultCode == RESULT_OK){ 
      ImageCropFunction(); 
     } 
     else if (requestCode == 2) { 
      if (data != null) { 
       imgUri = data.getData(); 
       ImageCropFunction(); 
      } 
     } 
     else if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) { 
      if (data != null) { 

       CropImage.ActivityResult result = CropImage.getActivityResult(data); 

//THIS LINE HERE GIVES NULLPOINTEREXCEPTION --------- 
        String tag = clickedImgVw.getTag().toString(); 
//THIS LINE HERE GIVES NULLPOINTEREXCEPTION --------- 

       if (resultCode == RESULT_OK) { 
        Uri resultUri = result.getUri(); 
        DisplayImageOptions options = new DisplayImageOptions.Builder() 
          .displayer(new RoundedBitmapDisplayer(10)) 
          .build(); 
        imageLoader.displayImage(String.valueOf(resultUri),clickedImgVw, options); 

       } 
      } 
     } 
    } 

这是怎么回事?这里有什么问题?

* -------编辑--------- *

一些调试后,我注意到一个名为tag变量改变它在运行时的值。

我有一些screencaps显示相同的调试运行期间,它....当应用程序在一个名为类进入AppCompatViewInflater.java变量tab失去了它的价值

tag之前得到的值:

enter image description here

tag后得到的值:

enter image description here

进入AppCompatViewInflater.java后:

enter image description here

+0

扔在开关默认路径异常,如果标签是你不要指望。在这种情况下,您实际上可以获得一个NPE – Jens

+2

显示如何将标记设置为视图。另外你为什么不只是'this.clickedImgVw =(ImageView)v;'? –

+0

嘿Jens,谢谢,但我对标签非常肯定,我已经把它们放在XML代码中,但我也测试了记录收到的'tag',它总是4个标签之一 – codeKiller

回答

-2

Activity.class

public void onImageViewClicked(View v){ 
    String tag = v.getTag().toString(); 
    v.setTag("imgvW_1"); 
    switch (tag){ 
     case "imgvW_1": 
      this.clickedImgVw = (ImageView) findViewById(R.id.imgvW_1); 
      this.clickedImgVw.setTag("imgvW_1"); 
      break; 
     case "imgvW_2": 
      this.clickedImgVw = (ImageView) findViewById(R.id.imgvW_2); 
      this.clickedImgVw.setTag("imgvW_2"); 
      break; 
     case "imgvW_3": 
      this.clickedImgVw = (ImageView) findViewById(R.id.imgvW_3); 
      this.clickedImgVw.setTag("imgvW_3"); 
      break; 
     case "imgvW_4": 
      this.clickedImgVw = (ImageView) findViewById(R.id.imgvW_4); 
      this.clickedImgVw.setTag("imgvW_4"); 
      break; 

    } 

} 
+0

请添加问题的详细信息和解决方案 – user7294900

+0

我认为这段代码没有“setTag”。所以我把“setTag”代码放在开关中。 –