首先:

相关问题的所有答案都不能解决我的问题,这就是为什么我要创建一个新问题。

说明:

我有一个庞大的android应用程序,我使用Eclipse-ADT插件,并且我使用的是具有android 4.0.4的智能手机来进行测试,我有很多Activity,并且我通过Bundle getExtras中的onCreate()在Activity之间传递值,我也得到了onActivityResult的一些值。

Obs:

(1) =要求结果的 Activity A-> Activity B

(2) = Activity B,它从 Activity A获取值并将其他值返回到-> Activity A。

问题:

  • 我有 ProdutosForm.java (1) Activity 和 PedidoItemx.java (2) Activity 。
  • ProdutosForm.java (1)内,我正在启动 PedidoItemx.java (2) Activity 以获取结果:

  • 项目2的代码:
    <!-- 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
    
  • 里面 PedidoItemx.java (2)我有onCreate方法:

  • 项目3的代码:
    <!-- language: lang-java -->
    
    Bundle extras    = getIntent().getExtras();
    code             = extras.getString("CODE");
    

    4.仍然在 PedidoItemx.java 内部(2),我设置了一些新值,并将结果设置为RESULT_OK:

    项目4的代码
    <!-- 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();
    
  • 现在,返回到 ProdutosForm.java (1),我具有以下onActivityResult代码来获取 PedidoItemx.java (2)返回的值:

  • 项目5的代码:
    <!-- 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>
    

    题:

    为什么我无法获得 Activity B返回的数据?我做错了什么?

    最佳答案

    我想出了解决问题的方法:
    我不知道为什么会使用,但是如果我 MOVE ,则实际上是 Activity 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();
    
    onCreate之后的->,它可以正常工作。
    但是如果我在单击按钮时将代码“移回正确的位置”,则无法正常工作,我真的不知道为什么 Activity 具有这种非常奇怪的行为,但是当我发现它时,我很乐意分享出来。
    换句话说,在执行任何操作之前,我必须设置Extras和RESULT_OK,否则它将无法正常工作。

    10-07 19:44
    查看更多