gpt4 book ai didi

java - putExtra() 不起作用

转载 作者:行者123 更新时间:2023-12-01 11:21:04 25 4
gpt4 key购买 nike

我的问题是在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com