Android SetText Null指针异常

时间:2012-04-22 08:33:33

标签: android settext

我刚刚开始进行Android开发,我相信你可以帮忙解决这个问题(我很抱歉我的英语不好)

我有一个主要活动,并且在某个时刻我想要调用另一个活动,希望用某些消息更改textview。在这一刻,如果我不放,我会得到一个Null指针Exception                 的setContentView(R.layout.register);

但是当我把那条线放进去的时候,我正确地看到了一个毫秒的寄存器激活我的新文本“Android2”,然后再次跳转到没有文字的注册活动。我的意思是我画了两次。 我希望我已经解释得足够多了。

问题是我在哪里放置setcontentview以及什么是laylay。

非常感谢,Daniel

我给你看了一些代码:

我的主要活动有这种方法:

  protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {

        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK)
        {
            Intent i = new Intent(this, register.class);
            startActivity(i);       

            setContentView(R.layout.register);
            TextView text = (TextView) findViewById(R.id.texto);

            try {
                text.setText("Android2");
                }catch(Exception e) {
                    Log.i("Log", e.getMessage()+"Error!"); // LogCat message
                }
        }
        //super.onActivityResult(requestCode, resultCode, data);
    }

我的第二个活动类名为register:

public class register extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.register);
   }
}

寄存器接口是register.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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/about_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/register" />

    <TextView
        android:id="@+id/texto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/continue_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/save" />

        <Button
            android:id="@+id/new_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/repeat" />
    </LinearLayout>

</LinearLayout>

3 个答案:

答案 0 :(得分:4)

您基本上做的是以下内容:

  1. 您准备开始另一项活动的意图
  2. 您开始准备
  3. 意图的活动
  4. 您将当前活动的内容设置为R.layout.register
  5. 你得到textView(在当前活动上)
  6. 您将textView的文本设置为Android2
  7. 此时,新活动将显示在屏幕上。请注意,您的代码不正确,因为您操作当前活动中的UI元素,并且您希望更改新启动的活动。

    移动此代码

    TextView text = (TextView) findViewById(R.id.texto);
    
    try {
        text.setText("Android2");
    }catch(Exception e) {
        Log.i("Log", e.getMessage()+"Error!"); // LogCat message
    }
    

    到注册活动的onCreate()方法。

    通常,当你创建一个类时,它的名字应该根据标准以大写字母开头。

答案 1 :(得分:1)

您有两种不同的活动。其中一个是使用register.xml视图,第二个是尝试访问寄存器视图。该视图仅存在于您的"register"活动中。其他活动似乎没有看法?这可能就是你获得NULL的原因。

您应该将这两个类合并在一起,因为您似乎试图从同一视图访问texto

因此,总而言之,应在调用findViewById的活动中调用setContentView

答案 2 :(得分:0)

删除此行,它应该可以正常工作

   startActivity(i); 

不确定为什么要将其称为外部活动。

否则将代码移到您的注册类

setContentView(R.layout.register);
        TextView text = (TextView) findViewById(R.id.texto);

        try {
            text.setText("Android2");
            }catch(Exception e) {
                Log.i("Log", e.getMessage()+"Error!"); // LogCat message
            }
    }