繁体   English   中英

如何等待 function 完成 Java?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM