【问题标题】:NullPointerException on SetAdapter With My FriendsArrayAdapter使用我的 FriendsArrayAdapter 在 SetAdapter 上出现 NullPointerException
【发布时间】:2012-06-30 10:06:14
【问题描述】:

异常发生在“rowTxt.setText”行上,我终其一生都无法弄清楚原因。

这是我的代码

    @Override
public View getView(int position, View convertView, ViewGroup parent)
{
    View rowView = convertView;

    if(rowView == null)
    {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView = inflater.inflate(mResourceId, null);
    }

    Friend friend = mFriendsList.get(position);
    TextView rowTxt = (TextView) rowView.findViewById(R.id.rowtext);
    Log.i("name", friend.getmName());
    rowTxt.setText(friend.getmName());

    return rowView;
}

Logcat 输出:

04-24 04:07:14.093: DEBUG/AndroidRuntime(553): 关闭 VM 04-24 04:07:14.093: WARN/dalvikvm(553): threadid=1: 线程以未捕获的异常退出(组=0x4001d800) 04-24 04:07:14.152:错误/AndroidRuntime(553):致命异常:主要 04-24 04:07:14.152: 错误/AndroidRuntime(553): java.lang.NullPointerException 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 com.friendsapp.FriendsArrayAdapter.getView(FriendsArrayAdapter.java:46) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.AbsListView.obtainView(AbsListView.java:1315) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.ListView.makeAndAddView(ListView.java:1727) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.ListView.fillDown(ListView.java:652) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.ListView.fillFromTop(ListView.java:709) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.ListView.layoutChildren(ListView.java:1580) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.AbsListView.onLayout(AbsListView.java:1147) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.view.View.layout(View.java:7035) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1042) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.view.View.layout(View.java:7035) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.FrameLayout.onLayout(FrameLayout.java:333) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.view.View.layout(View.java:7035) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.LinearLayout.onLayout(LinearLayout.java:1042) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.view.View.layout(View.java:7035) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.widget.FrameLayout.onLayout(FrameLayout.java:333) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.view.View.layout(View.java:7035) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.view.ViewRoot.performTraversals(ViewRoot.java:1045) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.view.ViewRoot.handleMessage(ViewRoot.java:1727) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.os.Handler.dispatchMessage(Handler.java:99) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.os.Looper.loop(Looper.java:123) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 android.app.ActivityThread.main(ActivityThread.java:4627) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 java.lang.reflect.Method.invokeNative(Native Method) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 java.lang.reflect.Method.invoke(Method.java:521) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 04-24 04:07:14.152: 错误/AndroidRuntime(553): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 04-24 04:07:14.152:错误/AndroidRuntime(553):在 dalvik.system.NativeStart.main(本机方法) 04-24 04:07:14.182: WARN/ActivityManager(65): 强制完成活动 com.friendsapp/.FriendsActivity 04-24 04:07:14.973: WARN/ActivityManager(65): HistoryRecord{44e9c3c8 com.friendsapp/.FriendsActivity} 的活动暂停超时 04-24 04:07:17.822:调试/dalvikvm(553):GC_FOR_MALLOC 在 113 毫秒内释放了 5842 个对象/457336 个字节 04-24 04:07:18.732: INFO/Process(553): 发送信号。 PID:553 SIG:9 04-24 04:07:18.772: INFO/WindowManager(65): WIN DEATH: Window{4503df58 AtchDlg:com.friendsapp/com.friendsapp.FriendsActivity paused=false} 04-24 04:07:18.772: INFO/ActivityManager(65): 进程 com.friendsapp (pid 553) 已经死亡。 04-24 04:07:18.782: INFO/WindowManager(65): WIN DEATH: Window{44f78f88 com.friendsapp/com.friendsapp.FriendsActivity paused=false} 04-24 04:07:26.814: WARN/ActivityManager(65): HistoryRecord{44e9c3c8 com.friendsapp/.FriendsActivity} 的活动销毁超时 04-24 04:12:07.102: DEBUG/SntpClient(65): request time failed: java.net.SocketException: Address family not supported by protocol

编辑:我在 corlettk 的帮助下解决了这个问题。简而言之,我是这样分配我的 listadapter 的:

FriendsArrayAdapter fAdapter = new FriendsArrayAdapter(FriendsActivity.this, android.R.simple_list_item_1, mFriendsList);

我这样做是因为最初我有一个不能容纳我的 Friend 对象的通用列表适配器;从来没想过要改。

因此,当 setAdapter 进入我的 FriendsArrayAdapter 时,它会在 simple_list_item_1 的 id 中搜索 R.id.rowtext,但没有找到。解决方法是将上述调用更改为

FriendsArrayAdapter fAdapter = new FriendsArrayAdapter(FriendsActivity.this, R.layout.row_layout, mFriendsList);

(row_layout 是我的 XML 文件的名称)

【问题讨论】:

    标签: java android listview facebook-graph-api android-arrayadapter


    【解决方案1】:

    飞,

    Log.i("name", friend.getmName()); 语句的输出是什么?如果 friend 不为空,那么我猜 rowTxt 是。调试打印出来看看...

    此外,我猜你自己有一个不可靠的视图 ID;或者也许该视图尚未添加到集合中。您之前是否遗漏了一些初始化代码?

    干杯。基思。

    【讨论】:

    • 基思,感谢您的回复。 i-log 以朋友的名字正确打印。我可能在某处缺少初始化代码。 R.id.rowtext 是我在 res/layout 中名为 rowlayout.xml 的 xml 文件中创建的文本视图。我没有努力将 rowlayout.xml 添加到任何集合中;这是必要的吗?谢谢
    • 我刚刚做了一个 Log.i("name", R.id.rowtext) 并且 id 在 logcat 中返回为 2131099650。看起来不是这个问题
    • 是的,但是 2131099650 是有效的视图 ID 吗?我重申我最初的观点:检查'rowTxt'(不仅仅是id)不为空;如果是,然后检查 ID 是否有效(我无法从这里判断),并且“rowView”中确实存在所需的视图。你真的应该使用你的 IDE 的调试器来完成这一切,而不是调试打印。所有现代 IDE 都可以调试远程服务器。在你的 IDE 的帮助中查找它,或者用谷歌搜索它。
    • 啊,是的,rowTxt 为空。抱歉,我已经从 Geany 之类的轻量级 linux IDE 的世界中迁移过来,而我的标准调试是 putchar()。鉴于这些新信息,我将再次搞砸它,我会带着结果回到这里。谢谢。
    • 很高兴你把它整理好了 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多