现在有 Activity A B CA 启动 B
B 启动 C,并且调用 finish 方法关闭自己
C 调用 setResult(100,intent) 方法,然后同样 finish 自己A 的 onActivityResult 会被调用,但是 resultCode 却是0,intent 也是 null请问是什么原因啊?

解决方案 »

  1.   

    照你的思路的话  不应该finish  B 要在B中onActivityResult  然后再传递给Aeventbus有没有兴趣了解一下?
      

  2.   

    eventbus了解一下
      

  3.   

    你这有问题啊,我写了个例子,A收不到消息啊,你写的代码没问题吗package com.example.one;import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;import com.example.aidlserver.R;public class OneActivity extends AppCompatActivity {    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_one);        Button btn = (Button)findViewById(R.id.btn);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(OneActivity.this, TwoActivity.class);
                    startActivity(intent);
                }
            });    }    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {        int quest = requestCode;
            int result = resultCode;
            String d = data.getStringExtra("data");
            Log.v("zzw",quest+" "+result+" "+d);
        }
    }package com.example.one;import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;import com.example.aidlserver.R;public class TwoActivity extends AppCompatActivity {     static final int INTENT_TWO = 1001;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_two);        Button btn = (Button)findViewById(R.id.btn);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(TwoActivity.this, ThreeActivity.class);
                    intent.putExtra("data","from two of message");
                    startActivityForResult(intent, INTENT_TWO);
                    finish();
                }
            });    }    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {        int quest = requestCode;
            int result = resultCode;
            String d = data.getStringExtra("data");
            Log.v("zzw",quest+" "+result+" "+d);
        }
    }
    package com.example.one;import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;import com.example.aidlserver.R;public class ThreeActivity extends AppCompatActivity {    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_three);
            Button btn = (Button)findViewById(R.id.btn);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   // Intent intent = new Intent(OneActivity.this, TwoActivity.class);
                    //startActivity(intent);
                    Intent intent = new Intent(ThreeActivity.this,TwoActivity.class);
                    intent.putExtra("data", "from Three of message");
                    setResult(RESULT_OK, intent );
                    finish();
                }
            });
        }    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {        int quest = requestCode;
            int result = resultCode;
            String d = data.getStringExtra("data");
            Log.v("zzw",quest+" "+result+" "+d);
        }
    }
      

  4.   

    只是要简单的传值的话,在第一个Activity写一个
    public static int setValues(int values){
     mValues = values;
    }
      

  5.   

    你干嘛要局限用intent传递数据呢?如果是少量数据你可以用sp数据存储了在A页面去读取啊,如果数据多,你可以用数据库啊
      

  6.   

    Rxbus    Eventbus   sharedpereference    sqlite   文件  静态方法  都可以,另外你的写法错了,A startActivityForResult B  , B startActivityForResult  C,A 、 B 不要 finish
      

  7.   

    直接C跳A getIntent不是也可以吗
      

  8.   

    问题大了,帮你把三个界面的代码都改了一遍,并标上注释了:public class OneActivity extends AppCompatActivity { static final int INTENT_ONE = 1001;
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_one);

    //点击跳转至 TwoActivity
            findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivityForResult(new Intent(this, TwoActivity.class), INTENT_ONE);
                }
            });
     
        }
     
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     
            //接收 TwoActivity 界面返回的值
    if(requestCode == INTENT_ONE && resultCode  == RESULT_OK && data != null) {
    String d = data.getStringExtra("data");
    Log.v("zzw",quest+" "+result+" "+d);
    }
        }
    }
     
    public class TwoActivity extends AppCompatActivity {
     
        static final int INTENT_TWO = 1002;
        
    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_two);
     
    //点击跳转至 ThreeActivity
            findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivityForResult(new Intent(this, ThreeActivity.class), INTENT_TWO);
                }
            });
     
        }
     
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //接收 ThreeActivity 界面返回的值,并关闭当前界面把从 ThreeActivity 接收到的值传递给上一个界面(OneActivity)
    if(requestCode == INTENT_TWO && resultCode  == RESULT_OK && data != null) {
    setResult(RESULT_OK, data)
    finish()
    }
        }
    }
     
    public class ThreeActivity extends AppCompatActivity {
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_three);
     
    //点击按钮关闭 ThreeActivity 并返回上一个界面(TwoActivity)
    //同时传值 "from Three of message" 回 上一个界面(TwoActivity)
            findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.putExtra("data", "from Three of message");
                    setResult(RESULT_OK, intent);
                    finish();
                }
            });
        }
    }
      

  9.   

    很简单 用 基础的Service 老大哥 绑一个是一个,只要被绑的actvity没死绝,找个service就活着,拿数据还不是跟玩着一样
      

  10.   

    不知道理解错没有,看你描述是想C界面返回值给A界面    用EventBus可以任何界面传递,最简单的写一个公共的变量赋值比如public static String sipName = "";,公共的数据如果怕销毁可以存轻量缓存ACache里面
      

  11.   

    如果你的A估计是SingleTask模式,不支持onActivityResult,在你启动B的时候,onActivityResult会立马调用。
      

  12.   

    使用eventbus,不要用什么onresult什么的
      

  13.   

    存在一个类里也行,我的资源那里有类似的一个Demo