【问题标题】:How to pass data 1st activity to 2nd and 2nd activity to 3rd [duplicate]如何将数据第一个活动传递给第二个和第二个活动到第三个[重复]
【发布时间】:2018-05-08 11:46:58
【问题描述】:

注意:我知道如何使用 Bundle 和 PutExtra 将数据 Activity1 传递给 Activity2

我参考以下链接:

问题

我有 3 个活动,Activity1Activity2Activity3

在活动 1 中,我有 数据。当我点击数据时 Activity2 启动。

Activity2 我有 Textview。当我点击 textView 然后打开 Activity3

Activity3 我有EditText

所以我想传递数据 Activity1 TO Activity2 AND Activity2 TO Activity3

Activity1代码:

private OnItemClickListener listener = new OnItemClickListener() {
        @Override
        public void onItemClick(Base item) {
            Company company = (Company) item;
            Intent intent = new Intent(getActivity(), CompanyDetailActivity.class);
            //intent.putExtra("company", company);
            //intent.putExtra("edit", "editFrag");
            intent.putExtra("company", item);
            startActivity(intent);
            Log.e("Item...","Item clicked "+company.getName());
        }
    };

Activity2代码:

case R.id.rlCompanyProfile:
            //Base item = null;
            Company company = (Company) getIntent().getExtras().getSerializable("company") ;
            Intent intent = new Intent(this, AddCompanyActivity.class);
            intent.putExtra("company", company);
            //intent.putExtra("company", myData);
            intent.putExtra("edit", "editFrag");
            startActivity(intent);
            break;

Activity3代码:

Intent extras1 = getIntent();
        {


                        Company value = (Company) extras1.getSerializableExtra("company");
                        etCompanyName.setText(value.getName());
                        etWebsite.setText(value.getWebsite());
                        etEmail.setText(value.getEmail());
                        etPhoneHome.setText(value.getPhoneHome());
                        etPhonePrimary.setText(value.getPhonePrimary());
                        etAddressLine1.setText(value.getAddressLine1());
                        etAddressLine2.setText(value.getAddressLine2());
                        etCity.setText(value.getCity());
                        etZip.setText(value.getZipcode());
                    }

【问题讨论】:

  • 那有什么问题呢?
  • 数据不能通过activity1 to activity2 activity2 to activity3 @PankajKumar
  • @MohammadAli 分享你的代码到目前为止你尝试了什么?
  • 等待 2 分钟 @NileshRathod
  • @MohammadAli 首先在这里不要太粗鲁。如果您能够在 A 到 B 之间发送数据,那么您的代码问题一定是您无法在 B 到 C 之间传递数据。

标签: java android android-intent


【解决方案1】:

问题出在这里Activity2代码检查一下

你正在传递item = null

Activity2代码:

case R.id.rlCompanyProfile:
Base item = null; // item object is null here
Company company = (Company) item ;// here you are passing null item object of your Company class
Intent intent = new Intent(this, AddCompanyActivity.class);
intent.putExtra("company", item);
intent.putExtra("edit", "editFrag");
startActivity(intent);
break;

编辑

向Activity发送数据使用这个

intent.putExtra("company", company);

要在第三个活动中接收数据,请使用此

Company company=intent.getSerializableExtra("company");

【讨论】:

  • 请更新您的答案...@NileshRathod
  • @MohammadAli 完成
  • 你很好并且非常感谢@NileshRathod
  • @MohammadAli 欢迎乐于帮助你
【解决方案2】:

您可以使用意图或捆绑来传递数据。

您还可以使用共享偏好来存储和检索数据。 使用意图如下:

// send data
    Intent intent = new Intent(Activity1.this, Activity2.class);
    intent.putExtra("detailData",data);
    startActivity(intent);
//retrieve data
    Intent intent = getIntent();
    String detailData = intent.getStringExtra("detailData");

使用捆绑

 //Create the bundle 
 Bundle bundle = new Bundle();
//Add your data from getFactualResults method to bundle
bundle.putString("VENUE_NAME", venueName);
//Add the bundle to the intent
i.putExtras(bundle);
startActivity(i);
//retrie bundle 
Bundle bundle = getIntent().getExtras();

//Extract the data…
String venName = bundle.getString("VENUE_NAME");

共享偏好:

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();
    SharedPreferences.Editor editor = sharedpreferences.edit();
                editor.putString("key", value);
                editor.commit();
//retrieve data
pref.getString("key", null); // getting String

【讨论】:

    【解决方案3】:

    您可以使用Activity 类的startActivityForResult() 方法来实现这种性质。

    参考此链接startActivityForResult

    【讨论】:

      【解决方案4】:

      您可以使用sharedpreference来存储Activity1Activity2的数据以传入Activity3

      【讨论】:

        【解决方案5】:

        没那么难,只要使用putExtra()在activity之间传递数据,工作流程就是这样,首先使用putExtra()作为你的第一个意图去第二个Activity,在你到达Activity 2之后,就使用捆绑包 getExtras() 获取结果,然后创建另一个 intent.putExtra() 以将该数据发送到 Activity 3

        工作流程应该是这样的

        活动 1

        String myData = "StackOverflowRocks";
        
        Intent intent = new Intent(getBaseContext(), Activity2.class);
        intent.putExtra("THE_ID_OF_WHAT_YOU_ARE_SENDING", myData);
        startActivity(intent);
        

        Activity 2 获取数据

         Bundle extras = getIntent().getExtras(); 
         String getData;
        
        if (extras != null) {
            userName = extras.getString("THE_ID_OF_WHAT_YOU_ARE_SENDING");
            // and get whatever type user account id is
        }
        

        现在您已经在 Activity 2 中获得了数据,执行与 Activity 1 到 Activity 2 相同的操作

        String myData = getData;
        
        Intent intent = new Intent(getBaseContext(), Activity3.class);
        intent.putExtra("THE_ID_OF_WHAT_YOU_ARE_SENDING2", myData);
        startActivity(intent);
        

        并在您的活动 3

        中获取它

        您可以通过这种方式查看您的附加信息。

        Bundle extras = getIntent().getExtras(); 
         String getData;
        
        if (extras != null) {
            userName = extras.getString("THE_ID_OF_WHAT_YOU_ARE_SENDING2");
            // and get whatever type user account id is
        }
        

        编辑:您的问题是您将数据作为 item1 发送到 Activity 2,但是在 Activity 2 中您没有获得 item1 数据,您只是创建一个新数据并将其发送到 Activity 3。

        在您的活动 2 中检查这一点

        Intent intent = new Intent(this, AddCompanyActivity.class);
        intent.putExtra("company", item1);
        intent.putExtra("edit", "editFrag");
        

        无需创建新的 item1,只需从您的活动 1 中获取 item1 的数据:

        String company = getIntent().getStringExtra("company");
        

        【讨论】:

        • 据说getDataActivity2中为空
        • 在 getExtra 中添加了对 null 的检查,如果显示为 null ,则可能是变量类型或您传递的数据为 null,但这应该可以工作
        • 我会检查item 中的第一个活动数据,但无法捕获第二个活动数据
        • 正如我一直在说的,你的项目数据有误,哥们,发布你的 POJO
        猜你喜欢
        • 1970-01-01
        • 2020-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-26
        相关资源
        最近更新 更多