我创建了一个(非常简单的)类,它从一个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> :()之后。将在需要时再试一次。
答案 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()方法之外移动变量声明。