簡體   English   中英

如何返回匿名內部類內部的Object?

[英]How to return Object which is inside anonymous inner class?

我已創建此代碼來從數據庫訪問用戶以用於登錄。 當我在OnResponse方法中時,可以訪問對象“ st”,但是當我嘗試返回return對象時,它為我提供了null。 另外,當我嘗試在返回之前訪問此st對象時,它給出了NullPointerException。 確切的問題是什么?

 public class ServerRequests {

    ProgressDialog progressDialog;
    public static user_Student st;
    public static final int CONNECTION_TIMEOUT = 1000 * 15;
    public static final String SERVER_ADDRESS = "http://prem-pc:8989/";
    Context ct;

    public ServerRequests(Context context) {
        ct = context;
        progressDialog = new ProgressDialog(context);
        progressDialog.setCancelable(false);
        progressDialog.setTitle("Processing");
        progressDialog.setMessage("Please Wait....");

    }

    public ServerRequests() {

    }

    public user_Student fetchUserDataInBackground(user_Student user) {
        progressDialog.show();
        Toast.makeText(ct, "Data in background: ", Toast.LENGTH_SHORT).show();
        user_Student ust = doInBackground(user);
        progressDialog.dismiss();
        return ust;
    }

    public user_Student doInBackground(user_Student user) {

        String URL = SERVER_ADDRESS + "connect.php?prn=" + user.prn + "&password=" + user.password;

        RequestQueue req = Volley.newRequestQueue(ct);
        Toast.makeText(ct, "Do in Background", Toast.LENGTH_SHORT).show();
        JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET, URL, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject jObject) {

                try {
                    // Parsing json object response
                    // response will be a json object

                    if (jObject.length() == 0) {
                        st = null;
                        Toast.makeText(ct, "Null JSON Object", Toast.LENGTH_SHORT).show();
                    } else {

                        String prn = jObject.getString("prn");
                        String fname = jObject.getString("fname");
                        String mname = jObject.getString("mname");
                        String lname = jObject.getString("lname");
                        String clas = jObject.getString("clas");
                        String dept = jObject.getString("dept");
                        String batch = jObject.getString("batch");
                        String scontact = jObject.getString("scontact");
                        String pcontact = jObject.getString("pcontact");
                        String email = jObject.getString("email");
                        String password = jObject.getString("password");
                        String dob = jObject.getString("dob");

                        st = new user_Student(prn, fname, mname, lname, clas, dept, batch, scontact, pcontact, email, password, dob);
                        Toast.makeText(ct, "JSON Object:" + st.fname, Toast.LENGTH_SHORT).show();
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                    Toast.makeText(ct, "Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
                }
            }

        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(ct, error.getMessage(), Toast.LENGTH_SHORT).show();  // hide the progress dialog

            }
        });

        req.add(jsonObjReq);

        //Toast.makeText(ct,"DO in back End"+st.fname,Toast.LENGTH_SHORT).show();
        return st;
    }

}

您不能從匿名內部類返回,但是可以在ServerRequests中創建一個將user_Student作為參數的方法,然后從onResponse調用該方法。 然后,此方法可以執行您需要的任何操作。

您必須使用AsyncTask來執行功能doInBackground(user_Student用戶)

您可以查看這篇文章以了解AsyncTask如何在Android中正確使用AsyncTask

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM