【问题标题】:Android ListView Returning NullAndroid ListView 返回 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 ComponentInfo{com/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) 的列表视图,感谢所有帮助!

【问题讨论】:

    标签: android listview android-widget android-activity


    【解决方案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,谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    相关资源
    最近更新 更多