Search code examples
javaandroidandroid-activityimageswitcher

Android ImageSwitcher image to another activity


i was doing ImageSwitcher, it was working perfect tried to send ImageSwitcher Image to another activity.. ImageSwitcher works perfect but after clicking button for going to next activity, Error: Null Pointer Exception in (imageview) in Views.java

MainEvent.java

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher;

import java.io.ByteArrayOutputStream;

public class MainEvent extends Activity {

private ImageSwitcher imageSwitcher;
Button btnNext,back,select,refresh;
ImageView imageView;

// Array of Image IDs to Show In ImageSwitcher
int imageIds[]={R.drawable.frame3,R.drawable.frame7,
 R.drawable.curtain,R.drawable.potraitimage
        };
int messageCount=imageIds.length;
// to keep current Index of ImageID array
int currentIndex=0;
Animation in,out;
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main_event);

    // get The references
    btnNext=(Button)findViewById(R.id.button2);
    back=(Button)findViewById(R.id.button);
    select=(Button)findViewById(R.id.select);
    refresh=(Button)findViewById(R.id.refresh);
    imageSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher);

 // Set the ViewFactory of the ImageSwitcher that will create
 ImageView object   when asked
    imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
        public View makeView() {
            // TODO Auto-generated method stub
            // Create a new ImageView set it's properties
            imageView = new ImageView(getApplicationContext());
            imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
            imageView.setImageResource(R.drawable.potraitimage);
            return imageView;
        }
    });

    // Declare the animations and initialize them
     in = AnimationUtils.loadAnimation(this,android.R.anim.slide_in_left);
   out = AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right);

    // set the animation type to imageSwitcher
    imageSwitcher.setInAnimation(in);
    imageSwitcher.setOutAnimation(out);

    // ClickListener for NEXT button
    // When clicked on Button ImageSwitcher will switch between Images
   // The current Image will go OUT and next Image  will come 
  in with specified animation
    btnNext.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            // TODO Auto-generated method stub
            imageView.setImageResource(0);
            Log.d("index", String.valueOf(currentIndex));
            currentIndex++;
            Log.d("index", String.valueOf(currentIndex));
            // If index reaches maximum reset it
            if(currentIndex==messageCount)
                currentIndex=0;
            imageSwitcher.setImageResource(imageIds[currentIndex]);
        }
    });
    back.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // set the animation type to imageSwitcher

            // TODO Auto-generated method stub
            Log.d("index", String.valueOf(currentIndex));
            currentIndex--;
            Log.d("index", String.valueOf(currentIndex));
            // If index reaches maximum reset it
            if (currentIndex < 0)
                currentIndex = 2;
            imageSwitcher.setImageResource(imageIds[currentIndex]);
        }
    });
    select.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        imageView.setImageResource(imageIds[currentIndex]);
    BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
            Bitmap bitmap = drawable.getBitmap();
            Intent in=new Intent(MainEvent.this,Camera.class);
          /*  in.putExtra("image",bitmap);*/
           ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
            byte[] byteArray = stream.toByteArray();
            Bundle bu=new Bundle();
            bu.putByteArray("ImageByte",byteArray );
            in.putExtras(bu);
            startActivity(in);
        }
    });
    refresh.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onRestart();
        }
    });
}
@Override
protected void onRestart() {

    // TODO Auto-generated method stub
    super.onRestart();
    Intent i = new Intent(MainEvent.this, MainEvent.class);  //your class
    startActivity(i);
    finish();
}
}

Views.java

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;

public class Views extends AppCompatActivity {
ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_camera);
    image = (ImageView) findViewById(R.id.image);
    Bundle extras = getIntent().getExtras();
    byte[] byteArray = extras.getByteArray("ImageByte");
   /* Intent i=getIntent();*/
   /* Bitmap bitmap=i.getExtras().getParcelable("image");
    image.setImageBitmap(bitmap);*/

 Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
   image.setImageBitmap(bmp);//here null pointer exception

}
}

I don't know how to pass image from imageswitcher to next activity.. Please help me guys..


Solution

  • Instead of passing in the bytes of the image, can't you just pass in the index (int) it is on?

    That would be more efficient.

    (Extended answer from the chain below) Share the array in both activities. Simple way on static properties:

    public class StaticModelManager {
         public static int imageIds[]; 
    }
    

    Then get or set it anywhere in your application:

    StaticModelManager.imageIds = {
         R.drawable.frame3,
         R.drawable.frame7,
         R.drawable.curtain,
         R.drawable.potraitimage
    };
    

    Use them:

    StaticModelManager.imageIds[currentIndex];
    

    Multiple activities or fragments can easily access this one instance. Just make sure to clean things up when not needed or it sits in memory.