2 chenrenxiang chenrenxiang 于 2015.07.20 23:59 提问

Android PagerAdapter里面的NullPointException

是这样的,我做了一个实现ViewPager的程序,包含两个View页面;
我在其中一个View页面中添加了Button按钮,然后在MainActivity里面写Button点击
事件的时候总是没有响应,然后在网上查了一下说应该在PagerAdapter的instantiateItem方法里面实例化Button然后写响应事件,下面是我的代码:

 public Object instantiateItem(ViewGroup container, int position) {
        switch (position) {
        case 1:
            musicName = (EditText) theList.get(position).findViewById(
                    R.id.musicname_edittext);
            singerName = (EditText) theList.get(position).findViewById(
                    R.id.singername_edittext);
            Button searchButton = (Button) theList.get(position).findViewById(
                    R.id.search_button);
            Button resetButton = (Button) theList.get(position).findViewById(
                    R.id.reset_button);
            // 搜索按钮点击事件
            searchButton.setOnClickListener(new OnClickListener() {

                // 通过用户输入的歌名和歌手名获取url,通过url获取xml文件输入流,然后sax解析xml输入流
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    String urlString = getUrl();
                    GetInputStreamAsyncTask getInputTask = new GetInputStreamAsyncTask();
                    getInputTask.execute(urlString);
                    inputStream = getInputTask.getInputStream();
                    saxParseXML(inputStream);

                }
            });
            // 重置按钮点击事件
            resetButton.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    musicName.setText("");
                    singerName.setText("");
                }
            });
            break;
        default:
            break;
        }

        container.addView(theList.get(position), 0);
        return theList.get(position);
    }

我在一个Button响应事件中想使用AsyncTask获取网络上一个xml文件的InputStream,然后用sax解析这个InputStream,下面是我的AsycTask类的代码:

```public class GetInputStreamAsyncTask extends AsyncTask{

private InputStream inputStream;
public GetInputStreamAsyncTask(){
}
public InputStream getInputStream() {

    return inputStream;

}

@Override
protected Boolean doInBackground(String... params) {
    // TODO Auto-generated method stub
    DownloadDataByUrl dl=new DownloadDataByUrl();
    try {
        inputStream=dl.getInputStreamFromUrl(params[0]);
        byte[] b = new byte[1024];
        StringBuilder sb = new StringBuilder();
        int len = -1;
        try {
            while ((len = inputStream.read(b)) != -1) {
                sb.append(new String(b, 0, len));
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("xiaoqiang:" + sb);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}

}

可以看到我在doInBackGround方法里面获取InputStream后进行了输出操作,而且运行程序后输出了完整的xml文件字符,如下:
![图片说明](http://img.ask.csdn.net/upload/201507/20/1437407420_269505.png)

这个是logcat的错误信息,我在 getInputTask.execute(urlString); 语句后面调用了System.out.println()输出语句成功。但是在saxParseXML(inputStream);语句之前调用System.out.println()输出语句失败。
![图片说明](http://img.ask.csdn.net/upload/201507/20/1437407573_37315.png)


调试了一整天也没有找出问题所在,求解~~

4个回答

CSDNXIAOD
CSDNXIAOD   2015.07.21 00:02

android-PagerAdapter
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

chenrenxiang
chenrenxiang   2015.07.21 00:05

抱歉图片没上传成功:这是获取InputStream后转化为String输出的LogCat
图片说明

chenrenxiang
chenrenxiang   2015.07.21 00:07

这是LogCat的异常信息:
图片说明

chenrenxiang
chenrenxiang 回复Soulic: 谢谢你,问题已经解决了,执行AsyncTask后获得返回值的方法原来是.get() ,之前没有看api文档。
2 年多之前 回复
chenrenxiang
chenrenxiang 回复Soulic: 73行就是searchButton的onClick方法的位置,有时候也提示inputStream cannot be null。不知道是不是执行getInputTask.execute(urlString);语句后的获取inputStream方式有错误?以前都是直接new AysnTask().execute();这里我还添加了一个方法返回inputstream,这样的方式不知道对不对。。
2 年多之前 回复
bhdgx
bhdgx 看下你73行的代码是什么,这个提示已经很清楚了,73行的某个对象值为null, 但是却使用了该对象的方法等,仔细检查下
2 年多之前 回复
donnice
donnice   2015.07.21 03:13

为什么你的boolean return的是null?

Csdn user default icon
上传中...
上传图片
插入图片