عدم اجرای کد در کتابخانه والی در متد Response
	
	
		سلام به شما دوستان عزیز
من قطعه کدی نوشتم که به سرور وصل بشه و یه سری داده رو ببره مثل username, password اونها چک میکنه اگر مساوی بود که هست اطلاعات رو برمی گردونه .
که داره درست کار می کنه .تست کردم 
مشکلی که هست وقتی در متد Responce والی میاد انگار که نمیاد ولی میاد من یه log گذاشتم که اون رو نمایش میده اطلاعات درسته .
ولی در کنترل رو ی صفحه null نشون میده ...
من کاملا گیج شدم  .
کدها رو میذارم 
  public String logInAdminToServer(JSONObject jsonObject) {
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST,
                "http://192.168.43.206/project-server/Admin.php?action=LogInAdmin", jsonObject,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            firstName = response.getString("AdminFirstName");
                            lastName = response.getString("AdminLastName");
                            Log.i("Error", firstName + lastName);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.i("Error", error.toString());
                    }
                });
        Volley.newRequestQueue(G.context).add(request);
        return firstName + "," + lastName;
    }
 log رو نشون میده یعنی اطلاعات رو درست می گیره ولی در زمان اجرا روی صفحه من در تکس ویو به جای نام و نام خانوادگی که گرفته null, nullدارم 
فکر کنم دلیل اون delay در volley هست .اینترفیس هم گذاشتم حل نشد ...
کمک کنید لطفا
	 
	
	
	
		نقل قول: عدم اجرای کد در کتابخانه والی در متد Response
	
	
		به نظر میاد درک صحیحی از برنامه نویسی Asynchronous ندارید، متد شما در یک آن اجرا میشه و به return میرسه، ولی درخواست دریافت اطلاعات از سرور با لحضاتی تاخیر دریافت میشه که کاملا طبیعی هست، راه حل های زیادی برای حل این مسئله هست، برای نمونه:
  public void logInAdminToServer(JSONObject jsonObject, TextView myTextView) {
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST,
                "http://192.168.43.206/project-server/Admin.php?action=LogInAdmin", jsonObject,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            firstName = response.getString("AdminFirstName");
                            lastName = response.getString("AdminLastName");
                            Log.i("Error", firstName + lastName);
myTextView.setText(firstName + "," + lastName);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.i("Error", error.toString());
                    }
                });
        Volley.newRequestQueue(G.context).add(request);
    }
 
فراخوانی: logInAdminToServer(myJson , myTextView);
 
	 
	
	
	
		نقل قول: عدم اجرای کد در کتابخانه والی در متد Response
	
	
		سلام وممنونم من این کد که شما فرمودین رو تغییر دادم خطا دارم 
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.parisa.myfinallproject.ApiService.logI  nAdminToServer(org.json.JSONObject, android.widget.EditText)' on a null object reference
                      at com.example.parisa.myfinallproject.LoginActivity.l  ogInAdmin(LoginActivity.java:58)
و اینکه اگر ممکنه راه کارهای دیگه ای بهم بگین جون من باید این رو در کلاس های بذارم که مربوط به model و pressenter هست و من باید پترن ها رو هم رعایت کنم .
اگر راه دیگه ای دارید بهم بگین که من زودتر این مسئله رو حل کنم ...متشکرم
	 
	
	
	
		نقل قول: عدم اجرای کد در کتابخانه والی در متد Response
	
	
		سلام من این کد روهم نوشتم ولی جوابی که میده خیلی دیره و به درد نمی خوره 
 public void logInAdminToServer(JSONObject jsonObject, final VolleyCallback callback) {
        JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST,
                "http://192.168.43.206/project-server/Admin.php?action=LogInAdmin", jsonObject,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        if (response != null) {
                            try {
                                Log.i("Error", response.getString("AdminFirstName") + response.getString("AdminLastName"));
                                callback.OnSuccess(response.getString("AdminFirstN  ame") + "," + response.getString("AdminLastName"));
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.i("Error", error.toString());
                    }
                });
        request.setRetryPolicy(new DefaultRetryPolicy(5000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        Volley.newRequestQueue(G.context).add(request);
    }
    public interface VolleyCallback {
        void OnSuccess(String result);
    }
 public void logInAdmin() {
        try {
            object.put("AdminUserName", adminUserName);
            object.put("AdminPassword", adminPassword);
        } catch (JSONException ex) {
            ex.printStackTrace();
        }
        //
        //basic login operation
        //
        thread = new Thread(new Runnable() {
            @Override
            public void run() {
                apiService.logInAdminToServer(object, new ApiService.VolleyCallback() {
                    @Override
                    public void OnSuccess(String result) {
                        if (result != null) {
                            String str[] = result.split(",");
                            adminFirstName = str[0];
                            adminLastName = str[1];
                        }
                    }
                });
            }
        });
        thread.start();
    }
	 
	
	
	
		نقل قول: عدم اجرای کد در کتابخانه والی در متد Response
	
	
	
	
	
		نقل قول: عدم اجرای کد در کتابخانه والی در متد Response
	
	
		سلام دوستان .ممنونم 
من فیلم آموزشی نگاه کردم سایت ها رو هم مطالعه کردم . ولی مسئله ای که من دارم چیز دیگری هست اینه که من اطلاعات رو از سمت سرور میگیرم . ولی تا بگیرم دیر میشه و دیگه کنترلی که در صفحه نمایش هست مقدار گرفته 
برای اینکه من این زمان رو همزمان کنم و یا یه جوری کنترل کنم باید چه کار کنم ؟؟؟
یه لینک مفید هم اگر تونستید برام بزارید الان دو روزه هر چیزی رو امتحان کردم ....نشد
ممنونم
	 
	
	
	
		نقل قول: عدم اجرای کد در کتابخانه والی در متد Response
	
	
		
	نقل قول:
	
		
		
			 ولی مسئله ای که من دارم چیز دیگری هست اینه که من اطلاعات رو از سمت سرور میگیرم . ولی تا بگیرم دیر میشه و دیگه کنترلی که در صفحه نمایش هست مقدار گرفته 
			
		
	 
 متوجه منظورتون نشدم یه ذره واضح تر بگید
خب شرط بزارید تا زمانی که اطلاعات از سرور نرسیده کنترل رو نمایش نده !
متد onresponse زمانی اجرا میشه که اطلاعات از سرور رسیده میتونی کنترل را hide کنی و درون متد onresponse مجدد نمایش بدی اون موقع تا زمانی که اطلاعات نرسیده کنترل نمایش داده نمیشه که مقدار دهی هم بشه
	 
	
	
	
		نقل قول: عدم اجرای کد در کتابخانه والی در متد Response
	
	
		ممنونم . اینکه من داخل onresponse از کنترل هااستفاده کنم کار درستیه؟؟؟
	 
	
	
	
		نقل قول: عدم اجرای کد در کتابخانه والی در متد Response
	
	
		دوست عزیز ممنون از راهنمایی شما ولی فرض می کنیم من می خوام یه متغییر رو در  
response
مقدار دهی کنم بعد در کلاسهای دیگه با اون کار کنم ....اصلا کار بهم میریزه که !!! شما یه نمونه کدی چیزی نداری به من بدین ببینم شما  چه طور کار میکنید ؟؟؟
	 
	
	
	
		نقل قول: عدم اجرای کد در کتابخانه والی در متد Response
	
	
		
	نقل قول:
	
		
		
			
				نوشته شده توسط 
CodeforLife
				
			 
			دوست عزیز ممنون از راهنمایی شما ولی فرض می کنیم من می خوام یه متغییر رو در  
response
مقدار دهی کنم بعد در کلاسهای دیگه با اون کار کنم ....اصلا کار بهم میریزه که !!! شما یه نمونه کدی چیزی نداری به من بدین ببینم شما  چه طور کار میکنید ؟؟؟
			
		
	 
 منظورتون از اینکه کار بهم میریزه چیه ؟ شما باید عملیاتی که بعد از دریافت نتیجه ی سرور میخواهید انجام بشه رو حتما داخل متد onResponse بنویسید
شما حتی یکبار به خودتون زحمت ندادی لینکی که دادم رو کامل مطالعه کنید و اگه مطالعه میکردید چنین سوالهای پیش پا افتاده و تکراری رو مطرح نمیکردید