2017-07-04 9 views
-4

Etwas ein bisschen komisch ist in meinem Code passiert, und ich verstehe nicht, was es ist ...Android: weird Nullpointer in Image Widget

Ich habe einige Imageviews, 4 von ihnen, die um angeklickt werden können, um starten Sie die CropActivity, beschneiden Sie ein Bild und das zugeschnittene Bild soll in der angeklickt ImageView angezeigt werden.

So , um herauszufinden, welche der 4 ImageViews geklickt wurde ich tun, wie folgt:

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; 

     } 

    } 

So, jetzt ... Wenn ich richtig bin .... das geklickt ImageView in clickedImgVw gespeichert .....

Das Problem ist, dass ..., wenn ich versuche clickedImgVw in onActivityResult zugreifen zu können, nach dem Zuschneiden, ich 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); 

       } 
      } 
     } 
    } 

Was geht hier vor ?, Was ist hier falsch?

* ------- --------- EDIT *

Nach einiger Debug habe ich festgestellt, dass der Variable mit dem Namen tag seinen Wert auf Laufzeit ändert.

Ich habe einige Screenshots es im gleichen Debug-Durchlauf zeigt ...., wenn die Anwendung in einer Klasse betritt namens AppCompatViewInflater.java die Variable tab verliert seinen Wert

Vor tag bekommt Wert:

enter image description here

Nach tag bekommt Wert:

enter image description here

Nach Eingabe AppCompatViewInflater.java:

enter image description here

+0

eine Ausnahme in Schalter Standardpfad Wurf, wenn der Tag ist etwas, das man nicht erwarten, . In diesem Fall können Sie tatsächlich eine NPE – Jens

+2

zeigen, wie Sie Tags für die Ansichten festlegen. Warum machst du nicht 'this.clickedImgVw = (ImageView) v;'? –

+0

hey Jens, danke, aber ich bin sehr sicher über die Tags, ich habe sie in den XML-Code, aber auch ich habe das empfangene 'tag' Protokolliert, und es ist immer einer der 4 Tags – codeKiller

Antwort

-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

Bitte fügen Sie Details des Problems und Ihre Lösung dazu – user7294900

+0

Ich denke, dieser Code hat keine "setTag". Also habe ich den "setTag" -Code in den Switch gelegt. –