android - 通过 Activity 设置 imageview src

标签 android

我一直试图通过我的主要 Activity 设置 ImageView ,但它一直在 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);    
}

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

我想我设置的图像是正确的。我在下面附上了我的 LogCat 的图片。 enter image description here

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

我的 MainActivity.java 的 Pastebin:http://pastebin.com/uNfYDGAw和我的 activity_main.xml 的 pastebin:http://pastebin.com/M1xy1buB

最佳答案

看来你的 NullPointerException 来自这一行:

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

我怀疑 this.getResources() 或更有可能 BitmapFactory.decodeResource 正在返回 null

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

    imgView.setImageResource(R.drawable.rain);

--编辑--

您还需要确保调用 setContentView 时使用的布局包含您尝试在 onCreate 中使用的 ImageView MainActivity之前尝试使用 findViewById 引用任何 View

setContentView(R.layout.layoutContainingImageViewDayOne);

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

--编辑 2--

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

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

关于android - 通过 Activity 设置 imageview src,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15441210/

相关文章:

android - 复选框未显示在 android 布局上

android - 焦点在 ListView 中无法正常工作

Android - 使用相同的 keystore 进行调试和发布

android - 一个 Flex 移动应用程序中的两个 ane 文件发生冲突

android - 如何升级sqlite数据库文件

android - 从 fragment 中将数据保存在内部存储中?

android - 在移动设备中屏幕从纵向 View 旋转到横向 View 时如何停止内容移动?

java.util.MissingFormatArgumentException : Format specifier: s

android - E/AndroidRuntime:致命异常 : AsyncTask #2

Android 左侧快速滚动