در این قسمت قصد داریم ارسال اطلاعات به سرور را با هم تمرین کنیم.
ارسال اطلاعات به سرور از اهمیت بسیار بالایی برخوردار است، گاهی نیاز پیدا میکنید که اطلاعات ثبت نامی کاربر را در یک سرور ذخیره کنید و یا از عملکرد کاربر در نرم افزار خود گزارش تهیه کنید.
اگر قسمتهای قبلی را به خودی آموخته باشید این قسمت نیز برایتان سخت نخواهد بود.
یک کلاس به نام APISendingData ایجاد میکنیم و سورس زیر را در آن قرار میدهیم:
public class APISendingData {
private Context context;
public APISendingData(Context context) {
this.context = context;
}
public void signUp(JSONObject requestJsonObject, final OnSignupComplate onSignupComplate){
JsonObjectRequest request= new JsonObjectRequest(Request.Method.POST, "http://192.168.1.102/receiveData.php", requestJsonObject, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
boolean success= response.getBoolean("success");
onSignupComplate.onSignUp(success);
} catch (JSONException e) {
onSignupComplate.onSignUp(false);
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
onSignupComplate.onSignUp(false);
}
});
request.setRetryPolicy(new DefaultRetryPolicy(18000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
Volley.newRequestQueue(context).add(request);
}
public interface OnSignupComplate{
void onSignUp(boolean success);
}
}
سطر 3: متغیری برای Context ایجاد کردیم.
سطر 5: یک سازنده ایجاد کردیم.
سطر 9: متد signUp را برای عضویت کاربر در سمت سرور ایجاد میکنیم. ورودیهای این متد JSONObject و interfaceای به نام OnSignupComplate میباشد.
سطر 10: در این سطر یک JsonObjectRequest ایجاد کردیم و نام آن را request قرار دادیم. ورودی های JsonObjectRequest عبارتند از:
ورودی اول: متد POST
ورودی دوم: آدرس سمت سرور،
ورودی سوم: اطلاعات ارسالی به سمت سرور
ورودی چهارم: Response.Listener که اطلاعات دریافتی از سمت سرور را به ما باز میگرداند و به شرط صحیح بودن عملیات آنها را وارد متد onResponse میکند.
ورودی پنجم: Response.ErrorListener که در صورت شکست عملیات صدا زده میشود.
سطر 14: رشته jsonای که از سمت سرور دریافت شده در اینجا باز شده و از آن آیتم success تفسیر میشود و در متغیری با همین نام ذخیره میشود. و در نهایت برای interface این کلاس یعنی OnSignupComplate و متد onSignUp ارسال میشود.
سطر 16: اگر عملیات مرحله قبل موفقیت آمیز نبود مقدار false به onSignUp ارسال میشود.
سطر 21: در صورت شکست اطلاعات در این بخش مقدار false به onSignUp ارسال میگردد.
سطر 28: یک request ایجاد میکنیم تا تنظیمات ارسال اطلاعات برای سرور را انجام دهیم. با setRetryPolicy میخواهیم تنظیماتی را اعمال کنیم که از خطاهای احتمالی جلوگیری کنیم. درون setRetryPolicy یک شی از نوع DefaultRetryPolicy قرار میدهیم که سه ورودی دارد:
ورودی اول میزان زمان انتظار برای دریافت نتیجه از سرور است که بدلیل کند بودن اینترنت در ایران این زمان را روی 18000 تنظیم میکنیم که معادل 18 ثانیه است.
ورودی دوم مشخص میکند که در صورت شکست اطلاعات هیچ عملی انجام ندهد که این مقدار را روی پیش فرض قرار میدهیم.
ورودی سوم زمان تلاش مجدد بعد از TimeOut را مشخص میکند که در اینجا این مقدار را نیز بر روی پیش فرض قرار میدهیم.
سطر 29: عملیات را با کمک volley انجام میدهیم.
در سمت سرور یک سورس ساده به زبان PHP مانند زیر ایجاد میکنیم:
<?php
$json= file_get_contents('php://input');
file_put_contents("json.txt", $json);
echo json_encode(array('success' => true));
?>
در سطر دوم اطلاعات به صورت json دریافت میشوند و در سطر سوم این اطلاعات در یک فایل به نام json.txt ذخیره میشوند.
در سطر چهارم با json_encode یک رشته json به صورت {"success":true}
نمایش داده میشود.
در لایه نمایش اصلی پروژه خود یک کلید با شناسه btn ایجاد میکنیم. کلید btn را در کلاس MainActivity مانند زیر مسئول ارسال اطلاعات به سرور میکنیم:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
APISendingData apiSendingData= new APISendingData(MainActivity.this);
JSONObject requestJsonObject= new JSONObject();
try {
requestJsonObject.put("name", "alireza");
requestJsonObject.put("last_name", "mohseni");
requestJsonObject.put("user_name", "alireza123");
requestJsonObject.put("password", "admin123");
apiSendingData.signUp(requestJsonObject, new APISendingData.OnSignupComplate() {
@Override
public void onSignUp(boolean success) {
if(success == true){
Toast.makeText(MainActivity.this, "اطلاعات با موفقیت ارسال شد", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "اطلاعات ارسال نشد", Toast.LENGTH_SHORT).show();
}
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
سطر 10: یک شی از روی APISendingData به نام apiSendingData ایجاد میکنیم.
سطر 11: یک شی از روی JSONObject به نام requestJsonObject ایجاد میکنیم.
سطر 13 تا 16: کلیه آیتمهای درون json را به شی requestJsonObject نسبت میدهیم.
سطر 17: کلیه اطلاعات requestJsonObject را به کمک apiSendingData و متد signUp ارسال میکنیم.
سطرهای 20 تا 24: در صورت موفق بودن عملیات و دریافت مقدار true یک پیام مبنی بر موفقیت آمیز بودن عملیات و در غیر این صورت پیام برای اعلام شکست عملیات چاپ میشود.
امیدوارم این آموزش برای شما مفید بوده باشد.