通过活动设置imageview src

时间:2013-03-15 20:05:39

标签: android

我一直试图通过我的主要活动设置一个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图片。enter image description here

很抱歉这么模糊,但我觉得设置图片真的很简单。如果我错过任何事情,我很抱歉 - 如果我有,我会很快纠正。

我的MainActivity.java的粘贴:http://pastebin.com/uNfYDGAw以及我的activity_main.xml的粘贴框:http://pastebin.com/M1xy1buB

2 个答案:

答案 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 onCreateMainActivity {/ 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

- 编辑2 -

现在您发布了所有代码,我发现这里存在一些重大缺陷。您的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