使用NullPointerException关闭活动结果强制后的setText

时间:2011-07-08 14:33:40

标签: android sdk

我创建了一个(非常简单的)类,它从一个intent获取一个字符串值。如果我用结果创建一个Toast,那就OK了。但是当我尝试设置TextView的文本时,程序会停止并显示NullPointerExeption。 Eclipse发出警告:

TextView debugView = (TextView) findViewById(R.id.debugView);

永远不会读取局部变量debugView

我希望有人有个主意。

public class Main extends Activity {

TextView debugView;
Button chooseOne;

Intent myIntent;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    TextView debugView = (TextView) findViewById(R.id.debugView);
    //debugView.setText("Hola supermercado!");

    Button ChooseOne = (Button) findViewById(R.id.chooseOne);

    ChooseOne.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {

            myIntent = new Intent(Main.this, ResultFromSelection.class);
            myIntent.putExtra("sampleData", "This is Sample Data");
            startActivityForResult(myIntent, 1);

        }
    });

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK && requestCode == 1) {

        String msg = data.getStringExtra("returnedData");

        //Toast.makeText(Main.this, ""+msg, Toast.LENGTH_LONG).show();
        debugView.setText(""+msg);

    }
}

}

我从哪里得到结果:

public class ResultFromSelection extends Activity {

 Intent intent;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.selection);

    Intent intent= getIntent();
      intent.putExtra("returnedData", "A Value");
      setResult(RESULT_OK, intent);
    finish();
}

 }

XML From Main:

Logcat根本没有给我任何信息,只有nullPointer。我现在无法发布一个logcat,因为模拟器给了我一些麻烦(在这个briljant update> :()之后。将在需要时再试一次。

3 个答案:

答案 0 :(得分:2)

您正在oncreate中创建debugView,这使它成为一个只能在那里使用的变量。变化

TextView debugView = (TextView) findViewById(R.id.debugView);

this.debugView = (TextView) findViewById(R.id.debugView);

答案 1 :(得分:0)

onActivityResult中没有debugView。你是否在类中有一个名为debugView的字段?因为你在onCreate中声明了一个名为debugView的局部变量。

答案 2 :(得分:0)

您在一个方法中声明了debugView,然后尝试在另一个方法中引用它。您需要在onCreate()方法之外移动变量声明。