这是我的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id = "@+id/postQues"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Post A Question" />
<TextView
android:id="@+id/postAnswer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:text="Post Your Answer" />
<Button
android:id="@+id/submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:clickable="true"
android:text="Submit" />
</RelativeLayout>
这是我的活动:
package com.qstack.quizbox;
import roboguice.activity.RoboActivity;
import roboguice.inject.ContentView;
import roboguice.inject.InjectView;
import android.content.DialogInterface;
import android.view.View.OnClickListener;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.app.main.R;
@ContentView(R.layout.q_box)
public class QuizBox extends RoboActivity {
@InjectView(R.id.postQues) TextView postQues;
@InjectView(R.id.postAnswer) EditText postAnswer;
//@InjectView(R.id.submit) Button submitA;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
PostQuestion postQuestion = new PostQuestion();
postQues.setText(postQuestion.postQuestion());
submitA.setOnClickListener(submitAnswerListener);
}
private OnClickListener submitAnswerListener = new OnClickListener() {
//onClick view
public void onClick(View v) {
String answer;
answer = postA.getText().toString();
CheckAnswer checkAnswer = new CheckAnswer();
if (answer == checkAnswer.checkAnswer()) {
postA.setText("Correct");
}
}
};
}
我在第48行得到一个空指针异常,因为postQues = null。当我从代码中删除postAnswer时,没有空指针异常。我已经清理了我的项目以及所有这些。任何帮助
答案 0 :(得分:2)
我无法对你的答案发表评论,但人们忽略了这一点:他和我一样,正在使用RoboGuice
注入观点和内容。
此框架的唯一目的是避免onCreate()
上的锅炉板部件,您将不再需要使用setContentView
和findViewById()
!
至于为什么他得到NullePointerException
,我不知道。我碰巧在我的一个活动中遇到了同样的问题,尽管它在所有其他活动中都运行良好......
<强> [编辑] 强>
我找到了解决方案:我混淆了两种观点的类型。
如果你把setContentView()
放在应该的位置,你就会得到错误。
该应用程序将说它无法分配。因为类型不匹配。
因此,你得到了一个很好的
java.lang.RuntimeException:无法启动活动ComponentInfo
但是如果使用RoboGuice
框架,则会出现这样的错误(在我的情况下,我没有这样做)。但是,您所有观看的内容都是null
。
希望有一天能帮到某人。
答案 1 :(得分:1)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.yourxml); // you have missed this.....
PostQuestion postQuestion = new PostQuestion();
postQues.setText(postQuestion.postQuestion());
submitA.setOnClickListener(submitAnswerListener);
}
答案 2 :(得分:1)
我有同样的问题,并遵循Mackovich的建议。他指出你不需要使用RoboGuice的setContentView(),只要用@ContentView注释你的活动。
在我的情况下,问题是由于我用EditText替换了AutoCompleteTextView,但忘记在活动中使用相应的@InjectView进行相同的替换。这导致了我的NullPointerException。
再次,就像Mackovich说的那样,如果我使用setContentView()而不是@ContentView,那么堆栈跟踪会给我一个更有用的信息:
Caused by: java.lang.IllegalArgumentException: Can't assign class android.support.v7.internal.widget.TintEditText value android.support.v7.internal.widget.TintEditText@426ce048 to class android.widget.AutoCompleteTextView field usernameTextView
我猜这是反对使用Roboguice的@ContentView的论据,至少在为了显示正确的堆栈跟踪而进行修复之前。
答案 3 :(得分:0)
您需要先setContentView(R.layout.the_xml)
(super.onCreate()
之后)。否则RoboGuice不知道要在你的变量中注入什么内容!
答案 4 :(得分:0)
您忘记了代码中的以下行
setContentView(R.layout.main);
应该在onCreate()
方法的这一行之后
super.onCreate(savedInstanceState);
答案 5 :(得分:0)
你错过了那条线
setContentView(R.layout.xml_filename);