Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用finish发回数据?_Android_Android Intent - Fatal编程技术网

Android 如何使用finish发回数据?

Android 如何使用finish发回数据?,android,android-intent,Android,Android Intent,我可以使用以下方法将数据从一个活动发送到另一个活动: intent.putExtra("Name", Value); 使用finish()返回上一个活动时,如何发送数据 在我的应用程序中,从Activity\u A我将进入Activity\u B。在Activity_B中,我在地图上标出了一个位置,这给了我纬度和经度。然后我想在活动\u A中使用此lat和lng。但我不想使用意图回到活动A,因为我不想重新创建活动\u A,因为已经填充的一些数据将丢失。使用startractivityforre

我可以使用以下方法将数据从一个活动发送到另一个活动:

intent.putExtra("Name", Value);
使用
finish()
返回上一个活动时,如何发送数据


在我的应用程序中,从
Activity\u A
我将进入
Activity\u B
。在
Activity_B
中,我在地图上标出了一个位置,这给了我纬度和经度。然后我想在
活动\u A
中使用此lat和lng。但我不想使用意图回到
活动A
,因为我不想重新创建
活动\u A
,因为已经填充的一些数据将丢失。

使用
startractivityforresult
在B
finish
之前启动B和
setResult
,并在A

中处理
onAcitivityResult
,就像您使用
intent.putExtra(“Name”,Value)一样,在完成活动时也使用相同的东西

例如:

从activityA中,您可以将activityB称为:

intent.putExtra("Name", Value);
now instead of startActivity() use `startActivityForResult()`
在activityB中,在完成活动时,呼叫:

setResult(RESULT_OK);
现在在activityA中,将调用您的
onActivityResult
,如下所示:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
}
因此,您可以通过这种方式处理它。

在活动A中:

// Add more, if you call different activities from Activity A
private static final REQUEST_GET_MAP_LOCATION = 0;

void doSomething() {
    ...
    startActivityForResult(theIntentYouUseToStartActivityB, REQUEST_GET_MAP_LOCATION);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_GET_MAP_LOCATION && resultCode == Activity.RESULT_OK) {
        int latitude = data.getIntExtra("latitude", 0);
        int longitude = data.getIntExtra("longitude", 0);
        // do something with B's return values
    }
}
在活动B中:

...
setResult(Activity.RESULT_OK, 
    new Intent().putExtra("latitude", latitude).putExtra("longitude", longitude));
finish();
...

使用
startActivityForResult()
从您的
活动\u A
调用您的
活动\u B

 //Starting a new Intent
 Intent nextScreen = new Intent(getApplicationContext(), Activity_B.class);
 // starting new activity
 startActivityForResult(nextScreen,1000);
完成
活动B
后,调用
setResult()
设置数据,然后按如下方式调用
finish()

 //Starting the previous Intent
 Intent previousScreen = new Intent(getApplicationContext(), Activity_A.class);
 //Sending the data to Activity_A 
 previousScreen.putExtra("Bla"," Blabla"); 
 setResult(1000, previousScreen);
 finish();
这将使您回到以前的
活动\u A

Activity\u A
中,覆盖
onActivityResult()


找到

将值保存在全局变量中或使用共享前缀。如果使用全局变量有问题。如果我像这样使用它,活动。当我在Activity_A中时,转到Activity_B并返回Activity_A,使用home按钮关闭应用程序,并在5分钟后重新打开,我收到空指针异常,因为,包含此变量的Activity_B已被销毁,您可以引用此链接。。。这肯定会对你有所帮助…你可以使用共享首选项查看答案:[在这里输入链接描述][1][1]:所以我保留意图。putExtra(“lat”,lat);然后设置结果(1,意图);然后finish()?在onACtivityResult中,data.getDoubleExtra(“lat”);但还有一件事。如果我在活动_B中按back按钮会怎么样?我是否应该覆盖活动_B中的onBackPress()并说ResultCode=0??如果在Activity上没有发送任何内容,android是否需要或会注意最后如果您想禁用back按钮,您可以。。出于同样的原因,在activityB中,检查ActivityResult内部是否有正确的请求和结果代码。所以,若用户按下“后退”按钮,结果代码将有所不同。我有一个例子,其中,Activity_a调用Activity_B,inturn调用Activity_C和finish();。。。现在,如果我在活动_C上调用finish(),我将进入活动_A,但在这里的OnActivityResult中,它并没有进入您给出的if块。这是意料之中的,因为从活动B到活动C,我只是在使用startActivity(intent)。如何解决这个案子??感谢you@Archie.bpgc:当您在B中调用Activity_C时,在调用
finish
之前是否
setResult
?不,除了Intent(Activity_B,Activity_C)、startActivity(Intent)和finish(),我没有使用任何东西;但我随后改变了startActivityForResult(意图,0);我认为setResult在活动_B中没有用处,因为我这里没有lat,lng值,它们在活动_C中,而且当从活动_C返回到活动_A时,我不会通过活动_B,因为它已完成
 @Override  
  protected void onActivityResult(int requestCode, int resultCode, Intent data)     
  {
     super.onActivityResult(requestCode, resultCode, data);
     String bla = data.getStringExtra("Bla");       
  }