Изображение Android ImageSwitcher для другого действия

Я делал ImageSwitcher, он работал отлично, пытался отправить ImageSwitcher Image на другой вид деятельности. ImageSwitcher работает отлично, но после нажатия кнопки для перехода к следующему действию, ошибка: исключение нулевого указателя в (imageview) в 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

}
}

Я не знаю, как передать изображение из imageswitcher к следующему действию.. Пожалуйста, помогите мне, ребята..

1 ответ

Решение

Вместо того, чтобы передавать байты изображения, вы не можете просто передать индекс (int), на котором он включен?

Это было бы более эффективным.

(Расширенный ответ из цепочки ниже). Совместно используйте массив в обеих операциях. Простой способ по статическим свойствам:

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

Затем получите или установите его в любом месте вашего приложения:

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

Используй их:

StaticModelManager.imageIds[currentIndex];

Несколько действий или фрагментов могут легко получить доступ к этому одному экземпляру. Просто убедитесь, что вычистили вещи, когда они не нужны, или они хранятся в памяти.

Другие вопросы по тегам