ذخیره اطلاعات از اندروید در mysql

درس بعدی ||||| درس قبلی

برای این مطلب نیاز است ابتدا مطالب مربوط به لینک های زیر را مطالعه کنید:

ثبت کاربر در MySQL بصورت شی گرا

اتصال به بانک اطلاعاتی و درج رکورد جدید

پس از مطالعه مطالب فوق باید در اندروید استودیو کتابخانه Volley را به برنامه اضافه کنیم. بنابراین نیاز است به نحوه کار با کتابخانه Volley هم آشنا باشیم. لینک زیر را برای مطالعه می توانید استفاده کنید:

آموزش کار با کتابخانه Volley به همراه مثال کاربردی

یک کلاس جدید به نام Constants می سازیم و آدرس فایل php ساخته شده را در آن قرار می دهیم. کد آن بصورت زیر است:

public class Constants
{
    public static final String Root_URL="http://10.0.0.34:81/PHPpost/v1/registerUser.php";
}

در مرحله بعدی سطح دسترسی (permission) در فایل مانیفست (Manifest.xml) را نباید فراموش کنیم:

<uses-permission android:name="android.permission.INTERNET"/>

حال نوبت به طراحی فایل activity_main.xml میرسد. کد آن در زیر آمده است:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout"
        android:orientation="vertical"
        android:layout_centerVertical="true">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="userName"/>
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Enter user name"
            android:inputType="textPersonName"
            android:id="@+id/edt_username"
            />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Password"/>
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Enter user name"
            android:inputType="textPassword"
            android:id="@+id/edt_password"
            />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="email"/>
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Enter user name"
            android:inputType="textEmailAddress"
            android:id="@+id/edt_email"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Save"
            android:id="@+id/btn"
            android:layout_gravity="center"/>
    </LinearLayout>

</RelativeLayout>

حال باید در عمومی سه editText و یک دکمه (Button) تعریف شوند:

 EditText edtUsername,edtPassword,edtEmail;
    Button btn;

در متد onCreate کد زیر نوشته می شود:

 edtUsername=findViewById(R.id.edt_username);
        edtPassword=findViewById(R.id.edt_password);
        edtEmail=findViewById(R.id.edt_email);
        btn=findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                registerUser();
            }
        });

متد registerUser در ادامه و خارج از onCreate و داخل کلاس MainActivity ساخته می شود:

 private void registerUser() {
        final String email=edtEmail.getText().toString().trim();
        final String username=edtUsername.getText().toString().trim();
        final String password=edtPassword.getText().toString().trim();
        //Toast.makeText(this, "aaa", Toast.LENGTH_SHORT).show();
        StringRequest stringRequest=new StringRequest(Request.Method.POST, Constants.Root_URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jsonObject=new JSONObject(response);
                    Toast.makeText(MainActivity.this, jsonObject.getString("message")+"aaa", Toast.LENGTH_SHORT).show();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
               // Toast.makeText(MainActivity.this, "error:"+error.getMessage(), Toast.LENGTH_SHORT).show();
                Log.e("TAG","error: "+error.getMessage());

            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {

                Map<String,String> params=new HashMap<>();
                params.put("username",username);
                params.put("email",email);
                params.put("password",password);
                return params;
            }
        };
        RequestQueue requestQueue= Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);


    }

همانطوریکه مشاهده می شود کد فوق دارای چند مرحله است: در مرحله اول مقادیر وارد شده در کادرهای متنی در متغیرهای رشته ای قرار می گیرند:

final String email=edtEmail.getText().toString().trim();
final String username=edtUsername.getText().toString().trim();
final String password=edtPassword.getText().toString().trim();

به کمک کتابخانه Volley درخواست با کلاس StringRequest داده می شود که شامل دو رویداد دریافت پاسخ onResponse و دریافت خطا onErrorمی باشد:

 StringRequest stringRequest=new StringRequest(Request.Method.POST, Constants.Root_URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jsonObject=new JSONObject(response);
                    Toast.makeText(MainActivity.this, jsonObject.getString("message")+"aaa", Toast.LENGTH_SHORT).show();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
               // Toast.makeText(MainActivity.this, "error:"+error.getMessage(), Toast.LENGTH_SHORT).show();
                Log.e("TAG","error: "+error.getMessage());

            }
        })

در onResponse به کمک شی از کلاس JSONObject پاسخ درخواست به سرور دریافت می شود و به کمک متد ErrorListener زمانی اجرا می شود که در دریافت پاسخ خطایی رخ دهد.

جهت ارسال پارامترها به سرور نیازداریم که از متد getParams استفاده کنیم. کد آن بصورت زیر آمده است:

protected Map<String, String> getParams() throws AuthFailureError {

    Map<String,String> params=new HashMap<>();
    params.put("username",username);
    params.put("email",email);
    params.put("password",password);
    return params;
}

در انتها نیز باید درخواست تکمیل شده و به صف درخواست ها اضافه شود:

 RequestQueue requestQueue= Volley.newRequestQueue(this);
 requestQueue.add(stringRequest);

برنامه را اجرا بگیرید. باید بتوانید رکورد جدیدی ثبت کنید.