OnActivityResult()Intent数据始终为null,没有任何理由

时间:2014-11-03 16:41:45

标签: java android eclipse android-intent adt

首先:

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

说明:

我有一个巨大的Android应用程序,我使用Eclipse-ADT插件,我使用的是具有android 4.0.4的智能手机来进行测试,我有很多活动&我在Activity和#之间传递值39;通过Bundle getExtras中的onCreate(),我在onActivityResult上获得了一些价值。

观测值:

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

(2) =活动B从活动A获取值并将其他值返回到 - >活动A.

问题:

  1. 我有 ProdutosForm.java (1)活动和 PedidoItemx.java (2)活动。
  2. ProdutosForm.java (1)内,我开始 PedidoItemx.java (2)活动以获得结果:
  3. 第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
    
    1. 内部 PedidoItemx.java (2)onCreate方法我有:
    2. 第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();
      
      1. 现在,返回 ProdutosForm.java (1)我有以下onActivityResult代码来获取 PedidoItemx.java返回的值(2):
      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);
            }
        }
        
        1. 一切看起来都不错,应该有效,但事实并非如此。 因为我的requestCode总是0而我的data始终是null ,这才是真正的问题。
        2. 我的清单:

          <!-- 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返回的数据?我做错了什么?

3 个答案:

答案 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();

在您需要接收意图数据的活动中,该数据具有绑定到某些键的值。