2016-11-18 8 views
0

So habe ich ein Imageview1, dass beim Klicken auf eine neue Aktivität gestartet wird, wo das gleiche Bild in einem neuen Bildansicht2 bei der nächsten Aktivität angezeigt wird. Auf das imageview1, auf das geklickt wird, gelangt man über eine Listview auf meine Hauptaktivität. Die Listenansicht wird von einem Array ausgefüllt, und jedes Listenansichtselement hat ein entsprechendes Bild.Fehler beim Übertragen von Bild aus Bildansicht auf zweite Aktivität

Wenn also ein Listenansichtselement angeklickt wird, wird eine neue Aktivität gestartet, in der sich imageview1 befindet. Diese Bildansicht wird mit einem XML-Datadarray gefüllt, das auf das Zeichenbild verweist.

Ich habe Probleme, das Bild von meiner ersten Bildansicht zur nächsten auf der neuen Aktivität zu übergeben. Ich erhalte eine Nullzeiger-Ausnahme, die ich unten eingefügt habe. Ich bin sehr neu in der Programmierung und bin mir nicht wirklich sicher, wie ich das Problem beheben kann. Jede Hilfe würde wirklich geschätzt werden.

heres Klasse meiner routeDetails, die die erste Imageview

public class RouteDetails extends AppCompatActivity { 

ImageView routeImage; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_route_details); 

    //TextView for route details 
    final TextView routeDetailsView = (TextView) findViewById(R.id.routeDetailsView); 
    routeDetailsView.setText(getIntent().getExtras().getString("route")); 

    //ImageView for route details 
    routeImage = (ImageView) findViewById(R.id.routeImage); 
    routeImage.setImageResource(getIntent().getIntExtra("imageResourceId", 0)); 


    //passing image to fullscreenimage 
    routeImage.setDrawingCacheEnabled(true); 
    routeImage.buildDrawingCache(); 
    final Bitmap bitmap = routeImage.getDrawingCache(); 

////////// Trying to pass image to new activity 

    routeImage.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) 
     { 
      Intent i = new Intent(RouteDetails.this, FullScreenImage.class); 
      //Bitmap _bitmap; // your bitmap 
      ByteArrayOutputStream _bs = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.PNG, 50, _bs); 
      i.putExtra("byteArray", _bs.toByteArray()); 
      startActivity(i); 
     } 

    }); 


//////////// 
} 

und herer im Versuch, meine fullscreenimage Klasse enthält das Bild zu

public class FullScreenImage extends AppCompatActivity { 

TouchImageView routeImageFull; 

@Override 
protected void onCreate(Bundle saveInstanceState){ 
    super.onCreate(saveInstanceState); 


    setContentView(R.layout.full_screen_image); 
    routeImageFull = (TouchImageView) findViewById(R.id.fullScreenImageView); 


    if(getIntent().hasExtra("byteArray")) { 
     TouchImageView routeImageFull= new TouchImageView(this); 
     Bitmap bitmap = BitmapFactory.decodeByteArray(
       getIntent().getByteArrayExtra("byteArray"),0,getIntent().getByteArrayExtra("byteArray").length); 
     routeImageFull.setImageBitmap(bitmap); 
    } 
} 
} 

und heren der Fehler im bekommen

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.zach.listview, PID: 3429 
       java.lang.NullPointerException: Attempt to invoke virtual  method 'boolean  android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int,  java.io.OutputStream)' on a null object reference 
        at  com.example.zach.listview.RouteDetails$1.onClick(RouteDetails.java:47) 
        at android.view.View.performClick(View.java:5610) 
        at android.view.View$PerformClick.run(View.java:22265) 
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at  android.app.ActivityThread.main(ActivityThread.java:6077) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
passieren
+1

Mögliche Duplikat [Was für eine Nullpointer ist, und wie kann ich es beheben?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do- i-fix-it) –

+0

Bitte lesen Sie den obigen Link für Vorschläge, um herauszufinden, was den Fehler verursacht. Sie sollten in Zeile 47 von RouteDetails.java beginnen. –

+0

'routeImage.getDrawingCache()' hat Sie null zurückgegeben, anscheinend –

Antwort

0

Anstatt die ganze Bitmap zu übergeben. Sie können die Ressourcen-ID, die Sie erhalten, einfach an eine andere Aktivität senden und das Bild auf die gleiche Weise anzeigen, wie Sie es hier tun. Unten ist der geänderte Code.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_route_details); 

    //TextView for route details 
    final TextView routeDetailsView = (TextView)  
    findViewById(R.id.routeDetailsView); 
    routeDetailsView.setText(getIntent().getExtras().getString("route")); 

    //ImageView for route details 
    routeImage = (ImageView) findViewById(R.id.routeImage); 

    int mImageResource = getIntent().getIntExtra("imageResourceId", 0); 
    routeImage.setImageResource(mImageResource); 


    //passing image to fullscreenimage 
    routeImage.setDrawingCacheEnabled(true); 
    routeImage.buildDrawingCache(); 
    final Bitmap bitmap = routeImage.getDrawingCache(); 

    // Trying to pass image to new activity 

    routeImage.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) 
     { 
      Intent i = new Intent(RouteDetails.this,FullScreenImage.class); 
      i.putExtra("mImageResource", mImageResource); 
      startActivity(i); 
     } 

    }); 
} 
+1

Du bist mein Held! Das ist, was ich ursprünglich versuchte, aber ich gab es auf. Es funktioniert perfekt, vielen Dank. – zsh5032

Verwandte Themen