Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Java致命异常Java.lang.NullPointerException_Java_Android_Eclipse - Fatal编程技术网

Android Java致命异常Java.lang.NullPointerException

Android Java致命异常Java.lang.NullPointerException,java,android,eclipse,Java,Android,Eclipse,我是Android新手,懂一点JAVA,但我想学习,我一直在做教程。我想做的事情如下: 我有一个渲染菜单,例如: 1.鸟 2.岩石 3.植物 当我按下“鸟”键时,我想显示图片和一个小的描述。图像的id和我保存在xml中的描述。像这样: <signs> <sign id="1_1" category="1"> <name>desc1</name> </sign> <sign id="1_2"

我是Android新手,懂一点JAVA,但我想学习,我一直在做教程。我想做的事情如下: 我有一个渲染菜单,例如: 1.鸟 2.岩石 3.植物 当我按下“鸟”键时,我想显示图片和一个小的描述。图像的id和我保存在xml中的描述。像这样:

<signs>
    <sign id="1_1" category="1">
        <name>desc1</name>
    </sign>
    <sign id="1_2" category="1">
        <name>desc2</name>
    </sign>
    <sign id="1_3_1" category="1">
        <name>desc3</name>
    </sign>
    <sign id="1_3_2" category="1">
        <name>desc4</name>
    </sign>
</signs>
代码是:

package apcmag.examples;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;

import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;


public class singleSignListItem extends Activity
{

    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);

        this.setContentView(R.layout.single_sign_gallery);

        Gallery g = (Gallery) findViewById(R.id.gallery);

        final Intent i = getIntent();
        final String REGEX = "/%%/";

        String product = i.getStringExtra("product");

        setTitle(product);

        g.setAdapter(new ImageAdapter(this));

        g.setOnItemSelectedListener(new OnItemSelectedListener() {
          public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
            {
                String [] products = i.getStringExtra("product_text").split(REGEX);
                Toast.makeText(singleSignListItem.this, ""+position, Toast.LENGTH_SHORT).show();
                TextView show_intro = (TextView) findViewById(R.id.show_intro);
                show_intro.setText(""+products[position]);
            }

            public void onNothingSelected(AdapterView<?> parent)
            {
                // TODO Auto-generated method stub

            }
        });
    }

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


//        private Integer[] mImageIds = {
//                R.drawable.sign_1_1,
//                R.drawable.sign_1_1,
//                R.drawable.sign_1_1,
//                R.drawable.sign_1_1
//        };

        private Integer[] mImages = takePhotos();

        public Integer[] takePhotos (){
            Intent g = getIntent();
            String Reg = "/%%/";
            String Reg2 = "_%_";

            String dataList = g.getStringExtra("product_text");
            String [] datastring = dataList.split(Reg);

            Integer[] imageResource = new Integer[20];

            String[] dd = null;

            for(int k = 0; k<datastring.length;k++){
                dd = datastring[k].split(Reg2);

            String imagename = "sign_"+dd[0];

            imageResource[k] = getResources().getIdentifier(imagename, "drawable", getPackageName());

            }

            return imageResource;

        }

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

        public int getCount() {
            return mImages.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.setImageResource(mImages[position]);
            i.setLayoutParams(new Gallery.LayoutParams(115, 200));
            i.setScaleType(ImageView.ScaleType.FIT_XY);
            i.setBackgroundResource(mGalleryItemBackground);

            return i;
        }
    }

}
但我不太确定该怎么办

更新


实际上我发现了问题:

在第77行,我正在初始化大小为20的ImageResource

Integer[] imageResource = new Integer[20];
但是拆分后的数据字符串只有4个元素

String [] datastring = dataList.split(Reg);
String [] datastring = dataList.split(Reg);
所以图像是可变的

 private Integer[] mImages = takePhotos();
 private Integer[] mImages = takePhotos();
将有20个元素,其中16个元素为空 最后呢

i.setImageResource(mImages[position]);
它无法呈现空元素,因此崩溃

所以我还有一个问题:


如果我不知道posible Integer[]的大小,我如何初始化并推入它的元素?对于列表?

我认为问题在于字符串[]dd=null;代码。必须初始化dd变量

此行有错误:

for(int k = 0; k<datastring.length;k++){
  dd = datastring[k].split(Reg2);

实际上我发现了问题:

在第77行,我正在初始化大小为20的ImageResource

Integer[] imageResource = new Integer[20];
整数[]imageResource=新整数[20]

但是拆分后的数据字符串只有4个元素

String [] datastring = dataList.split(Reg);
String [] datastring = dataList.split(Reg);
所以图像是可变的

 private Integer[] mImages = takePhotos();
 private Integer[] mImages = takePhotos();
将有20个元素,其中16个元素为空,最后

i.setImageResource(mImages[position]);

它无法呈现null元素,因此崩溃。

公共对象getItem(int-position){return position;}public long getItemId(int-position){return position;}检查返回类型。我认为两者都是int。

错误标记在singleSignListItem的第130行,这是您发布的126行。哪一行代码是第130行?哦,我删除了一些注释行。现在错误在这里:i.setImageResource(mImages[position]);在该行上设置一个断点,并逐步遍历代码,直到到达断点。检查模拟图像。多长时间?位置的值是多少?mImages在初始化时为整数[20],位置为0;所以这里只有一些可能性。我是空的;mImages为空或mImages[position]为空。不是直接将其传递给setImageResource,而是声明一个变量,以便确认它不是null每次通过循环设置
dd
datastring
实际上是一个数组。也许名称可能更明显一点,但这就是
[k]
的用途。实际上,我正在循环数据字符串并拆分元素。否则,如果我更改了,eclipse将显示一个错误。“Developer”,OP将拆分一个字符串,然后进一步拆分这些字符串。这段代码很好。我认为您应该只使用一个正则表达式来完成两个正则表达式的工作。你应该把Reg改为“[/%%/]+”。看看它是否有效,如果不行,告诉我。请告诉我你想在regex中做什么。我的意思是分割你想要得到的?如果这些是你选择的答案,然后单击“接受”,它将帮助其他人。我已经发现了问题!谢谢你的意见!干杯