【发布时间】:2012-12-14 02:25:22
【问题描述】:
注意:由于我发现自己的愚蠢行为,此问题已得到解决
我想向LinearLayout 添加一个自定义类,但由于某种原因,我不断收到NullPointerException。
下面是处理加法的方法:
protected void onPostExecute(String results) {
System.out.println("ON POST EXECUTE : " + results);
try {
if(!results.equals(((MessageBlurb)container.getChildAt(0)).getMessage())){
try {
container.removeViewAt(30);
for (int i = 29; i > 0; i--) {
container.addView(container.getChildAt(i-1), i);
container.removeViewAt(i-1);
}
container.addView(new MessageBlurb(getApplicationContext(), results, Color.BLACK), 0);
} catch (NullPointerException e) {
// TODO: handle exception
}
}
}
catch (Exception e) {
MessageBlurb mb = new MessageBlurb(getApplicationContext(), results, Color.BLACK);
mb.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
System.out.println(mb);
container.addView(mb, 0);
}
}
MessageBlurb 扩展ViewGroup,因为我在MessageBlurb 中有一个TextView。
MessageBlurb 类如下所示:
public MessageBlurb(Context context, String message, int color){
super(context);
myTV = new TextView(context);
this.addView(myTV);
myTV.setText(message);
System.out.println("THE BLURB IS CREATED");
this.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
System.out.println("YOU CLIKED THE BLURB");
}
});
}
我打印出mb 的描述,它给了我一个内存位置。除此之外,logcat 错误指向这一行:
container.addView(mb, 0);
container 本身是在activity_main.xml 文件中定义的LinearLayout。通过代码行初始化:
container = (LinearLayout)findViewById(R.id.container);
xml文件中Layout的id也叫container
有人能看出我做错了吗? 谢谢!
【问题讨论】:
-
如果您在该行收到空指针异常,这意味着容器为空,因此您需要向我们展示它的初始化位置。否则,请通过发布完整的堆栈跟踪来澄清您的帖子。
-
如果这是在你的 Activity 的 onCreate 覆盖中,你可能没有在这个函数的开头调用 super.onCreate(...)。当 UI 元素尚不存在时,您也可能尝试在 Activity 的构造函数中执行此操作。
-
@gsingh2011 和 Mickael 我已经编辑了我的问题。
-
不要发布 sn-ps 代码,而是发布导致问题的完整代码体。如果该代码太大,请制作一个我们可以测试的简单工作示例。从您发布的内容中我看不出有什么问题,所以我们只能推测,直到看到整个代码。
-
@gsingh2011 我更新了我的问题
标签: java android nullpointerexception android-linearlayout viewgroup