我创建了以下课程:
public class Contact {
public String Username = null;
public String Password = null;
public void setUsername(String username) {
Username = username;
}
public void setPassword(String password) {
Password = password;
}
public String getUsername() {
return Username;
}
public String getPassword() {
return Password;
}
public Contact(String username, String password) {
Username = username;
Password = password;
}
然后在一个活动中,我想从两个输入中设置Username
和Password
的值;所以我喜欢这样:
public void LoginToAccount(View v)
{
EditText inputUsername = (EditText)findViewById(R.id.inputUsername);
EditText inputPassword = (EditText)findViewById(R.id.inputPassword);
String Username = inputUsername.getText().toString();
String Password = inputPassword.getText().toString();
Contact UserData = null
UserData.setUsername(Username);
UserData.Password(Password)
}
在另一项活动中;我想读取这两个变量的值,并将其显示在TextViews上,如下所示:
public void ImportUserData(View v)
{
TextView txtUsername = (TextView)findViewById(R.id.txtUsername);
TextView txtPassword = (TextView)findViewById(R.id.txtPassword);
Contact UserData = null;
txtUsername.setText(UserData.getUsername());
txtPassword.setText(UserData.getPassword());
}
但是应用程序崩溃了!!如何设置和获取位于不同类中的某些变量的值?
答案 0 :(得分:3)
首先,在您的LoginToAccount代码中:
Contact userData = null
userData .setUsername(username);
userData .password(password)
将其更改为:
Contact userData = new Contact(); //You need to create a "new" instance
userData .setUserName(username);
userData .setPassword(password); //Missing "set" and ";"
现在,如果要读取其他活动中的值,则有两个选择:
1)将对象“ UserData”发送到下一个活动:
您需要Contact类来实现Parcelable并添加如下代码:
public class Contact implements Parcelable {
public String username = null;
public String password = null;
public Alumno( Parcel in ) {
username= in.readString();
password = in.readString();
}
public void writeToParcel(Parcel out, int flags ) {
out.writeString(this.username);
out.writeString(this.password);
}
public static final Parcelable.Creator<Contact> CREATOR =
new Parcelable.Creator<Creator>() {
public Creator createFromParcel( Parcel in ) {
return new Contact( in );
}
public Contact[] newArray( int size ) {
return new Contact[size];
}
};
public int describeContents() {
return 0;
}
//Your original code here (getters, setters and constructor)
然后,当您拨打下一个活动时:
Intent intent = new Intent(getApplicationContext(), YourNextActivity.class);
intent.putExtra("thecontact",userData);
startActivity(intent);
在YourNextActivity中,为了“接收”刚刚发送的对象:
Parcelable p = getIntent().getExtras().getParcelable("thecontact");
if (p != null) {
Contact userData = (Contact) p;
txtUsername.setText(userData.getUsername());
txtPassword.setText(userData.getPassword());
}
2)发送值,但不发送对象。 在这里,您不需要Parcelable,只需将每个值发送到您的下一个活动
Intent intent = new Intent(getApplicationContext(), YourNextActivity.class);
intent.putExtra("name",inputUsername.getText().toString());
intent.putExtra("pass",inputPassword.getText().toString());
startActivity(intent);
在YourNextActivity中,为了“接收”您刚刚发送的值:
Bundle extras = getIntent().getExtras();
if (extras != null) {
txtUsername.setText(extras.getString("name"));
txtPassword.setText(extras.getString("pass"));
}
如果您仍然需要帮助,请发送两个活动的完整代码。
答案 1 :(得分:1)
此外,在此活动中:
public void ImportUserData(View v)
{
TextView txtUsername = (TextView)findViewById(R.id.txtUsername);
TextView txtPassword = (TextView)findViewById(R.id.txtPassword);
Contact UserData = null;
txtUsername.setText(UserData.getUsername());
txtPassword.setText(UserData.getPassword());
}
您将userData设置为null,然后尝试从中读取,这将引发null指针异常。
您需要创建一个Contact对象并从中读取。
答案 2 :(得分:1)
您必须创建该类的对象,然后设置值:-
function applier(initialFunction) {
return function() {
alert('apllied part before main logic');
var result = initialFunction.apply(this, arguments);
alert('apllied part after main logic');
};
}
func1 = function() {
alert('func1, logic from main function');
}
func2 = function() {
alert('func2, logic from main function');
}
var newFunc1 = applier(func1);
var newFunc2 = applier(func2);
newFunc1();
newFunc2();
然后,通过意图将对象传递给下一个活动,然后获取其值。
答案 3 :(得分:0)
您无法获取或设置null
的属性,因为它根本没有任何属性,并且会导致NullPointerException
。
相反,您必须先初始化对象,然后获取或设置任何属性值。
有两个基本选项:
(1)使用默认构造函数初始化变量,然后设置/获取值:
String username = inputUsername.getText().toString();
String password = inputPassword.getText().toString();
Contact userData = new Contact();
userData.setUsername(username);
userData.setPassword(password);
(2)利用重载的构造函数(您已经实现了):
String username = inputUsername.getText().toString();
String password = inputPassword.getText().toString();
Contact userData = new Contact(username, password);
那可以解决您的崩溃问题。至少您的示例代码中的那些。
此代码中的另一个问题是在不返回任何内容的方法中声明Contact userData
。您打算如何处理这些价值观?
如果要在Activity
或Fragment
中使用它们,则必须将它们设置为私有类属性。