您好我正在尝试在两个不同的活动之间传递一个字符串(我是Android新手)
当我运行这个程序时它会继续强制关闭,请有人告诉我我做错了什么吗?我感觉我还没有正确理解意图的基本原理。我也觉得我可能试图同时运行2个意图,这可能会导致问题。感谢您提供任何帮助。
package com.intent.test;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class Intenttest extends Activity {
/** Called when the activity is first created. */
Button button1;
TextView text1;
String tests="hello there my friend";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button1 =(Button)findViewById(R.id.button1);
text1=(TextView)findViewById(R.id.text1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try{
Bundle b = new Bundle();
b.putString("key", tests);
Intent i = new Intent(Intenttest.this,DataPass.class);
i.putExtras(b);
startActivity(i);
text1.setText(tests);
}catch(Exception e){
text1.setText("Error2");
}
// TODO Auto-generated method stub
try{
Class rClass = Class.forName("com.intent.test." +"DataPass");
Intent ourIntent = new Intent(Intenttest.this,rClass);
startActivity(ourIntent);
}catch(Exception e){
text1.setText("Error");
}
}
});
}
}
package com.intent.test;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class DataPass extends Activity{
Button button2;
String tests;
TextView text2;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.datapass);
button2 =(Button)findViewById(R.id.button2);
try{
Bundle gotb = getIntent().getExtras();
tests =gotb.getString("key");
text2.setText(""+tests);
}catch(Exception e){
text2.setText("error");
}
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try{
Class rClass = Class.forName("com.intent.test." +"Intenttest");
Intent ourIntent = new Intent(DataPass.this,rClass);
startActivity(ourIntent);
}catch(Exception e){
}
}
});
}
}
答案 0 :(得分:0)
你不应该两次运行活动。
删除 Intenttest 类中的以下内容:
// TODO Auto-generated method stub
try{
Class rClass = Class.forName("com.intent.test." +"DataPass");
Intent ourIntent = new Intent(Intenttest.this,rClass);
startActivity(ourIntent);
}catch(Exception e){
text1.setText("Error");
}
或将其置于 catch 块
中button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try{
Bundle b = new Bundle();
b.putString("key", tests);
Intent i = new Intent(Intenttest.this,DataPass.class);
i.putExtras(b);
startActivity(i);
text1.setText(tests);
}catch(Exception e){
text1.setText("Error2");
try{
Class rClass = Class.forName("com.intent.test." +"DataPass");
Intent ourIntent = new Intent(Intenttest.this,rClass);
startActivity(ourIntent);
}catch(Exception e){
text1.setText("Error");
}
}
}
});
答案 1 :(得分:0)
你应该使用intent extras。
你可以毫无问题地放置原语,对于你需要使用“Parcelable”的更复杂的对象(你的数据对象应该实现它)。
答案 2 :(得分:0)
您可以将其作为意图中包含的额外数据传递。如果您的源活动,请执行此操作,
Intent i = new Intent(this, TargetActivity.class);
i.putExtra("myKey", myVal);
startActivity(i);
并在目标活动中
Intent i = getIntent();
String myVal = i.getStringExtra("myKey");