java - 如何在 Android Studio 上传输多个 Activity 的数据?

标签 java android android-intent android-activity android-studio-2.2

我是 Android 和 Java 新手,我正在尝试开发一个需要多个 Activity 的应用程序。

第一个 Activity 是主菜单,第二个 Activity 是闹钟,第三个 Activity 是设置。

问题是我想从第一个 Activity 开始第二个 Activity ,但我想检查密码以停止第三个 Activity 的警报。

我已经检查了很多教程,似乎我需要将第三个 Activity 中的数据发送到第二个 Activity ,但是当我在第一个 Activity 上创建第二个 Activity 时,我不知道如何将“Intent ”对象发送到发送数据,如果我创建另一个具有相同引用的数据,它就会崩溃。

我尝试将第二个 Intent 从第一个 Activity 发送到第三个 Activity ,但我不知道如何接收它,因为它既不是字符串,也不是 Int...而且我不能这样做“bundle.getString”。

正如你所看到的,我有点困惑,这可能比我想象的要容易。我会感谢您的任何答复。

第一个 Activity (主要):

package com.example.robert.savemob;

import android.support.v7.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class Main extends AppCompatActivity {

    Intent i1;
    Intent i2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        i1 = new Intent(this, Alarma.class );
        i2 = new Intent(this, Opciones.class);
    }

    public void Alarm(View view) {
        startActivity(i1);
    }
    public void Settings(View view) {
        startActivity(i2);
    }
}

第二个 Activity (警报)

package com.example.robert.savemob;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class Alarma extends AppCompatActivity {

    private EditText et1;
    String clavecorrecta;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alarma);

        et1=(EditText)findViewById(R.id.et1);
        Bundle bundle = getIntent().getExtras();
        clavecorrecta = bundle.getString("clavecorrecta");
    }

    public void Parar(View v) {
        String clave=et1.getText().toString();
        if (clave.length()==0) {
            Toast notificacion= Toast.makeText(this,"Introduce la clave", Toast.LENGTH_LONG);
            notificacion.show();
        }
        else if (clave.equals(clavecorrecta)) {
            finish();
        }
        else {
            Toast notificacion= Toast.makeText(this,"Clave incorrecta", Toast.LENGTH_LONG);
            notificacion.show();
        }
    }
}

第三个 Activity (选项)

package com.example.robert.savemob;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;

public class Opciones extends AppCompatActivity {

    private EditText et2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.opciones);

        et2=(EditText)findViewById(R.id.et2);

        i1.putExtra("clavecorrecta", et2.getText().toString()); //I want to send it but can't acces to that i1
    }

}

最佳答案

根据您需要共享的数据,您可以在 Activity 之间发送 bundle ,使用共享首选项或实现您自己的单例类,并在所有应用程序之间共享数据。 当我需要共享需要在应用程序的任何点了解不同 Activity 的数据时,我更喜欢这样的单例:

public class AppData {

    private static AppData ourInstance = new AppData ();

    private String deviceId = null; //  Device
    private String coupon = null;   //  Coupon used to chack a valid event



    public static AppData getInstance () {
        return ourInstance;
    }

}

使用方式如下:

AppData.getInstance().deviceId = "sample device Id";

如果您需要以离散方式将信息从一个实例发送到另一个实例:

  1. 从源 Activity 来看,类似于:

    private void switchToLoginActivity (int errorCode) { Intent Intent = new Intent(this, LoginActivity.class);

    Bundle bundle = new Bundle();
    bundle.putInt (Commons.LOGIN_SHOW_MESSAGE, errorCode);
    
    intent.putExtras(bundle);
    startActivity(intent);
    overridePendingTransition(R.anim.left_to_right_in, R.anim.left_to_right_out);
    finish();
    

    }

  2. 在目标 Activity 中,您需要获取收到的数据:

    公共(public)无效onCreate( bundle 保存实例状态){ super.onCreate(savedInstanceState);

    getParametersFromIntent();
    

    }

    私有(private)无效getParametersFromIntent(){

    Bundle bundle = getIntent().getExtras();
    
    if (bundle != null) {
    
        if (bundle.containsKey(Commons.LOGIN_SHOW_MESSAGE)) {
            showMessage = bundle.getInt (Commons.LOGIN_SHOW_MESSAGE);
        }
    
    }
    

    }

希望有帮助。

关于java - 如何在 Android Studio 上传输多个 Activity 的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43439640/

相关文章:

Java:在实现各种树结构时我应该支持泛型吗?

android - 如何销毁自定义 View

android - 多个类可以接收相同的广播接收器 Intent 吗

android - 有 Intent 地运行 Android Activity

java - ORA-12705 和 ORA-00604 生产错误

Java扫描器完全绕过字符串输入

java - com.mysql.jdbc.driver 类未找到异常

android - Chrome ARC 中的谷歌地图

android - 如何从适用于 Android 的 Google Places API 获取地点详细信息?

C# Android MediaStore.ACTION_IMAGE_CAPTURE