loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
User currUser ;
currUser = MainActivity.mainMenuPrompt(theBank, UserID, password, bankView, errorLogin);
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
intent.putExtra("USER", currUser);
startActivity(intent);
}
});
我無法有意傳遞我的“currUser”變數。還有其他方法嗎?
uj5u.com熱心網友回復:
如果我們想在活動之間傳遞一個物件,我們使用Parcelable 或 Serialazable。一般來說,我們使用 Parcelabel,因為它比 Serialazable 更快。為了使用它,User 類必須實作 Parcelable 介面并提供方法的實作,然后我們創建 Parcelable 建構式并發送資料,就像我們過去使用intent.putExtra()發送的一樣方法,在其他活動中,我們使用getIntent().getParcelableExtra()方法接收資料。
用戶類
public class User implements Parcelable {
private String theBank;
private int userId;
private String password;
private String bankView;
private String errorLogin;
public User(String theBank, int userId, String password, String bankView, String errorLogin) {
this.theBank = theBank;
this.userId = userId;
this.password = password;
this.bankView = bankView;
this.errorLogin = errorLogin;
}
public String getTheBank() {
return theBank;
}
public void setTheBank(String theBank) {
this.theBank = theBank;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getBankView() {
return bankView;
}
public void setBankView(String bankView) {
this.bankView = bankView;
}
public String getErrorLogin() {
return errorLogin;
}
public void setErrorLogin(String errorLogin) {
this.errorLogin = errorLogin;
}
protected User(Parcel in) {
theBank = in.readString();
userId = in.readInt();
password = in.readString();
errorLogin = in.readString();
}
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User createFromParcel(Parcel in) {
return new User(in);
}
@Override
public User[] newArray(int size) {
return new User[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(theBank);
parcel.writeInt(userId);
parcel.writeString(password);
parcel.writeString(errorLogin);
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// User class initialization
User userObj = new User("SBI", 001, "stackOverFlow", "OpenBank", "Sorry!!");
// Passing data with key-name as user
Intent intent = new Intent(this, MainActivity2.class);
intent.putExtra("user", userObj);
startActivity(intent);
}
}
MainActivity2.java
public class MainActivity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
// Receiving the user objet using getIntent().getParcelableExtra() method
User user = getIntent().getParcelableExtra("user");
String bank = user.getTheBank();
int id = user.getUserId();
String password = user.getPassword();
String bankView = user.getBankView();
String error = user.getErrorLogin();
Toast.makeText(this, bank id password bankView error, Toast.LENGTH_SHORT).show();
}
}
uj5u.com熱心網友回復:
最好使用實時資料來保存物件。在專案中很容易配置。
android的頁面是https://developer.android.com/topic/libraries/architecture/livedata?hl=es-419
第一個你需要使用下一個庫
// Live data
implementation "androidx.annotation:annotation:$versions.annotation"
api "androidx.lifecycle:lifecycle-extensions:$versions.archComponents"
annotation : '1.0.0',
archComponents : '2.0.0',
如果您不想使用 livedata,可以使用 gson 庫將物件轉換為字串。在您需要將字串轉換為類之后
uj5u.com熱心網友回復:
易于使用的 EventBus。
將 EventBus 添加到您的專案中
implementation("org.greenrobot:eventbus:3.3.1")
創建一個類來存盤要發送的資料
public class User {
private String theBank;
private int userId;
private String password;
private String bankView;
private String errorLogin;
public User(String theBank, int userId, String password, String bankView, String errorLogin) {
this.theBank = theBank;
this.userId = userId;
this.password = password;
this.bankView = bankView;
this.errorLogin = errorLogin;
}
public String getTheBank() {
return theBank;
}
public void setTheBank(String theBank) {
this.theBank = theBank;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getBankView() {
return bankView;
}
public void setBankView(String bankView) {
this.bankView = bankView;
}
public String getErrorLogin() {
return errorLogin;
}
public void setErrorLogin(String errorLogin) {
this.errorLogin = errorLogin;
}
}
在接收資料的活動/片段中
注冊和注銷您的訂閱者
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
訊息將在此處接收
private User _user;
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(User user) {
Log.d("theBank", user.getTheBank());
Log.d("userId", user.getUserId());
Log.d("password", user.getPassword());
Log.d("bankView", user.getBankView());
Log.d("errorLogin", user.getErrorLogin());
// save user in member variable (_user),
// so you can access _user from other place in this activity or fragment
_user = user;
}
在發送資料的活動/片段中
User user = new User();
user.setTheBank = "my bank";
user.setUserId = 1;
user.setPassword = "my password";
user.setBankView = "my bank view";
user.setErrorLogin = "my error login";
EventBus.getDefault().post(user);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/419782.html
標籤:
上一篇:C 執行緒池的低性能
