getReseources()位图数组的NullPointerException

Toy*_*oye 8 java android bitmap nullpointerexception android-layout

我是Android开发的新手,遇到了一个问题,我正在尝试创建一个在图库中显示的图像数组,当我点击图片时,它会显示底部的图片.当我运行应用程序时,它崩溃了.我能得到的任何帮助都会非常有帮助.并提前感谢.

我的问题是

  1. 我怎么摆脱NullPointerException
  2. 我正确解码图片?有人能告诉我一个更好的方法吗?

谢谢

我的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".PicturesActivity" >

    <Gallery
        android:id="@+id/gallery1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="16dp" />

    <ImageView
        android:id="@+id/image1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/trophykiss" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我的课:

public class PicturesActivity extends Activity {   

    Bitmap[] myImages = new Bitmap[] {
         BitmapFactory.decodeResource(getResources(), R.drawable.champions),
         BitmapFactory.decodeResource(getResources(), R.drawable.trophykiss),
         BitmapFactory.decodeResource(getResources(), R.drawable.championstwo),
         BitmapFactory.decodeResource(getResources(), R.drawable.trophies),
         BitmapFactory.decodeResource(getResources(), R.drawable.culture),
         BitmapFactory.decodeResource(getResources(), R.drawable.maintrophy),
         BitmapFactory.decodeResource(getResources(), R.drawable.dive),
         BitmapFactory.decodeResource(getResources(), R.drawable.naijamain),
         BitmapFactory.decodeResource(getResources(), R.drawable.ethiopia),
         BitmapFactory.decodeResource(getResources(), R.drawable.peru),
         BitmapFactory.decodeResource(getResources(), R.drawable.funtime),
         BitmapFactory.decodeResource(getResources(), R.drawable.skils),
         BitmapFactory.decodeResource(getResources(), R.drawable.gabon),
         BitmapFactory.decodeResource(getResources(), R.drawable.gambia),
         BitmapFactory.decodeResource(getResources(), R.drawable.guinea)
    };


    private ImageView imageView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pictures);

        Gallery g = (Gallery) findViewById(R.id.gallery1);
        g.setAdapter(new ImageAdapter(this));
        imageView = (ImageView) findViewById(R.id.image1);



                g.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {
                // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), "pic: " + position,
                        Toast.LENGTH_SHORT).show();
                imageView.setImageBitmap(myImages[position]);

            }



        });
    }

    public class ImageAdapter extends BaseAdapter {
        int mGalleryItemBackground;
        private Context mContext;

        public ImageAdapter(Context c) {
            mContext = c;
            TypedArray a = obtainStyledAttributes(R.styleable.MyGallery);
            mGalleryItemBackground = a.getResourceId(
                    R.styleable.MyGallery_android_galleryItemBackground, 0);
            a.recycle();
        }

        public int getCount() {
            return myImages.length;
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView i = new ImageView(mContext);


            i.setImageBitmap(myImages[position]);
            i.setLayoutParams(new Gallery.LayoutParams(200, 200));
            i.setScaleType(ImageView.ScaleType.FIT_XY);
            i.setBackgroundResource(mGalleryItemBackground);

            return i;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

错误信息:

java.lang.NullPointerException: Attempt to invoke virtual method 
'android.content.res.Resources android.content.Context.getResources()
Run Code Online (Sandbox Code Playgroud)

Sub*_*sed 5

1)在当前活动中调用onCreate()之前,无法访问Context对象.对于当前使用它的方式,只需将数组的初始化移动到onCreate()方法中.

2)由于您一次解码了这么多图像,这应该在后台线程上进行.查看AsyncTask文档,了解如何将图像加载到单独的线程中.