2017-07-04 68 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」代碼放在開關中。 –

相關問題