【问题标题】:Android has stopped working after clicking the send button单击发送按钮后,Android 已停止工作
【发布时间】:2014-08-14 07:59:34
【问题描述】:

我正在关注本教程:

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

我正在修改 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" />

字符串.xml:

&lt;color name="opaque_red"&gt;#f00&lt;/color&gt;

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):
...

【问题讨论】:

  • 先把findViewById R.id.DisplayActivityMessageTextView)改成findViewById(R.id.DisplayActivityMessageTextView)

标签: java android xml eclipse textview


【解决方案1】:

findViewById 之前使用setContentView(textView);

即将代码重写为

    @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);

在您的mainFragmentonCreateView 中,因为DisplayActivityMessageTextView 是您片段的一部分。

【讨论】:

    【解决方案2】:

    只是一个有根据的猜测。这个声明...

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

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

    或者,如果您不想创建新文件。至少在您的TextView 中更改它...

    android:textColor="@color/opaque_red" 
    

    到...

    android:textColor="@string/opaque_red" 
    

    【讨论】:

    • 我能够在 Java 中使用以下代码来使用它:textView.setTextColor(getResources().getColor(R.color.opaque_red));将它放在 color.xml 而不是 strings.xml 上有区别吗?抱歉,我是 Android 新手。
    • 不,我不这么认为。但是您必须在布局中引用正确的资源@string/name@color/name@drawable/name
    【解决方案3】:

    只是猜测

    setContentView(textView);
    

    之前

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

    【讨论】:

    • 这甚至不会编译,因为实例 textView 是在传递给 setContentView 之后创建的。
    【解决方案4】:

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

            Intent intent = getIntent();
            Bundle extras = intent.getExtras();
    
         String message = extras.getString(MainActivity.EXTRA_MESSAGE);
    

    【讨论】:

      【解决方案5】:

      问题在于findViewById() 仅适用于 inflated(这意味着布局中的所有视图都是作为布局 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-20
        • 2015-12-10
        • 1970-01-01
        • 1970-01-01
        • 2014-01-01
        • 1970-01-01
        • 2012-12-06
        相关资源
        最近更新 更多