所以,我基本上都在使用某种登录表单,并尝试在即将进行的活动中用用户名说出一个自定义问候语。代码编译没有问题,但是一旦我点击登录按钮,应用程序崩溃,登录成功之前我尝试实现自定义问候,所以问题必须在以下代码中的某处。
以下是我称之为活动的地方:
Intent k = new Intent(this, MainActivity.class);
//Sends login name to activity k
k.putExtra("loginName", login.getText().toString());
//login is the EditText variable name for the login text field
startActivity(k);
这是我检索额外数据并尝试按照描述使用它的地方:
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class ProfileActivity extends Activity {
TextView helloString;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
Bundle extras = getIntent().getExtras();
//Getting the hello text string
helloString = (TextView)findViewById(R.id.textHello);
String loginName = extras.getString("loginName");
helloString.setText("¡Hello, " + loginName + "!");
}
}
如果我对这两行进行评论,它会以某种方式避免崩溃:
String loginName = extras.getString("loginName");
helloString.setText("¡Hello, " + loginName + "!");
仍然,我无法确定问题是否确实存在,我认为这可能与第一个活动发送的数据类型有关,而第一个活动与第二个活动中检索的类型不匹配,但是在尝试了一些东西之后仍然没有任何线索。
提前致谢。
编辑:
我实际上发现我可能与我调用mainActivity.class这个事实有关,而文本是在一个名为profileActivity.class的活动中显示的,问题是,profileActivity被显示为一个标签在mainActivity中,所以我真的不知道该如何处理它。
编辑2:
所以我最终自己解决了,对于任何感兴趣的人我只是将数据发送到MainActivity.class
Intent k = new Intent(this, MainActivity.class);
//Sends login name to activity k
k.putExtra("loginName", login.getText().toString());
startActivity(k);
并且,在主活动中,当调用ProfileActivity将其设置为选项卡时:
//Profile tab
intent = new Intent(this, ProfileActivity.class);
Bundle extras = getIntent().getExtras();
intent.putExtra("loginName", extras.getString("loginName"));
spec = mTabHost.newTabSpec("home")
.setIndicator("Home", res.getDrawable(R.drawable.profile_icon))
.setContent(intent);
mTabHost.addTab(spec);
问题解决了,感谢大家的帮助。
答案 0 :(得分:1)
您的意图是引用MainACtivity.class,并且您正在尝试在ProfileActivity中获取额外内容。尝试将MainActivity.class更改为ProfileActivity.class,如果这是您的流程。请交叉检查您的活动流程。
希望它有所帮助。
Intent k = new Intent(this, ProfileActivity.class);
//Sends login name to activity k
k.putExtra("loginName", login.getText().toString());
//login is the EditText variable name for the login text field
startActivity(k);
答案 1 :(得分:0)
由于您声明要将数据发送到ProfileActivity但需要打开MainActivity,您可以按照以下四种方法之一进行操作。
注意:您应该检查何时使用getExtra,返回的值不为null,并相应地处理它。
SubClass Application,您可以在那里设置/访问许多变量。以下内容是从Are static fields in Activity classes guaranteed to outlive a create/destroy cycle?复制的:
公共类MyApplication扩展Application { private String thing = null;
public String getThing(){
return thing;
}
public void setThing( String thing ){
this.thing = thing;
}
}
public class MyActivity extends Activity {
private MyApplication app;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = ((MyApplication)getApplication());
String thing = app.getThing();
}
}
答案 2 :(得分:0)
在MainActivity上:
String user = this.getIntent().getStringExtra("loginName");
当您在MainActivity上创建tabhost时,以相同的方式传递字符串:
Intent intent = new Intent().setClass(this, ProfileActivity.class);
intent.putExtra("loginName", user);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = mTabHost.newTabSpec("profile").setIndicator("Profile").setContent(intent);
mTabHost.addTab(spec);
像这样。
但如果您需要整个应用程序中的用户名,请使用帮助程序类来存储用户名。