相关问题的所有答案都没有解决我的问题,这就是为什么我要创建一个新问题。
我有一个巨大的Android应用程序,我使用Eclipse-ADT插件,我使用的是具有android 4.0.4的智能手机来进行测试,我有很多活动&我在Activity和#之间传递值39;通过Bundle getExtras
中的onCreate()
,我在onActivityResult
上获得了一些价值。
(1) =要求结果的活动A - >活动B
(2) =活动B从活动A获取值并将其他值返回到 - >活动A.
<!-- language: lang-java -->
Intent i = new Intent();
i.setClass(this, PedidoItemx.class);
i.putExtra("CODE", code );
...
... (a LOT of putExtras....)
...
//and after putExtras, thats the relevant part
startActivityForResult(i, 1); //i its the Intent setted as PedidoItemx.class
onCreate
方法我有:<!-- language: lang-java -->
Bundle extras = getIntent().getExtras();
code = extras.getString("CODE");
4。太,仍然在 PedidoItemx.java (2)我设置了一些新值,我将结果设置为RESULT_OK:
<!-- language: lang-java -->
Intent i = getIntent();
i.putExtra("PEDIDO", cPedPedido);
i.putExtra("VLRFRETE", valorFrete);
setResult(RESULT_OK, i); //RESULT_OK is a native constant that have value -1
finish();
<!-- language: lang-java -->
public void onActivityResult(int requestCode,int resultCode,Intent data){
if(resultCode==RESULT_OK && requestCode==1){
Bundle MBuddle = data.getExtras();
Intent i = getIntent();
String cPedidoExtra = MBuddle.getString("PEDIDO");
i.putExtra("PEDIDO", cPedidoExtra);
i.putExtra("VLRFRETE", MBuddle.getFloat("VLRFRETE", 0));
cPedPedido = cPedidoExtra; //this does nothing important
setResult(RESULT_OK, i);
}
}
requestCode
总是0
而我的data
始终是null
,这才是真正的问题。<!-- language: lang-xml -->
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="bee.mobile"
android:versionCode="2"
android:versionName="1.50" >
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="7" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCOUNT_MANAGER" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<!-- <uses-permission android:name="android.permission.RECEIVE_SMS" /> -->
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:screenOrientation="user"
android:debuggable="true"> <!-- mudar para false ao gerar depois -->
<activity
android:name="bee.mobile.form.outros.SplashActivity"
android:label="@string/app_name"
android:screenOrientation="sensor">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Outros -->
<activity android:name="bee.mobile.form.outros.MainActivity"/>
<activity android:name="bee.mobile.form.outros.HistoricoClienteForm"/>
<activity android:name="bee.mobile.form.outros.HistoricoListaNotasForm"/>
<activity android:name="bee.mobile.form.outros.HistoricoNotaForm"/>
<activity android:name="bee.mobile.form.outros.HistoricoProdutoForm"/>
<activity android:name="bee.mobile.form.outros.HistoricoMesProdForm"/>
<activity android:name="bee.mobile.form.outros.HistoricoQuemForm"/>
<activity android:name="bee.mobile.form.outros.PedidoItemx"/>
<activity android:name="bee.mobile.form.outros.RelatoriosForm"/>
<activity android:name="bee.mobile.form.outros.EstufaDetalhes"
android:windowSoftInputMode="stateHidden"/>
<!-- Lista -->
<activity android:name="bee.mobile.form.lista.ClientesForm"/>
<activity android:name="bee.mobile.form.lista.ProdutosForm"/>
<activity android:name="bee.mobile.form.lista.PedidoListaForm"/>
<activity android:name="bee.mobile.form.lista.ContatosListaForm"/>
<activity android:name="bee.mobile.form.lista.GruposForm"/>
<activity android:name="bee.mobile.form.lista.NotaListaForm"/>
<!-- Cadastro -->
<activity android:name="bee.mobile.form.cadastro.PedidoCadForm"/>
<activity android:name="bee.mobile.form.cadastro.ClientesCadastroForm"
android:windowSoftInputMode="stateHidden"/>
<activity android:name="bee.mobile.form.cadastro.ContatosCadForm"
android:windowSoftInputMode="stateHidden"/>
<activity android:name="bee.mobile.form.cadastro.PedidoCadForm_Financeiro"/>
<!-- Sem destino -->
<activity android:name="bee.mobile.ConfigurarForm"/>
<activity android:name="bee.mobile.ConfiguracaoLocalForm"/>
<activity android:name="bee.mobile.AtualizaManual"/>
<activity android:name="bee.mobile.ReceberForm"/>
<activity android:name="bee.mobile.ResolucaoForm"/>
<activity android:name="bee.mobile.AtualizarForm"/>
<activity android:name="bee.mobile.ParticipantesVendaForm"/>
</application>
</manifest>
为什么我无法获取活动B返回的数据?我做错了什么?
答案 0 :(得分:1)
我不知道为什么,但如果我 MOVE 这段代码实际上是活动B(2)上的buttonClick事件:
Intent i = getIntent();
i.putExtra("PEDIDO", cPedPedido);
i.putExtra("VLRFRETE", valorFrete);
setResult(RESULT_OK, i); //RESULT_OK is a native constant that have value -1
finish();
To - &gt;在onCreate
之后,它可以正常工作。
但是,如果我将此代码&#34;移回正确位置&#34;点击按钮,它不起作用,我真的不知道为什么活动有这种非常奇怪的行为,但我很乐意分享,当我弄清楚。
换句话说,我必须在做任何事情之前设置额外内容和RESULT_OK
,否则它不起作用。
答案 1 :(得分:0)
我认为您应该为您的意图添加操作ACTION_SEND以返回其他活动。像这样:
Intent i = getIntent();
**i.setAction(Intent.ACTION_SEND);**
i.putExtra("PEDIDO", cPedPedido);
i.putExtra("VLRFRETE", valorFrete);
setResult(RESULT_OK, i);
finish();
答案 2 :(得分:0)
使用:
Intent i = this.getIntent();
而不是
Intent i = getIntent();
在您需要接收意图数据的活动中,该数据具有绑定到某些键的值。