在活动之间发送数据时发生崩溃
因此,我基本上是用某种登录表单来欺骗,并试图在即将到来的活动中与用户名称说出自定义的问候语。该代码编译没有问题,但应用程序崩溃,只要我点击登录按钮,登录工作成功之前,我试图实现自定义你好,所以问题必须在下面的代码中的某个地方。在活动之间发送数据时发生崩溃
这里就是我所说的活动:
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 + "!");
不过,我不能确定问题是否真的存在或不存在,我thoug它可能与第一个活动发送的数据类型与第二个活动的类型不匹配,但在尝试了一些东西后仍然没有任何线索。
在此先感谢。
编辑:
我居然发现我可能有一些做的事实,我打电话给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);
问题解决了,感谢无论如何帮助大家。
您的意图是引用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);
是的,这种方式可行,但不打开我想要打开的活动。事情是我需要将数据发送到ProfileActivity,同时仍然打开MainActivity,因为ProfileActivity作为选项卡显示在MainActivity内部。 – 2012-04-16 19:33:43
既然你说你想要发送到ProfileActivity数据,但需要打开MainActivity,你可以遵循的4种方法之一。
注意:您应该检查何时使用getExtra,返回的值不为null,并对其进行相应处理。
- 首先将数据发送到在MainActivity,然后当你从MainActivity推出ProfileActivity,发送先前传入的数据。
- 将数据放在一个公共的静态字段ProfileActivity。公共静态变量可能会导致问题,所以我建议不要这样做。
- 将数据保存到sharedPreferences文件并在ProfileActivity中需要时读取它。
-
子类应用程序,您可以在其中设置/访问许多变量。下面的代码复制自Are static fields in Activity classes guaranteed to outlive a create/destroy cycle?:
public class MyApplication extends Application {0}私有String事件= 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(); } }
在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);
这样的事情。
但是,如果您需要跨整个应用程序的用户名,请使用辅助类来存储用户名。
检查logcat并将其发布到此处,它会告诉你崩溃的原因。 – Jems 2012-04-16 19:20:23
您正在将数据发送到MainActivity,但您正在阅读ProfileActivity中的意图数据。您确定这一点? – 2012-04-16 19:22:56
是的,我刚刚编辑了评论,我想这是问题,但由于ProfileActivity作为一个选项卡在MainActivity内部,我现在不知道如何处理它,我承认在发布之前我没有看到它所以我想现在我们已经走了一步。 – 2012-04-16 19:26:45