You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何将两个Activity的单选按钮值传递到第三个Activity

Hey there, let's figure out why you're hitting that "no data" error when submitting from Activity3. I've run into similar issues before, so let's break down the common pitfalls and fix this step by step.

First, let's cover the two approaches you tried—Intent chain passing and SharedPreferences—with concrete fixes for the mistakes that usually cause missing data.


Approach 1: Intent Chain Passing (Fixing Your getExtra Issues)

The most common mistake here is not forwarding Activity1's data from Activity2 to Activity3. If you only pass Activity2's value to Activity3, you'll never get Activity1's data. Here's how to do it correctly:

Step 1: Pass Activity1's Radio Value to Activity2

Make sure you grab the selected radio button value when the user clicks to navigate, not in onCreate (since the user hasn't made a choice yet):

// In Activity1, your "next" button click listener
buttonNextToActivity2.setOnClickListener(v -> {
    RadioGroup radioGroup1 = findViewById(R.id.radio_group_activity1);
    int selectedRadioId = radioGroup1.getCheckedRadioButtonId();
    
    // Handle case where user didn't select anything
    if (selectedRadioId == -1) {
        Toast.makeText(this, "Please select an option first!", Toast.LENGTH_SHORT).show();
        return;
    }
    
    RadioButton selectedRadio = findViewById(selectedRadioId);
    String activity1Selection = selectedRadio.getText().toString();
    
    // Pass the value via Intent
    Intent intent = new Intent(Activity1.this, Activity2.class);
    intent.putExtra("ACTIVITY1_SELECTION", activity1Selection);
    startActivity(intent);
});

Step 2: Forward Activity1's Data + Pass Activity2's Value to Activity3

In Activity2, you need to hold onto Activity1's data and send it along with your own radio value to Activity3:

// In Activity2, your "next" button click listener
buttonNextToActivity3.setOnClickListener(v -> {
    // First, retrieve Activity1's data from the incoming Intent
    String activity1Data = getIntent().getStringExtra("ACTIVITY1_SELECTION");
    if (activity1Data == null) {
        Toast.makeText(this, "Failed to get previous step data", Toast.LENGTH_SHORT).show();
        return;
    }
    
    // Get Activity2's selected radio value
    RadioGroup radioGroup2 = findViewById(R.id.radio_group_activity2);
    int selectedRadioId = radioGroup2.getCheckedRadioButtonId();
    if (selectedRadioId == -1) {
        Toast.makeText(this, "Please select an option first!", Toast.LENGTH_SHORT).show();
        return;
    }
    RadioButton selectedRadio = findViewById(selectedRadioId);
    String activity2Selection = selectedRadio.getText().toString();
    
    // Send both values to Activity3
    Intent intent = new Intent(Activity2.this, Activity3.class);
    intent.putExtra("ACTIVITY1_SELECTION", activity1Data);
    intent.putExtra("ACTIVITY2_SELECTION", activity2Selection);
    startActivity(intent);
});

Step 3: Retrieve Both Values in Activity3's Submit Button

Now you can safely grab both values when the user submits:

// In Activity3, your "submit" button click listener
buttonSubmit.setOnClickListener(v -> {
    String activity1Data = getIntent().getStringExtra("ACTIVITY1_SELECTION");
    String activity2Data = getIntent().getStringExtra("ACTIVITY2_SELECTION");
    
    if (activity1Data == null || activity2Data == null) {
        Toast.makeText(this, "No data found", Toast.LENGTH_SHORT).show();
        return;
    }
    
    // Now you can display the data or save to database
    Toast.makeText(this, 
        "Activity1 choice: " + activity1Data + "\nActivity2 choice: " + activity2Data, 
        Toast.LENGTH_LONG
    ).show();
    
    // Insert into database here (use your DB helper code)
});

Approach 2: SharedPreferences (Fixing Missing Data Issues)

If you're using SharedPreferences, the #1 mistake is forgetting to call apply() or commit() after editing—this means your data never gets saved to disk. Here's the correct flow:

Step 1: Save Activity1's Value to SharedPreferences

// In Activity1's "next" button listener
buttonNextToActivity2.setOnClickListener(v -> {
    RadioGroup radioGroup1 = findViewById(R.id.radio_group_activity1);
    int selectedRadioId = radioGroup1.getCheckedRadioButtonId();
    if (selectedRadioId == -1) {
        Toast.makeText(this, "Please select an option first!", Toast.LENGTH_SHORT).show();
        return;
    }
    RadioButton selectedRadio = findViewById(selectedRadioId);
    String activity1Selection = selectedRadio.getText().toString();
    
    // Save to SharedPreferences
    SharedPreferences prefs = getSharedPreferences("SurveyData", MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("ACTIVITY1_RADIO", activity1Selection);
    editor.apply(); // DO NOT FORGET THIS LINE!
    
    startActivity(new Intent(Activity1.this, Activity2.class));
});

Step 2: Save Activity2's Value to SharedPreferences

// In Activity2's "next" button listener
buttonNextToActivity3.setOnClickListener(v -> {
    RadioGroup radioGroup2 = findViewById(R.id.radio_group_activity2);
    int selectedRadioId = radioGroup2.getCheckedRadioButtonId();
    if (selectedRadioId == -1) {
        Toast.makeText(this, "Please select an option first!", Toast.LENGTH_SHORT).show();
        return;
    }
    RadioButton selectedRadio = findViewById(selectedRadioId);
    String activity2Selection = selectedRadio.getText().toString();
    
    // Save to SharedPreferences
    SharedPreferences prefs = getSharedPreferences("SurveyData", MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("ACTIVITY2_RADIO", activity2Selection);
    editor.apply();
    
    startActivity(new Intent(Activity2.this, Activity3.class));
});

Step 3: Retrieve Values in Activity3's Submit Button

// In Activity3's "submit" button listener
buttonSubmit.setOnClickListener(v -> {
    SharedPreferences prefs = getSharedPreferences("SurveyData", MODE_PRIVATE);
    String activity1Data = prefs.getString("ACTIVITY1_RADIO", null);
    String activity2Data = prefs.getString("ACTIVITY2_RADIO", null);
    
    if (activity1Data == null || activity2Data == null) {
        Toast.makeText(this, "No data found", Toast.LENGTH_SHORT).show();
        return;
    }
    
    // Display or save to database
    Toast.makeText(this, 
        "Activity1 choice: " + activity1Data + "\nActivity2 choice: " + activity2Data, 
        Toast.LENGTH_LONG
    ).show();
});

Quick Debug Checklist for Your Existing Code

If you still run into issues, double-check these:

  • Are you grabbing the radio button value after the user makes a selection (not in onCreate)?
  • For Intents: Are your key strings identical (case-sensitive!) across all Activities?
  • For SharedPreferences: Did you call apply()/commit() after editing?
  • Are you handling cases where the user doesn't select a radio button (which would result in null values)?

内容的提问来源于stack exchange,提问作者hk77798

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:45:36