TextView中的空指针异常

时间:2012-04-06 14:54:25

标签: android roboguice

这是我的布局

<?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时,没有空指针异常。我已经清理了我的项目以及所有这些。任何帮助

6 个答案:

答案 0 :(得分:2)

我无法对你的答案发表评论,但人们忽略了这一点:他和我一样,正在使用RoboGuice注入观点和内容。

此框架的唯一目的是避免onCreate()上的锅炉板部件,您将不再需要使用setContentViewfindViewById()

至于为什么他得到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);