Java onActivityResult返回值太晚
我有2D字符串数组,我随机选取一个字段。若为空,应用程序弹出一个带有编辑文本和按钮的窗口,该窗口将覆盖该字段。弹出窗口返回包含editText内容的意图,并调用Java onActivityResult返回值太晚,java,android,variables,onactivityresult,startactivityforresult,Java,Android,Variables,Onactivityresult,Startactivityforresult,我有2D字符串数组,我随机选取一个字段。若为空,应用程序弹出一个带有编辑文本和按钮的窗口,该窗口将覆盖该字段。弹出窗口返回包含editText内容的意图,并调用finish()。 我试图从函数中返回一个字符串,该字符串startActivityForResult(this,popupWindow)。但它会返回null,稍后当我不希望它这样做时,它会覆盖字符串 在活动一中: String returned_string_to_add; protected void onCreate(Bundle
finish()
。
我试图从函数中返回一个字符串,该字符串startActivityForResult(this,popupWindow)
。但它会返回null,稍后当我不希望它这样做时,它会覆盖字符串
在活动一中:
String returned_string_to_add;
protected void onCreate(Bundle savedInstanceState) {
[....]
int[] thrown= throwCoin(cols,rows); //create int[2] with random numbers
[....]
if (board[thrown[0]][thrown[1]]==null){
board[thrown[0]][thrown[1]]=addTask();
Log.wtf( "check_board", board[thrown[0]][thrown[1]]);
Log.wtf( "intent", returned_string_to_add);
}
private String addTask() {
returned_string_to_add=null;
Intent intent=new Intent(this,PopupQuestion.class);
startActivityForResult(intent,1);
//I expect to get results here.
return returned_string_to_add;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if ((requestCode == 1)&&(resultCode == Activity.RESULT_OK)){
super.onActivityResult(requestCode,resultCode,data);
returned_string_to_add=data.getStringExtra("String");
}
else if (resultCode == Activity.RESULT_CANCELED) {
returned_string_to_add=null;
}
}
电路板的类型为先前初始化的String[][
在活动1中的创建中的onCreate
:
String returned_string_to_add;
protected void onCreate(Bundle savedInstanceState) {
[....]
int[] thrown= throwCoin(cols,rows); //create int[2] with random numbers
[....]
if (board[thrown[0]][thrown[1]]==null){
board[thrown[0]][thrown[1]]=addTask();
Log.wtf( "check_board", board[thrown[0]][thrown[1]]);
Log.wtf( "intent", returned_string_to_add);
}
private String addTask() {
returned_string_to_add=null;
Intent intent=new Intent(this,PopupQuestion.class);
startActivityForResult(intent,1);
//I expect to get results here.
return returned_string_to_add;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if ((requestCode == 1)&&(resultCode == Activity.RESULT_OK)){
super.onActivityResult(requestCode,resultCode,data);
returned_string_to_add=data.getStringExtra("String");
}
else if (resultCode == Activity.RESULT_CANCELED) {
returned_string_to_add=null;
}
}
弹出问题:
[...]
onCreate
[...]
Intent intent =new Intent();
intent.putExtra("String",edittext.getText().toString()); //works fine
setResult(Activity.RESULT_OK,intent);
finish();
我想在函数
addTask()
中覆盖返回的\u字符串\u to \u add,但这会在以后发生。如何解决这个问题?“我希望在这里得到结果。”-这不会发生。你需要使用onActivityResult的回调来获得结果。你知道如何让它正常工作吗?data.getStringExtra(“String”)
-你验证过它被调用并且包含正确的值了吗?“但当它完成时,应用程序不会立即调用onActivityResult()。-确实如此。“我需要覆盖返回的\u字符串\u以添加我调用startActivityForResult(intent,1)的确切位置”-您无法在那里获取它。您需要重新构造代码,以便在activityresult()上执行需要对结果执行的任何操作。无法从addTask()
返回预期值。这取决于当前尝试使用addTask()
返回的内容。基本上,您需要更改stringwhere=addTask()代码>,下一个代码…
只是addTask()代码>,以及下一个代码…
将从activityresult()上的执行。