我一直试图通过我的主要活动设置一个imageview,并且它一直在LogCat中返回一个空指针异常。我的代码是相当自我解释的。
我从JSON网址中提取数据并从对象中提取数据。
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”中的值是否等于rain(现在是),如果是,则返回存储在drawable文件夹中的rain图标。即使没有if语句,我也会获得相同的空指针异常。我对Android很陌生,所以调试现在不是最简单的事情。
我认为我正确设置图像。我在下面附上了我的LogCat图片。
很抱歉这么模糊,但我觉得设置图片真的很简单。如果我错过任何事情,我很抱歉 - 如果我有,我会很快纠正。
我的MainActivity.java的粘贴:http://pastebin.com/uNfYDGAw以及我的activity_main.xml的粘贴框:http://pastebin.com/M1xy1buB
答案 0 :(得分:2)
所以看来你的NullPointerException
来自这一行:
imgView.setImageBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.rain));
我怀疑this.getResources()
或更有可能BitmapFactory.decodeResource
正在返回null
。
幸运的是,有一种更简单的方法可以在ImageView
上设置图像。您可以使用setImageResource
在运行时设置可绘制资源,如下所示:
imgView.setImageResource(R.drawable.rain);
您还需要确保使用包含setContentView
ImageView
onCreate
中MainActivity
{/ 1}} 之前View
的布局来调用findViewById
尝试使用setContentView(R.layout.layoutContainingImageViewDayOne);
引用任何AsyncTask
。
R.layout.activity_main
最后,如果您尝试执行任何网络请求,则应在后台线程(在UI线程之外)或应用程序中完成,并获得“应用程序无响应”崩溃。 R.layout.list_row
对此有用(但还有其他方法)。有关详细信息,请参阅http://developer.android.com/training/basics/network-ops/connecting.html。
现在您发布了所有代码,我发现这里存在一些重大缺陷。您的R.layout.activity_main
实际上应该重命名为Activity
,因为它包含您的行元素。现在,您尝试为ListAdapter
及其R.layout.activity_main
使用相同的布局(ListView
),这是不可能的。 ListAdapter
需要ImageView
,您需要将Activity
附加到ListAdapter
。您还尝试在{{1}}代码中设置{{1}}列表行{{1}},{{1}}已为您执行此操作。
所以我建议你看看一些例子并重构你的应用程序,Vogella有一些很棒的教程 - http://www.vogella.com/articles/AndroidListView/article.html。
答案 1 :(得分:0)
首先使用equals
方法比较字符串。而不是==
if (icon_to_use != null && icon_to_use.equals("rain")) {
....
}
NullPointerException的原因
可能是因为你没有调用setContentView到布局或者没有设置正确的布局。表示在该布局中未定义imageViewDayOne
。