0

这是我的布局

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

4

6 回答 6

2

我还不能对你的答案发表评论,但人们忽略了这一点:他和我一样,正在使用RoboGuice注入观点和东西。

onCreate()这个框架的唯一目的是避免你不再需要使用setContentView的样板部分findViewById()

至于他为什么得到一个NullePointerException,我不知道。我碰巧在我的一项活动中遇到了同样的问题,尽管它在所有其他活动上都很好......

[编辑]

我找到了解决方案:我混淆了两种视图的类型。如果你把setContentView()它放在它应该在的地方,你会得到错误。应用程序会说它不能分配。因为类型不匹配。因此你会得到一个不错的

java.lang.RuntimeException:无法启动活动 ComponentInfo

但是如果你使用RoboGuice框架,你会得到这样的错误(在我的情况下我没有)。但是,您的所有观点都将是null.

希望有一天它会帮助某人。

于 2014-06-19T10:20:27.783 回答
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);
}
于 2012-04-06T14:59:02.363 回答
1

我遇到了同样的问题,并遵循了 Mackovich 的建议。他正确地指出你不需要使用 RoboGuice 的 setContentView(),只要你用 @ContentView 注释你的活动。

就我而言,问题是由于我用 EditText 替换了 AutoCompleteTextView,但忘记在活动中用相应的@InjectView 进行相同的替换。这导致了我的 NullPointerException。

同样,就像 Mackovich 所说,如果我使用 setContentView() 而不是 @ContentView,stacktrace 会给我一个更有用的信息:

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 的一个论点,至少在进行修复以显示正确的堆栈跟踪之前。

于 2015-01-28T09:22:37.680 回答
0

您需要先打电话setContentView(R.layout.the_xml)(在 之后super.onCreate())。否则 RoboGuice 不知道将什么注入到您的变量中!

于 2012-04-06T14:57:11.060 回答
0

您忘记了代码中的以下行,

setContentView(R.layout.main);

应该在这行onCreate()方法之后

super.onCreate(savedInstanceState);  
于 2012-04-06T14:59:06.013 回答
0

你错过了那条线

 setContentView(R.layout.xml_filename);
于 2014-06-19T10:39:15.543 回答