2016-01-22 23 views
0

我已創建此代碼以從我的數據庫訪問用戶以進行登錄。當我在OnResponse方法內部時,我可以訪問對象'st',但是當我嘗試返回對象時,它會讓我爲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; 
    } 

} 
+0

這可能有助於http://stackoverflow.com/questions/28120029/how -can-i-return-value-from-function-onresponse-of-volley – Jiyeh

回答

0

不能從匿名內部類返回,但你可以創建內部ServerRequests一個方法,它接受user_Student作爲參數,並呼籲從onResponse內的方法。這種方法可以做任何你需要的。

+0

試過使用這個,但沒有奏效! –