单击“发送”按钮后,Android已停止工作

时间:2014-08-14 07:59:35

标签: java android xml eclipse textview

我遵循本教程:

  
      
  1. http://android4beginners.com/2013/07/lesson-1-3-how-to-change-a-color-of-text-and-background-in-textview/
  2.   
  3. http://developer.android.com/training/basics/firstapp/starting-activity.html#BuildIntent
  4.   

我正在修改DisplayMessageActivity以更改输出文本的颜色并使用xml更改背景。

我遇到代码问题,当我尝试运行时,我的android应用程序关闭了。该应用程序将显示从上一个视图写入的文本,并在单击“发送”按钮时使用另一个视图显示该文本。

DisplayMessageAcitivity:

public class DisplayMessageActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 // Get the message from the intent
 Intent intent = getIntent();
 String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
 TextView textView = (TextView) findViewById (R.id.DisplayActivityMessageTextView);
 // Create the text view
 textView.setText(message);
 // Set the text view as the activity layout
 setContentView(textView);
}

我有2个XML文件:activity_main.xml和fragment_main.xml我已经在fragment_main.xml中包含了textView。

<TextView android:id="@+id/DisplayActivityMessageTextView"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:textColor="@color/opaque_red" />

的strings.xml:

<color name="opaque_red">#f00</color>

logcat的:

08-13 10:22:43.919: E/AndroidRuntime(25966): FATAL EXCEPTION: main
08-13 10:22:43.919: E/AndroidRuntime(25966): Process: com.example.myfirstapp, PID: 25966
08-13 10:22:43.919: E/AndroidRuntime(25966): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.DisplayMessageActivity}: java.lang.NullPointerException
08-13 10:22:43.919: E/AndroidRuntime(25966):
...
08-13 10:22:43.919: E/AndroidRuntime(25966): Caused by: java.lang.NullPointerException
08-13 10:22:43.919: E/AndroidRuntime(25966):
...

5 个答案:

答案 0 :(得分:2)

setContentView(textView);

之前使用findViewById

即。将代码重写为

    @Override
    protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     // Set the text view as the activity layout
     setContentView(R.layout.activity_main);
     // Get the message from the intent
   }

并更改

  Intent intent = getIntent();

  Intent intent = getActivity().getIntent();

并使用

  Intent intent = getActivity().getIntent();
     String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
     TextView textView = (TextView) findViewById R.id.DisplayActivityMessageTextView);
     // Create the text view
     textView.setText(message);

在您onCreateView的{​​{1}}中,因为mainFragment是您片段的一部分。

答案 1 :(得分:0)

只是一个有根据的猜测。这个宣言......

<color name="opaque_red">#f00</color>

必须放在colors.xml资源文件而不是strings.xml资源文件

或者,如果您不想创建新文件。至少在TextView ...

中进行更改
android:textColor="@color/opaque_red" 

为...

android:textColor="@string/opaque_red" 

答案 2 :(得分:0)

只是一个猜测,把

setContentView(textView);

TextView textView = (TextView) findViewById R.id.DisplayActivityMessageTextView);

答案 3 :(得分:0)

你应该使用Bundle来获得额外的

        Intent intent = getIntent();
        Bundle extras = intent.getExtras();

     String message = extras.getString(MainActivity.EXTRA_MESSAGE);

答案 4 :(得分:0)

问题是findViewById()仅适用于膨胀的(这意味着布局中的所有视图都是作为布局xml中的对象创建的)布局。当您致电setContentView(R.layout.asdf)时,布局会自动膨胀。由于您不会使包含DisplayActivityMessageTextView的布局膨胀,因此无法找到视图且textVeiw为空,这会导致NullPointerException。 我建议你只需创建一个新的TextView代替findViewById

TextView textView = new TextView(this);

并设置textColor:

textView.setTextColor(getResources().getColor(R.color.opaque_red));

另一个问题是,你的opaque_red是在Srtings.xml中定义的。该文件应该称为Colors.xml