[英]transfer multi data from multiple activities to one activity AndroidStudio?
[英]How to transfer data from multiple activities on AndroidStudio?
我是Android和Java的新手,我正在嘗試開發需要多項活動的應用程序。
第一個活動是主菜單,第二個活動是警報,第三個活動用於設置。
問題是我想從第一個活動開始第二個活動,但是我想檢查密碼以停止第三個活動的警報。
我已經檢查了許多教程,似乎我需要將第三個活動中的數據發送到第二個活動,但是當我在第一個活動中創建第二個活動時,我不知道如何獲取該“ Intend”對象來發送數據,並且如果我創建另一個引用相同的引用,則會崩潰。
我已經嘗試將第二個意圖從第一個活動發送到第三個活動,但是我不知道如何接收它,因為它既不是String也不是Int,而且我不能做“捆綁銷售”。 getString”。
如您所見,我有點困惑,它可能比我想的要容易。 我將感謝您的任何答復。
第一次活動(主要):
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);
}
}
第二次活動(Alarma)
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();
}
}
}
第三次活動(Opciones)
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
}
}
根據需要共享的數據,您可以在活動之間發送捆綁包,使用共享的首選項,或者使用所有應用程序之間共享的數據來實現自己的單例類。 當我需要共享需要在應用程序的任何位置進行不同活動的數據時,我更喜歡這樣的單例:
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";
如果您需要以離散方式將信息從一個實例發送到另一個實例:
在源活動中,如下所示:
私人無效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();
}
在目標活動中,您需要獲取接收到的數據:
公共無效onCreate(捆綁保存的InstanceState){super.onCreate(savedInstanceState);
getParametersFromIntent();
}
私人void getParametersFromIntent(){
Bundle bundle = getIntent().getExtras(); if (bundle != null) { if (bundle.containsKey(Commons.LOGIN_SHOW_MESSAGE)) { showMessage = bundle.getInt (Commons.LOGIN_SHOW_MESSAGE); } }
}
希望能幫助到你。
你可以這樣做。 在您的Opciones活動中,聲明一個靜態String變量。 將EditText數據存儲到字符串中,然后可以從第二個活動中引用該字符串。
第三活動
public static String claveCorrecta = "";
claveCorrecta = et2.getText.toString();
現在,在第二個活動中,您可以通過以下方式引用字符串
Opciones.claveCorrecta
您可以將基本類型以及POJO
對象發送到其他活動。 要發送任何POJO
,必須實現Serializable
或Parcellable
。
例如,要將數據發送到Second Activity,請執行以下操作:
Intent intent = new Intent(context, SingleFragmentHostActivity.class);
Bundle extras = new Bundle();
extras.putString("key_title", "Title");
extras.putSerializable("pojo", new Car()); // Car class must implemente Serializable
intent.putExtras(extras);
startActivity(intent);
如果要從第二個活動中獲取一些數據,則必須使用startActiivtyForResult
而不是startActivity
如下所示:
public final static int REQUEST_CODE = 0001; // integer of your choice
startActivityForResult(intent, REQUEST_CODE);
然后,您必須在名為startActivityForResult
的活動中重寫onActivityResult
方法。 像這樣:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_CODE) {
if(resultCode == RESULT_OK) {
if(data != null && data.getExtras() != null) {
data.getExtras().getBoolean("key_is_success", false)
}
} else if(resultCoee == RESULT_CANEL){
// Your logic in case user cancelled the operation or something.
}
}
}
例如,您要從“第二個活動”中將一個布爾值發送回“第一個活動”。 您可以執行以下操作:
Intent intent = new Intent();
intent.putExtra("key_is_success", true);
setResult(RESULT_OK, intent);
finish();
如果要將某些數據從“第三活動”發送回“第二活動”,並且“第二活動”會將其發送回“第一活動”,則采用相同的邏輯。
從“第二個活動”啟動第三個活動時,也可以使用Intent.FLAG_ACTIVITY_FORWARD_RESULT
。 根據文檔:
如果已設置並且此意圖已用於從現有活動啟動新活動,則現有活動的回復目標將轉移到新活動。 這樣,新活動可以調用setResult(int)並將結果發送回原始活動的回復目標。
閱讀此鏈接以獲取更多詳細信息: https : //developer.android.com/training/basics/intents/result.html
希望對您有所幫助。 干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.