java - ImageView 上的 NullPointerException

标签 java android android-asynctask imageview horizontalscrollview

我一直在尝试用以编程方式创建的 ImageView 来填充我的空 Horizo​​ntalScrollView (因为我不知道它们会有多少;必须获取JSON数据可以从网上查到)。另外,我必须使用 Fedor Vlasov 的 LazyList 设置 ImageView 的显示图像(因为我是从链接加载它)。我有以下代码:

private void displayListOfPlants() {
    HorizontalScrollView scrollVPlants = (HorizontalScrollView) findViewById(R.id.scrollVPlants);
    for (int i = 0; i < mPlantList.size(); i++) {
        ImageView imgVPlant = new ImageView(CropRotationPlannerActivity.this);
        scrollVPlants.addView(imgVPlant);
        MainActivity.imageLoader.DisplayImage(mPlantList.get(i).get(InfoBookActivity.TAG_IMAGE_LOCATION), imgVPlant);
    }
}

此方法在我的 AsyncTaskonPostExecute() 方法上调用。我在 Activity 的 onResume() 方法中调用 AsyncTaskexecute() 方法。

但是,当我运行代码时,出现以下错误:

08-20 04:43:38.253    2727-2727/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: thesleeplesselite.drgreenthumb, PID: 2727
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.fedorvlasov.lazylist.ImageLoader.DisplayImage(java.lang.String, android.widget.ImageView)' on a null object reference
        at thesleeplesselite.drgreenthumb.CropRotationPlannerActivity.displayListOfPlants(CropRotationPlannerActivity.java:146)
        at thesleeplesselite.drgreenthumb.CropRotationPlannerActivity.access$100(CropRotationPlannerActivity.java:28)
        at thesleeplesselite.drgreenthumb.CropRotationPlannerActivity$LoadPlants.onPostExecute(CropRotationPlannerActivity.java:166)
        at thesleeplesselite.drgreenthumb.CropRotationPlannerActivity$LoadPlants.onPostExecute(CropRotationPlannerActivity.java:150)
        at android.os.AsyncTask.finish(AsyncTask.java:636)
        at android.os.AsyncTask.access$500(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5257)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

此时我不知道该怎么办。我不知道为什么我的 ImageView 为空。

编辑:

我已将代码修改为以下内容,现在可以正常工作了:

private void displayListOfPlants() {
    LinearLayout linearLayoutForPlants = (LinearLayout) findViewById(R.id.linearLayoutForPlants);
    LinearLayout.LayoutParams linearLayoutParamsForPlants = new LinearLayout.LayoutParams(20,20);
    for (int i = 0; i < mPlantList.size(); i++) {
        ImageView imgVPlant = new ImageView(CropRotationPlannerActivity.this);
        imgVPlant.setLayoutParams(linearLayoutParamsForPlants);
        linearLayoutForPlants.addView(imgVPlant);
        MainActivity.imageLoader.DisplayImage(mPlantList.get(i).get(InfoBookActivity.TAG_IMAGE_LOCATION), imgVPlant);
    }
}

所以,是的。对于像我一样的新手。请注意: (1) 不能将 ImageView 直接添加到 ScrollView (2) 确保添加一个LayoutParams (3) 确保一切都正确初始化。

注意:我将 JSON 标记作为静态字符串存储在 InfoBookActivity.java 中,因此我不必每次都创建类似的标记。

我在 MainActivity.java 中创建了一个 ImageLoader 对象,以便在应用程序中整体使用。

最佳答案

最近我在代码中遇到了同样的错误(imageLoader 的空对象引用),当我尝试调用 imageLoader.DisplayImage() 来查看 ImageView 中的图像时,我得到了同样的错误。现在我已经找到了这个错误的解决方案。

请使用当前 Activity 初始化imageLoader,使用以下代码:

imageLoader = new ImageLoader(this);

这里的“this”是当前 Activity 的对象, 现在您在此代码之后调用 DisplayImage()

希望这段代码对你有帮助

关于java - ImageView 上的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32116455/

相关文章:

Android:处理从服务器连续拉取的最佳方式?

java - OpenLDAP 和 SSL

java - 查找软件开发 session 列表的最佳地点是哪里?

java - Asynctask 不下载所有内容

android - Smack 4.1 Android 匿名注册到 Openfire

java - Firebase 与 Room 持久性库

未调用 PreExecute 方法上的 Android Asynctask

java - 是否有类似于 Java 的 mini-mvc-profiler 的东西?

java - java中用字节写入文件的概念是什么?

安卓单元测试 : connectedAndroidTest does not execute my test case