[英]How can I wait a function to finish in Java?
我正在 Java 中开发一个 Android 应用程序,该应用程序需要从远程数据库加载一些数据。 为此,我有一个名为getCards()
的 function 读取数据库并将一些信息加载到SharedPreferences
中。 在我的主要 function 中,我想读取写在SharedPreferences
中的那些信息并将它们写在TextView
上。 问题是,当我尝试从SharedPreferences
获取这些信息时,它们似乎是 null,因为线程不会等待“getCards()”完成。 如果我 go 进入另一个活动,然后回到主活动,数据将被放入,但是当我第一次启动活动时,从SharedPreferences
读取的速度太快了。 有什么建议么? 我试过用 try/catch 包围的 wait(100),但 wapp 会崩溃。
这是主要活动的代码。
getCards();
ccnr = pref.getString("ccnumber",null);
ccfn = pref.getString("fullname",null);
if(ccfn == null || ccnr ==null){
tvccnumber.setText("No card was added!");
tvccfullname.setText("No card was added!");
}else{
tvccnumber.setText(ccnr);
tvccfullname.setText(ccfn);
}
这是getCards()
的一部分,它在SharedPreferences
中加载信息。
public void getCards(){
StringRequest stringRequest = new StringRequest(Request.Method.POST, Constants.GETC_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if(!response.contains("Error!")){
JSONArray jsonArray;
JSONObject jsonObject;
String ccnumber;
String fullname;
String ccsignature;
try {
jsonArray = new JSONArray(response);
jsonObject = jsonArray.getJSONObject(0);
ccnumber = jsonObject.getString("ccNumber");
ccsignature = jsonObject.getString("ccSign");
fullname = jsonObject.getString("fullName");
editor.putString("ccnumber",ccnumber);
editor.putString("ccsignature",ccsignature);
editor.putString("fullname",fullname);
editor.commit();
} catch (JSONException e) {
e.printStackTrace();
}
}else{
Toast.makeText(FinalUserSpace.this, response, Toast.LENGTH_SHORT).show();
}
}
}, new Response.ErrorListener() {
您可以使用 java object 锁定直到函数返回。
private Object lock = new Object();
public void getcards(){
StringRequest stringRequest = new StringRequest(Request.Method.POST, Constants.GETC_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if(!response.contains("Error!")){
JSONArray jsonArray;
JSONObject jsonObject;
String ccnumber;
String fullname;
String ccsignature;
try {
jsonArray = new JSONArray(response);
jsonObject = jsonArray.getJSONObject(0);
ccnumber = jsonObject.getString("ccNumber");
ccsignature = jsonObject.getString("ccSign");
fullname = jsonObject.getString("fullName");
editor.putString("ccnumber",ccnumber);
editor.putString("ccsignature",ccsignature);
editor.putString("fullname",fullname);
editor.commit();
} catch (JSONException e) {
e.printStackTrace();
}
}else{
Toast.makeText(FinalUserSpace.this, response, Toast.LENGTH_SHORT).show();
}
lock.notifyAll();
}
}, new Response.ErrorListener() {
getcards();
lock.wait();
ccnr = pref.getString("ccnumber",null);
ccfn = pref.getString("fullname",null);
if(ccfn == null || ccnr ==null){
tvccnumber.setText("No card was added!");
tvccfullname.setText("No card was added!");
}else{
tvccnumber.setText(ccnr);
tvccfullname.setText(ccfn);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.