我一直在尝试使用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对象,以便在应用中进行整体使用。
答案 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并再试一次。