Android ListView 返回 Null
Posted
技术标签:
【中文标题】Android ListView 返回 Null【英文标题】:Android ListView Returning Null 【发布时间】:2012-06-22 22:04:18 【问题描述】:我正在设置一个简单的列表视图,还没有填充任何真实数据。但是,当尝试运行测试时,我每次都会得到一个空指针异常。我无法弄清楚是什么导致了问题。错误日志抱怨 setLayoutParams。这是我的代码:
public class Groups extends Activity
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.groups_listviews);
ListView lView = (ListView)findViewById(R.id.list_view_1);
lView.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT, R.layout.groups_listviews_row));
lView.setCacheColorHint(0);
lView.setAdapter(null);
lView.setOnItemClickListener(new OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
// TODO Auto-generated method stub
);
Logcat:
06-20 11:03:27.044: D/dalvikvm(3641): GC_EXTERNAL_ALLOC freed 64K, 43% free 3080K/5379K, external 2357K/2773K, paused 81ms
06-20 11:03:28.388: D/dalvikvm(3641): GC_EXTERNAL_ALLOC freed 6K, 43% free 3096K/5379K, external 4457K/4816K, paused 28ms
06-20 11:03:28.442: D/androidRuntime(3641): Shutting down VM
06-20 11:03:28.442: W/dalvikvm(3641): threadid=1: thread exiting with uncaught exception (group=0x40018560)
06-20 11:03:28.442: E/AndroidRuntime(3641): FATAL EXCEPTION: main
06-20 11:03:28.442: E/AndroidRuntime(3641): java.lang.RuntimeException: Unable to start activity ComponentInfocom/com.main.Groups: java.lang.NullPointerException
06-20 11:03:28.442: E/AndroidRuntime(3641): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1696)
06-20 11:03:28.442: E/AndroidRuntime(3641): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1716)
06-20 11:03:28.442: E/AndroidRuntime(3641): at android.app.ActivityThread.access$1500(ActivityThread.java:124)
06-20 11:03:28.442: E/AndroidRuntime(3641): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)
06-20 11:03:28.442: E/AndroidRuntime(3641): at android.os.Handler.dispatchMessage(Handler.java:99)
06-20 11:03:28.442: E/AndroidRuntime(3641): at android.os.Looper.loop(Looper.java:130)
06-20 11:03:28.442: E/AndroidRuntime(3641): at android.app.ActivityThread.main(ActivityThread.java:3806)
06-20 11:03:28.442: E/AndroidRuntime(3641): at java.lang.reflect.Method.invokeNative(Native Method)
06-20 11:03:28.442: E/AndroidRuntime(3641): at java.lang.reflect.Method.invoke(Method.java:507)
06-20 11:03:28.442: E/AndroidRuntime(3641): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-20 11:03:28.442: E/AndroidRuntime(3641): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-20 11:03:28.442: E/AndroidRuntime(3641): at dalvik.system.NativeStart.main(Native Method)
06-20 11:03:28.442: E/AndroidRuntime(3641): Caused by: java.lang.NullPointerException
06-20 11:03:28.442: E/AndroidRuntime(3641): at com.main.Groups.onCreate(Groups.java:23)
06-20 11:03:28.442: E/AndroidRuntime(3641): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-20 11:03:28.442: E/AndroidRuntime(3641): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1660)
06-20 11:03:28.442: E/AndroidRuntime(3641): ... 11 more
回答:我正在访问错误布局文件 (list_view_1) 的列表视图,感谢所有帮助!
【问题讨论】:
【参考方案1】:如果错误抱怨 setLayoutParams,通常它是 null 方法的接收者(又名 ListView)。
我会检查是否
ListView lView = (ListView)findViewById(R.id.list_view_1);
返回空值。
【讨论】:
这看起来返回null,我会查看list_view_1。 知道了,就是这样,显然我正在访问不同布局文件的列表视图(list_view_1)。感谢您的帮助! 查看空指针异常实际上是一个很好的模式:查看接收对象并考虑它是否可以为空,在大多数情况下,这就是错误消息想要的说;)【参考方案2】:您将 null
传递给您的 setAdapter()
方法,这将导致 NullPointerException
。
lView.setAdapter(null);
setAdapter()
需要一个有效的 ListAdapter
作为它的参数。
Here's 一个例子。
如果您确实需要一个空的 ListView,只需将适配器上的数据集设置为空/null,而不是将适配器设置为 null。
编辑:
如果这不是导致问题的原因,那么唯一可以抛出NullPointerException
的其他组件可能是您的ListView
。
ListView lView = (ListView)findViewById(R.id.list_view_1);
检查您的 xml 中是否确实有一个 ListView
与该 ID 对应。
【讨论】:
+1。只是为了补充这一点。如果您确实需要一个空的 ListView,只需将 Adapter 上的数据集设置为空/null,而不是将适配器设置为 null。 @Kazekage Gaara 我不这么认为我做了 listView 和 setAdapter(null) 并且没有抛出异常。我不认为 setAdapter(null) 是一件好事,我只是说这不是问题的原因。 @Amal 你能用崩溃日志更新你的问题吗?这将帮助我们更多 @Amal 不太可能是这样。 @dymmeh 当我尝试创建列表然后 setAdapter with null 我在谈论 jamesar 问题时,我根本没有崩溃。【参考方案3】:我想我得到了错误。 new FrameLayout.LayoutParams(width, height, gravity)
的参数,而不是指定重力,而是指定某种布局。
使用 int 更改最后一个参数来指定 Gravity(例如 Gravity.CENTER
),您的问题可能会得到解决。
【讨论】:
我最终完全删除了 layoutParams,谢谢! :)以上是关于Android ListView 返回 Null的主要内容,如果未能解决你的问题,请参考以下文章
java [Android]返回ListView 2时保存滚动位置
Android 自定义 ListView onClickListener 返回 null
返回活动后,Android ListView 不显示传入消息