ImageView

时间:2015-08-20 11:00:06

标签: java android android-asynctask imageview horizontalscrollview

我一直在尝试使用HorizontalScrollView以编程方式创建我的空ImageView(因为我不知道他们会有多少人;所以从Web获取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);
    }
}

我的AsyncTask onPostExecute()方法会调用此方法。我在我的Activity AsyncTask方法中调用execute() onResume()方法。

但是,当我运行代码时,我收到以下错误:

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对象,以便在应用中进行整体使用。

3 个答案:

答案 0 :(得分:1)

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

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

imageLoader = new ImageLoader(this);

这里&#34;这个&#34;是当前活动的对象, 现在你在这段代码之后调用DisplayImage()

我希望此代码可以帮助您

答案 1 :(得分:0)

您无法直接向Imagviews添加Scrollview,您必须向其添加linearlayout,然后将imageviews添加到linearlayout

答案 2 :(得分:0)

实际上您创建了 ImageView ,但未能将参数添加到imageView.And您还将imageView直接添加到ScrollView.Add Linear Layout to ScrollView,然后将ImageView添加到LinearLayout。我认为这就是为什么你得到空指针异常。首先将params添加到你的imageView并再试一次。