我的应用程序上有一个活动,用户可以在其中更新存储在远程数据库中的注册信息。按下更新按钮时,数据库中的信息正在更新,但静态变量不会更改。这是我的代码,提前感谢任何帮助!
btUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String first_name = First_name.getText().toString();
final String last_name = Last_name.getText().toString();
final String email = Email.getText().toString();
Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonResponse = new JSONObject(response);
boolean success = jsonResponse.getBoolean("success");
if (success) {
LoginActivity.first_name = jsonResponse.getString("first_name");
LoginActivity.last_name = jsonResponse.getString("last_name");
LoginActivity.email_address = jsonResponse.getString("email");
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(UpdateInfoActivity.this);
builder.setMessage("Submission Failed")
.setNegativeButton("Retry", null)
.create()
.show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
UpdateInfoRequest updateInfoRequest = new UpdateInfoRequest(first_name, last_name, email, userID, responseListener);
RequestQueue queue = Volley.newRequestQueue(UpdateInfoActivity.this);
queue.add(updateInfoRequest);
Intent intent = new Intent(UpdateInfoActivity.this, MainActivity.class);
UpdateInfoActivity.this.startActivity(intent);
}
});
答案 0 :(得分:0)
将您的代码更改为此
if (success) {
LoginActivity.first_name = first_name;
LoginActivity.last_name = last_name;
LoginActivity.email_address = email;
}
如果您想拥有全局用户个人资料,我就不会使用这样的静态变量
class User {
private static User user = null;
public String firstName = "";
private User() {}
public static synchronized User getInstance() {
if (user == null) user = new User();
return user;
}
}
从项目调用中的任何地方检索数据
String name = User.getInstance().firstName;
要修改数据,请执行此操作
User.getInstance().firstName = UserName;
答案 1 :(得分:0)
首先要了解静态变量是由类的所有对象和方法共享的。
所以我们只有一个静态变量实例。
从其他类更新静态变量的方法 -
1.通过对象。
2.通过班级名称。
附上代码示例。
class A{
static int val;
public A(){val=0; }
//....
}
class B{
A obj= new A();
public void updateStatic(){
obj.val=10; // updates values through object to 10
A.val=100; //updates values through class name to 100
}
//..
}
希望它有助于
答案 2 :(得分:0)
但静态变量没有变化。
应该......你告诉代码这样做
if (success) {
LoginActivity.first_name = jsonResponse.getString("first_name");
LoginActivity.last_name = jsonResponse.getString("last_name");
LoginActivity.email_address = jsonResponse.getString("email");
}
只想提一下......
1)你更新了一个字符串,而不是你问题中的任何TextView或EditText,所以如果你希望看到一个&#34;视觉变化&#34;在您的应用中,然后不会,除非您致电setText
,否则不会发生任何事情。
2)该代码包含在try-catch中,并且可能出错,因此请检查日志JSONException
。如果这些密钥没有从服务器发回,那么肯定,他们不会更新。例如,JSON仅为{"success": true }
尽管如此,SharedPrefences
在很大程度上应优先于static
变量。
答案 3 :(得分:0)
在我看来,使用静态变量在活动之间传输数据不是更好的方法。这是不好的做法。使用意图传输数据或将数据保存在存储介质中并从中访问将是更好的解决方案。