从Java中的另一个类设置和获取变量的值

时间:2018-06-21 15:32:21

标签: java android

我创建了以下课程:

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;
}

然后在一个活动中,我想从两个输入中设置UsernamePassword的值;所以我喜欢这样:

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());

}

但是应用程序崩溃了!!如何设置和获取位于不同类中的某些变量的值?

4 个答案:

答案 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。您打算如何处理这些价值观? 如果要在ActivityFragment中使用它们,则必须将它们设置为私有类属性。