1

我一直试图通过我的主要活动设置一个图像视图,它一直在 LogCat 中返回一个空指针异常。我的代码是相当不言自明的。

我正在从 JSON url 中提取数据并将数据从对象中提取出来。

for (int i=0; i<forecastday_arr.length(); i++) {                        
    HashMap<String, String> map = new HashMap<String, String>();    
    JSONObject e = forecastday_arr.getJSONObject(i);

    JSONObject date_obj = e.getJSONObject("date");

    String curDate = date_obj.getString("weekday");
    String conditions = e.getString("conditions");
    String icon_to_use = e.getString("icon");

    map.put("weekday", curDate);
    map.put("conditions", conditions);
    map.put("icon", icon_to_use);

    if (icon_to_use=="rain") {
        ImageView imgView = (ImageView) findViewById(R.id.imageViewDayOne);
        imgView.setImageBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.rain));
    }      

    mylist.add(map);    
}

从我的代码中,我正在检查“icon”中的值是否等于雨,它是(今天),如果是,则返回存储在我的可绘制文件夹中的雨图标。即使没有 if 语句,我也会得到相同的空指针异常。我对 Android 很陌生,所以调试现在不是最简单的事情。

我想我正在正确设置图像。我在下面附上了我的 LogCat 的图片。在此处输入图像描述

抱歉这么含糊,但我认为设置图像真的很简单。如果我也遗漏了什么,我很抱歉 - 如果我有,我会尽快纠正。

我的 MainActivity.java 的粘贴箱:http: //pastebin.com/uNfYDGAw和我的 activity_main.xml 的粘贴箱:http: //pastebin.com/M1xy1buB

4

2 回答 2

2

所以看起来你NullPointerException来自这条线:

    imgView.setImageBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.rain));

我怀疑其中一个this.getResources()或更可能BitmapFactory.decodeResource正在返回null

幸运的是,有一种更简单的方法可以在ImageView. 您可以使用setImageResource在运行时设置可绘制资源,如下所示:

    imgView.setImageResource(R.drawable.rain);

- 编辑 -

在尝试引用任何using之前,您还需要确保setContentView使用包含ImageView您尝试使用onCreate的布局进行调用。MainActivityViewfindViewById

setContentView(R.layout.layoutContainingImageViewDayOne);

最后,如果您尝试执行任何网络请求,则应在后台线程(关闭 UI 线程)或应用程序中完成“应用程序无响应”崩溃。AsyncTasks 对此很有用(但是还有其他方法)。有关更多信息,请参阅http://developer.android.com/training/basics/network-ops/connecting.html

--编辑2--

因此,既然您发布了所有代码,我发现这里存在一些重大缺陷。您R.layout.activity_main实际上应该重命名为,R.layout.list_row因为它包含您的行元素。现在您正尝试对您的和它的使用相同的布局 ( R.layout.activity_main) ,这是不可能的。需要有一个,你附上你的。您还尝试在您的代码中为您的列表行设置您的代码,这已经为您完成了。ActivityListAdapterR.layout.activity_mainListViewListAdapterImageViewActivityListAdapter

所以我建议你看一些例子并重构你的应用程序,Vogella 有一些很棒的教程 - http://www.vogella.com/articles/AndroidListView/article.html

于 2013-03-15T20:15:09.147 回答
0

首先使用equals方法来比较字符串。而不是==

if (icon_to_use != null && icon_to_use.equals("rain")) {

   ....

}

NullPointerException 的原因

这可能是因为您没有调用 setContentView 到布局或没有设置正确的布局。装置imageViewDayOne未在该布局中定义。

于 2013-03-15T20:08:29.197 回答