- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题是在 3 个 Activity 之间传递一个字符串。我解释一下我是如何做到的。
第一个名为 loginActiviy 的 Activity 是我执行此操作的地方。
//OnCreate ecc before this
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
data.putExtra("Name", Name);
super.onActivityResult(requestCode, resultCode, data);
}
public void onResume()
{
super.onResume();
finish();
}
当 Activity 结束时调用 finish() (也许这是我不知道的问题),然后控制权传递到第一个 Activity ,我在其中执行此操作
//OnCreate ecc before
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Bundle extras = data.getExtras();
String name = null;
if(extras != null) {
name = extras.getString("Name");
}
super.onActivityResult(requestCode, resultCode, data);
try
{
Intent people = new Intent(this, MainPeopleActivity2.class);
people.putExtra("Name", name);
startActivity(people);
this.finish();
}
catch(Exception e)
{
Toast.makeText(getApplicationContext(), e, Toast.LENGTH_LONG).show();
}
}
现在开始第三个 Activity ,在哪里采取这样做的 Intent
String name;
if (savedInstanceState == null) {
Bundle extras = getIntent().getExtras();
if(extras == null) {
name= null;
} else {
name= extras.getString("Name");
}
} else {
name = (String) savedInstanceState.getSerializable("Name");
}
但正如您可以想象的那样,情况并非如此,字符串是空的。
我哪里错了?提前致谢。
这是完整的登录类
public void onSuccess(LoginResult loginResult) {
GraphRequest.newMeRequest(
loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject user, GraphResponse response) {
if (response.getError() != null) {
} else {
id = user.optString("id");
firstName = user.optString("first_name");
lastName = user.optString("last_name");
email = user.optString("email");
Log.i(TAG,"User ID "+ id);
Log.i(TAG,"Email "+ email);
}
Name = firstName + " " + lastName;
Toast.makeText(getApplicationContext(), "Log in with " + Name, Toast.LENGTH_LONG).show();
}
}).executeAsync();
}
最佳答案
您可以通过以下方式解决问题并让代码正常运行。
唯一需要 onActivityResult()
的地方是 Activity A(第一个 Activity)。
该过程的第一步是使用 startActivityForResult()
启动您的 LoginActivity,可能来自 onCreate()
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent i = new Intent(this, LoginActivity.class);
startActivityForResult(i, 999);
}
然后,在此类中设置 onActivityResult()
方法,该方法将处理 LoginActivity 的结果,并将 Name 发送到 MainPeopleActivity2:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//check request code and result code:
if (requestCode == 999 && resultCode == RESULT_OK) {
//get the extras:
Bundle extras = data.getExtras();
String name = null;
if (extras != null) {
name = extras.getString("Name");
try {
Intent people = new Intent(this, MainPeopleActivity2.class);
people.putExtra("Name", name);
startActivity(people);
//this.finish();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
}
}
}
}
然后您的 LoginActivity 中的 onSuccess()
方法将需要在此处添加一些代码。通过调用 setResult()
将名称发送回第一个 Activity:
public void onSuccess(LoginResult loginResult) {
GraphRequest.newMeRequest(
loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject user, GraphResponse response) {
if (response.getError() != null) {
//process error
} else {
id = user.optString("id");
firstName = user.optString("first_name");
lastName = user.optString("last_name");
email = user.optString("email");
Log.i(TAG,"User ID "+ id);
Log.i(TAG, "Email " + email);
Name = firstName + " " + lastName;
Toast.makeText(getApplicationContext(), "Log in with " + Name, Toast.LENGTH_LONG).show();
//adding this:
Intent i = new Intent();
i.putExtra("Name", Name);
LoginActivity.this.setResult(RESULT_OK, i);
LoginActivity.this.finish();
}
}
}).executeAsync();
}
然后,您将能够在 onCreate()
中成功获取 MainPeopleActivity2 Activity 中的名称:
public class MainPeopleActivity2 extends ActionBarActivity {
String name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_MainPeopleActivity2);
if (savedInstanceState == null) {
Bundle extras = getIntent().getExtras();
if(extras == null) {
name= null;
} else {
name= extras.getString("Name");
}
} else {
name = (String) savedInstanceState.getSerializable("Name");
}
}
//...... rest of the code in this class
关于java - putExtra() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31224230/
在下面的 for 循环中,最后一个 putExtra 覆盖了第一个 putExtra,即使它们采用不同的参数和不同的变量。 首先:putExtra(String,String)第二:putExtra(
这个问题听起来可能很愚蠢,但我想知道我们什么时候将 Activity 名称放入 Intent.putExtra() 中?在一种情况下,我们仅将 extra 与 bundle 放在一起,而在另一种情况下
什么更快?将一堆字符串值添加到 bundle,然后将其添加到 intent?或者只是使用 intent.putExtra() 将值添加到 intent?还是差别不大? 谷歌搜索给了我教程,但没有太多答
我正在考虑我当前的应用程序。我有这个带有两个选项卡的 TabHost 类。Tab1 在 ListView 中显示来自 WS 的数据。 Tab2 在 webview 中显示与图表相同的数据。 当然,我不
基于 Searchable Dictionary示例 我尝试将额外的数据放入不同的 Activity 中。 public void onCreate(Bundle savedInstanceStat
我的问题是在 3 个 Activity 之间传递一个字符串。我解释一下我是如何做到的。 第一个名为 loginActiviy 的 Activity 是我执行此操作的地方。 //OnCreate e
我有一个要求,我想开发一个混合应用程序并列出蓝牙设备、扫描和连接、共享文件等。 所以我想将 BluetoothAdapter mAdapter 值添加到 extras 中并将其传递到 onActivi
我正在关注这个例子: http://developer.android.com/training/camera/photobasics.html 如果您为此 putExtra(MediaStore.E
好的 所以我想使用 getextrand putextra 方法将值从一个 Activity 传递到另一个 Activity 。 在我想要接收数据的第二个 Activity 中,充满了按钮和 Text
我在点击按钮时使用此操作调用 Activity: EditText text = (EditText) findViewById(R.id.codice); Intent intent = new I
我有 Intent,我从 MainActivity 将两个 ArrayLists 的 Parceables 传递给一个“FormActivity”,它接收 ArrayLists perfeclty(使
这是用于将数据发送到主 Activity 的函数。 public void sendData(){ String name = Bookname.getText().toString(
我想将 Intent 从第一个 Activity 发送到另一个 Activity 。 第一个 Activity 向第二个 Activity 发送一个 Intent 以创建一个新的 AlertDialo
我有多个变量要从一个 Activity 传递到另一个 Activity 。 我在第一个 Activity 中有这个: public void onClick(View v) { switch(
我有一个通知,当按下时应该启动一个 Activity ,该 Activity 又会启动一个对话框。这一切都有效,但对话框从通知中提取信息认为 Intent.putExtra()。问题是,它总是从 pu
这个问题在这里已经有了答案: Passing JSONObject to another activity via Intent [duplicate] (3 个答案) 关闭 5 年前。 如何使用p
我在 GCMIntentservice 中编写了一段代码,用于向许多用户发送推送通知。我使用的NotificationManager将在单击通知时调用DescriptionActivity类。我还将
我有一个代码,使用 putextra 方法将数据从 Activity 推送到另一个 Activity ,我想使用相同的键推送不同的值代码: String int_value = "int_value"
我有 2 项 Activity ,我正在尝试将第一个 Activity 中的值放入第二个 Activity 中。在第一个 Activity 中,我创建了一个带有 onClick 参数的按钮。 然后我
我正在尝试开发一个二维码扫描仪,我想向用户显示扫描结果的历史记录。现在,虽然扫描的数据值已正确传递到不同的 Activity ;它的问题是,即使我没有扫描 qr,空数据也会传递到下一个 Activit
我是一名优秀的程序员,十分优秀!