Volley庫 注冊、登錄和注銷含代碼

Volley庫 注冊、登錄和注銷

在本教程中,我們將使用Volley庫和JSON創建基本的用戶注冊和登錄模塊。愛掏網 - it200.comVolley是一個提供網絡連接功能的HTTP庫。愛掏網 - it200.com

使用Volley庫的優勢如下:

  • 更簡單和更快的請求管理。愛掏網 - it200.com
  • 提供高效的網絡管理。愛掏網 - it200.com

在服務器端數據處理方面,我們使用PHP和XAMPP服務器以及MySQL進行數據操作。愛掏網 - it200.com

在創建Android應用程序模塊之前,讓我們先在PHP和MySQL中創建服務器端數據處理API代碼,用于注冊和登錄。愛掏網 - it200.com

1. 使用名稱 registerlogin 創建一個數據庫,并在其中創建名為 users 的表,該表包含以下字段。愛掏網 - it200.com

2. 使用PHP和數據庫內的以下連接建立代碼,位于 C:\xampp\htdocs\androidphpmysql目錄愛掏網 - it200.com

androidphpmysql (您的項目位置)目錄中,創建一個 connection.php 文件并編寫以下代碼。愛掏網 - it200.com

connection.php

<?php  
servername = "localhost";username = "root";  
password = "";database = "registerlogin";  
conn = new mysqli(servername, username,password, database);  
if (conn->connect_error) {  
    die("Connection failed: " . $conn->connect_error);  
}  
?>  

3. 在 androidphpmysql 目錄下創建 registrationapi.php 文件,并寫入以下代碼。愛掏網 - it200.com該文件處理來自安卓應用的請求,并將響應以JSON數組的形式返回給安卓應用。愛掏網 - it200.com

registrationapi.php

<?php   
  require_once 'connection.php';  
  response = array();   if(isset(_GET['apicall'])){  
  switch(_GET['apicall']){   case 'signup':     if(isTheseParametersAvailable(array('username','email','password','gender'))){username = _POST['username'];email = _POST['email'];password = md5(_POST['password']);gender = _POST['gender'];stmt = conn->prepare("SELECT id FROM users WHERE username = ? OR email = ?");stmt->bind_param("ss", username,email);  
    stmt->execute();stmt->store_result();  

    if(stmt->num_rows>0){response['error'] = true;  
        response['message'] = 'User already registered';stmt->close();  
    }  
    else{  
        stmt =conn->prepare("INSERT INTO users (username, email, password, gender) VALUES (?, ?, ?, ?)");  
        stmt->bind_param("ssss",username, email,password, gender);  

        if(stmt->execute()){  
            stmt =conn->prepare("SELECT id, id, username, email, gender FROM users WHERE username = ?");   
            stmt->bind_param("s",username);  
            stmt->execute();stmt->bind_result(userid,id, username,email, gender);stmt->fetch();  

            user = array(             'id'=>id,   
            'username'=>username,              'email'=>email,  
            'gender'=>gender             );stmt->close();  

            response['error'] = false;response['message'] = 'User registered successfully';   
            response['user'] =user;   
        }  
    }  

}  
else{  
    response['error'] = true;response['message'] = 'required parameters are not available';   
}  
break;   
case 'login':  
  if(isTheseParametersAvailable(array('username', 'password'))){  
    username =_POST['username'];  
    password = md5(_POST['password']);   

    stmt =conn->prepare("SELECT id, username, email, gender FROM users WHERE username = ? AND password = ?");  
    stmt->bind_param("ss",username, password);stmt->execute();  
    stmt->store_result();     if(stmt->num_rows > 0){  
    stmt->bind_result(id, username,email, gender);stmt->fetch();  
    user = array(     'id'=>id,   
    'username'=>username,      'email'=>email,  
    'gender'=>gender     );response['error'] = false;   
    response['message'] = 'Login successfull';response['user'] = user;   }  else{response['error'] = false;   
    response['message'] = 'Invalid username or password';  }  
}  
break;   
default:response['error'] = true;   
 response['message'] = 'Invalid Operation Called';  
}  
}  
else{response['error'] = true;   
 response['message'] = 'Invalid API Call';  
}  
echo json_encode(response);  
function isTheseParametersAvailable(params){  
foreach(params as param){  if(!isset(_POST[$param])){  
     return false;   
  }  
}  
return true;   
}  
?>  

檢查您的PHP API是否正常工作,您可以使用Postman工具等REST客戶端。愛掏網 - it200.com

要檢查API的注冊代碼,您可以使用參數來傳遞注冊的URL。愛掏網 - it200.com

同樣,您可以通過傳遞有效的參數來檢查登入操作的URL。愛掏網 - it200.com

現在,在Android應用程序中,我們將為用戶注冊、用戶登入和在主活動中顯示用戶詳細信息(作為個人資料)創建三個Activity類。愛掏網 - it200.com

在布局中創建一個 activity_main.xml 并添加以下代碼。愛掏網 - it200.com此活動用于顯示用戶的詳細信息作為個人資料。愛掏網 - it200.com

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>  
<android.support.constraint.ConstraintLayout 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="example.javatpoint.com.volleyregistrationloginsystem.MainActivity">  

    <LinearLayout  
        android:layout_width="match_parent"  
        android:layout_height="fill_parent"  
        android:layout_marginBottom="8dp"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="8dp"  
        android:orientation="vertical"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintHorizontal_bias="0.0"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toTopOf="parent"  
        app:layout_constraintVertical_bias="0.0">  

        <TextView  
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"  
            android:gravity="center"  
            android:text="Welcome to Profile"  
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" />  

        <TableLayout  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:layout_marginTop="50dp">  


            <TableRow>  

                <TextView  
                    android:layout_width="wrap_content"  
                    android:layout_height="wrap_content"  
                    android:padding="10dp"  
                    android:text="Id"  
                    android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" />  

                <TextView  
                    android:id="@+id/textViewId"  
                    android:layout_width="wrap_content"  
                    android:layout_height="wrap_content"  
                    android:padding="10dp"  
                    android:text="id"  
                    android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" />  

            </TableRow>  

            <TableRow>  

                <TextView  
                    android:layout_width="wrap_content"  
                    android:layout_height="wrap_content"  
                    android:padding="10dp"  
                    android:text="Username"  
                    android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" />  

                <TextView  
                    android:id="@+id/textViewUsername"  
                    android:layout_width="wrap_content"  
                    android:layout_height="wrap_content"  
                    android:padding="10dp"  
                    android:text="username"  
                    android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" />  

            </TableRow>  

            <TableRow>  

                <TextView  
                    android:layout_width="wrap_content"  
                    android:layout_height="wrap_content"  
                    android:padding="10dp"  
                    android:text="Email"  
                    android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" />  

                <TextView  
                    android:id="@+id/textViewEmail"  
                    android:layout_width="wrap_content"  
                    android:layout_height="wrap_content"  
                    android:padding="10dp"  
                    android:text="useremail"  
                    android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" />  

            </TableRow>  

            <TableRow>  

                <TextView  
                    android:layout_width="wrap_content"  
                    android:layout_height="wrap_content"  
                    android:padding="10dp"  
                    android:text="Gender"  
                    android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" />  

                <TextView  
                    android:id="@+id/textViewGender"  
                    android:layout_width="wrap_content"  
                    android:layout_height="wrap_content"  
                    android:padding="10dp"  
                    android:text="gender"  
                    android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" />  

            </TableRow>  


        </TableLayout>  

        <Button  
            android:id="@+id/buttonLogout"  
            android:layout_width="210dp"  
            android:layout_height="50dp"  
            android:layout_marginTop="150dp"  
            android:layout_marginLeft="75dp"  
            android:text="Logout" />  
    </LinearLayout>  

</android.support.constraint.ConstraintLayout>  

現在,在布局目錄中創建一個名為activity_login.xml的文件,其中包含以下代碼。愛掏網 - it200.com此活動用于用戶登錄界面。愛掏網 - it200.com

activity_login.xml

<?xml version="1.0" encoding="utf-8"?>  
<android.support.constraint.ConstraintLayout 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="example.javatpoint.com.volleyregistrationloginsystem.LoginActivity">  

    <TextView  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="16dp"  
        android:gravity="center"  
        android:text="Login"  
        android:textAppearance="@style/Base.TextAppearance.AppCompat.Large"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintHorizontal_bias="1.0"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toTopOf="parent" />  

    <EditText  
        android:id="@+id/etUserName"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:layout_marginBottom="8dp"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="8dp"  
        android:ems="10"  
        android:inputType="textPersonName"  
        android:hint="user name"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintHorizontal_bias="0.0"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toTopOf="parent"  
        app:layout_constraintVertical_bias="0.144" />  

    <EditText  
        android:id="@+id/etUserPassword"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="8dp"  
        android:hint="password"  
        android:ems="10"  
        android:inputType="textPassword"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toBottomOf="@+id/etUserName" />  

    <Button  
        android:id="@+id/btnLogin"  
        android:layout_width="210dp"  
        android:layout_height="50dp"  
        android:layout_marginBottom="8dp"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="8dp"  
        android:text="Login"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toBottomOf="@+id/etUserName"  
        app:layout_constraintVertical_bias="0.754" />  

    <TextView  
        android:id="@+id/tvRegister"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginBottom="8dp"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="8dp"  
        android:gravity="center"  
        android:text="Create New Account\n Register Here"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toBottomOf="@+id/btnLogin"  
        app:layout_constraintVertical_bias="0.405" />  

    <ProgressBar  
        android:id="@+id/progressBar"  
        android:visibility="gone"  
        style="?android:attr/progressBarStyle"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_marginBottom="8dp"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="8dp"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toTopOf="parent"  
        app:layout_constraintVertical_bias="0.456" />  

</android.support.constraint.ConstraintLayout>  

在layout目錄中創建一個activity_register.xml文件,內容如下。愛掏網 - it200.com該活動用于用戶注冊界面。愛掏網 - it200.com

activity_register.xml

<?xml version="1.0" encoding="utf-8"?>  
<android.support.constraint.ConstraintLayout 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="example.javatpoint.com.volleyregistrationloginsystem.RegisterActivity">  


    <LinearLayout  
        android:layout_width="match_parent"  
        android:layout_height="519dp"  
        android:layout_centerVertical="true"  
        android:layout_marginBottom="8dp"  
        android:layout_marginEnd="8dp"  
        android:layout_marginStart="8dp"  
        android:layout_marginTop="8dp"  
        android:orientation="vertical"  
        android:padding="10dp"  
        app:layout_constraintBottom_toBottomOf="parent"  
        app:layout_constraintEnd_toEndOf="parent"  
        app:layout_constraintStart_toStartOf="parent"  
        app:layout_constraintTop_toTopOf="parent"  
        app:layout_constraintVertical_bias="0.0">  

        <TextView  
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"  
            android:text="Register"  
            android:gravity="center"  
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" />  

        <EditText  
            android:id="@+id/editTextUsername"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:layout_marginBottom="8dp"  
            android:layout_marginTop="20dp"  
            android:hint="Username"  
            android:inputType="text" />  

        <EditText  
            android:id="@+id/editTextEmail"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:layout_marginBottom="8dp"  
            android:layout_marginTop="8dp"  
            android:hint="Email"  
            android:inputType="textEmailAddress" />  

        <EditText  
            android:id="@+id/editTextPassword"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:layout_marginBottom="8dp"  
            android:layout_marginTop="8dp"  
            android:fontFamily="sans-serif"  
            android:hint="Password"  
            android:inputType="textPassword" />  

        <RadioGroup  
            android:id="@+id/radioGender"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:layout_marginBottom="8dp"  
            android:layout_marginTop="8dp"  
            android:orientation="horizontal">  

            <RadioButton  
                android:id="@+id/radioButtonMale"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:checked="true"  
                android:text="Male" />  


            <RadioButton  
                android:id="@+id/radioButtonFemale"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content"  
                android:text="Female" />  

        </RadioGroup>  

        <Button  
            android:id="@+id/buttonRegister"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:layout_marginBottom="8dp"  
            android:layout_marginTop="90dp"  
            android:text="Register" />  

        <TextView  
            android:id="@+id/textViewLogin"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:layout_marginBottom="8dp"  
            android:layout_marginTop="8dp"  
            android:text="Already Registered?\nLogin Here"  
            android:textAlignment="center"  
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" />  
    </LinearLayout>  

    <ProgressBar  
        android:visibility="gone"  
        android:id="@+id/progressBar"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_centerHorizontal="true"  
        android:layout_centerVertical="true" />  

</android.support.constraint.ConstraintLayout>  

build.gradle 文件中添加 volley 庫依賴。愛掏網 - it200.com

build.gradle

implementation 'com.android.volley:volley:1.0.0'

創建一個名為 User.java 的數據模型類,包含以下代碼。愛掏網 - it200.com

User.java

package example.javatpoint.com.volleyregistrationloginsystem;


public class User {
    private int id;
    private String name, email, gender;

    public User(int id, String name, String email, String gender) {
        this.id = id;
        this.email = email;
        this.gender = gender;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }


    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}

我們需要定義一個調用服務器端API的URL。愛掏網 - it200.com

創建一個URLs.java類并定義URL。愛掏網 - it200.com

URLs.java

package example.javatpoint.com.volleyregistrationloginsystem;  

public class URLs {
    private static final String ROOT_URL = "http://192.168.1.35/androidphpmysql/registrationapi.php?apicall=";
    public static final String URL_REGISTER = ROOT_URL + "signup";
    public static final String URL_LOGIN= ROOT_URL + "login";
}

VolleySingleton.java

package example.javatpoint.com.volleyregistrationloginsystem;  

import android.content.Context;  
import com.android.volley.Request;  
import com.android.volley.RequestQueue;  
import com.android.volley.toolbox.Volley;  

public class VolleySingleton {  
    private static VolleySingleton mInstance;  
    private RequestQueue mRequestQueue;  
    private static Context mCtx;  

    private VolleySingleton(Context context) {  
        mCtx = context;  
        mRequestQueue = getRequestQueue();  
    }  

    public static synchronized VolleySingleton getInstance(Context context) {  
        if (mInstance == null) {  
            mInstance = new VolleySingleton(context);  
        }  
        return mInstance;  
    }  

    public RequestQueue getRequestQueue() {  
        if (mRequestQueue == null) {  
            // getApplicationContext() is key, it keeps you from leaking the  
            // Activity or BroadcastReceiver if someone passes one in.  
            mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());  
        }  
        return mRequestQueue;  
    }  

    public <T> void addToRequestQueue(Request<T> req) {  
        getRequestQueue().add(req);  
    }  
}  

創建一個名為SharedPreferences.java的類。愛掏網 - it200.com在這個類中,我們使用SharedPreferences類來存儲用戶詳細信息。愛掏網 - it200.comSharedPreferences類包含以下四個方法:

  • userLogin(): 此方法用于在登錄后將用戶信息存儲在SharedPreferences中。愛掏網 - it200.com
  • isLoggedIn(): 此方法檢查用戶是否已登錄。愛掏網 - it200.com
  • getUser(): 此方法在登錄狀態下獲取用戶信息。愛掏網 - it200.com
  • logout(): 此方法清除SharedPreferences數據并注銷用戶。愛掏網 - it200.com

SharedPrefManager.java

package example.javatpoint.com.volleyregistrationloginsystem;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;

public class SharedPrefManager {

    private static final String SHARED_PREF_NAME = "volleyregisterlogin";
    private static final String KEY_USERNAME = "keyusername";
    private static final String KEY_EMAIL = "keyemail";
    private static final String KEY_GENDER = "keygender";
    private static final String KEY_ID = "keyid";
    private static SharedPrefManager mInstance;
    private static Context ctx;

    private SharedPrefManager(Context context) {
        ctx = context;
    }
    public static synchronized SharedPrefManager getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new SharedPrefManager(context);
        }
        return mInstance;
    }

    //this method will store the user data in shared preferences
    public void userLogin(User user) {
        SharedPreferences sharedPreferences = ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putInt(KEY_ID, user.getId());
        editor.putString(KEY_USERNAME, user.getName());
        editor.putString(KEY_EMAIL, user.getEmail());
        editor.putString(KEY_GENDER, user.getGender());
        editor.apply();
    }

    //this method will checker whether user is already logged in or not
    public boolean isLoggedIn() {
        SharedPreferences sharedPreferences = ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
        return sharedPreferences.getString(KEY_USERNAME, null) != null;
    }

    //this method will give the logged in user
    public User getUser() {
        SharedPreferences sharedPreferences = ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
        return new User(
                sharedPreferences.getInt(KEY_ID, -1),
                sharedPreferences.getString(KEY_USERNAME, null),
                sharedPreferences.getString(KEY_EMAIL, null),
                sharedPreferences.getString(KEY_GENDER, null)
        );
    }

    //this method will logout the user
    public void logout() {
        SharedPreferences sharedPreferences = ctx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.clear();
        editor.apply();
        ctx.startActivity(new Intent(ctx, LoginActivity.class));
    }
}

現在,在 MainActivity.java 類中,如果用戶登錄,則顯示用戶信息,否則跳轉到 LoginActivity.java 類。愛掏網 - it200.com當點擊按鈕時,使用 onClick() 方法退出登錄。愛掏網 - it200.com

MainActivity.java

package example.javatpoint.com.volleyregistrationloginsystem;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    TextView id,userName,userEmail,gender;
    Button btnLogout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if(SharedPrefManager.getInstance(this).isLoggedIn()){
            id = findViewById(R.id.textViewId);
            userName = findViewById(R.id.textViewUsername);
            userEmail = findViewById(R.id.textViewEmail);
            gender = findViewById(R.id.textViewGender);
            btnLogout = findViewById(R.id.buttonLogout);
            User user = SharedPrefManager.getInstance(this).getUser();

            id.setText(String.valueOf(user.getId()));
            userEmail.setText(user.getEmail());
            gender.setText(user.getGender());
            userName.setText(user.getName());

            btnLogout.setOnClickListener(this);
        }
        else{
            Intent  intent = new Intent(MainActivity.this,LoginActivity.class);
            startActivity(intent);
            finish();
        }
    }
    public void onClick(View view){
        if(view.equals(btnLogout)){
            SharedPrefManager.getInstance(getApplicationContext()).logout();
        }
    }
}

在 LoginActivity.java 類中,我們檢查用戶是否已經登錄,如果是,則重定向到 MainActivity.java 類,否則允許用戶登錄。愛掏網 - it200.com

StringRequest 類是 Volley 庫中用于網絡模塊的類。愛掏網 - it200.comStringRequest類的對象接受請求方法類型、URL和響應的參數。愛掏網 - it200.com

LoginActivity.java

package example.javatpoint.com.volleyregistrationloginsystem;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;

public class LoginActivity extends AppCompatActivity {
    EditText etName, etPassword;
    ProgressBar progressBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        if (SharedPrefManager.getInstance(this).isLoggedIn()) {
            finish();
            startActivity(new Intent(this, MainActivity.class));
        }

        progressBar = findViewById(R.id.progressBar);
        etName = findViewById(R.id.etUserName);
        etPassword = findViewById(R.id.etUserPassword);



        //調用userLogin()方法登錄用戶
        findViewById(R.id.btnLogin).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                userLogin();
            }
        });

        //如果用戶點擊未注冊的文本,則調用RegisterActivity
        findViewById(R.id.tvRegister).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
                startActivity(new Intent(getApplicationContext(), RegisterActivity.class));
            }
        });
    }

    private void userLogin() {
        //首先獲取值
        final String username = etName.getText().toString();
        final String password = etPassword.getText().toString();
        //驗證輸入
        if (TextUtils.isEmpty(username)) {
            etName.setError("請輸入用戶名");
            etName.requestFocus();
            return;
        }

        if (TextUtils.isEmpty(password)) {
            etPassword.setError("請輸入密碼");
            etPassword.requestFocus();
            return;
        }

        //如果一切都沒問題
        StringRequest stringRequest = new StringRequest(Request.Method.POST, URLs.URL_LOGIN,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        progressBar.setVisibility(View.GONE);

                        try {
                            //將響應轉換為JSONObject對象
                            JSONObject obj = new JSONObject(response);

                            //如果響應中沒有錯誤
                            if (!obj.getBoolean("error")) {
                                Toast.makeText(getApplicationContext(), obj.getString("message"), Toast.LENGTH_SHORT).show();

                                //從響應中獲取用戶信息
                                JSONObject userJson = obj.getJSONObject("user");

                                //創建一個新的用戶對象
                                User user = new User(
                                        userJson.getInt("id"),
                                        userJson.getString("username"),
                                        userJson.getString("email"),
                                        userJson.getString("gender")
                                );

                                //將用戶存儲在共享首選項中
                                SharedPrefManager.getInstance(getApplicationContext()).userLogin(user);
                                //啟動個人資料頁面
                                finish();
                                startActivity(new Intent(getApplicationContext(), MainActivity.class));
                            } else {
                                Toast.makeText(getApplicationContext(), obj.getString("message"), Toast.LENGTH_SHORT).show();
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();

                    }
                })
        {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("username", username);
                params.put("password", password);
                return params;
            }
        };

        VolleySingleton.getInstance(this).addToRequestQueue(stringRequest);
    }
}

RegisterActivity.java類用于用戶注冊。愛掏網 - it200.com這個類最初檢查用戶登錄,如果登錄成功,則重定向至MainActivity.java類;否則,允許用戶進行注冊。愛掏網 - it200.com

與LoginActivity.java類類似,我們使用Volley庫的StringRequest類進行網絡連接,并傳遞請求方法、URL和響應參數。愛掏網 - it200.comResponse.Listener< String >()方法處理服務器生成的響應。愛掏網 - it200.com

RegisterActivity.java類

package example.javatpoint.com.volleyregistrationloginsystem;  

import android.content.Intent;  
import android.support.v7.app.AppCompatActivity;  
import android.os.Bundle;  
import android.text.TextUtils;  
import android.view.View;  
import android.widget.EditText;  
import android.widget.ProgressBar;  
import android.widget.RadioButton;  
import android.widget.RadioGroup;  
import android.widget.Toast;  
import com.android.volley.AuthFailureError;  
import com.android.volley.Request;  
import com.android.volley.Response;  
import com.android.volley.VolleyError;  
import com.android.volley.toolbox.StringRequest;  
import org.json.JSONException;  
import org.json.JSONObject;  
import java.util.HashMap;  
import java.util.Map;  

public class RegisterActivity extends AppCompatActivity {  
    EditText editTextUsername, editTextEmail, editTextPassword;  
    RadioGroup radioGroupGender;  
    ProgressBar progressBar;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_register);  
        progressBar = findViewById(R.id.progressBar);  

        //if the user is already logged in we will directly start the MainActivity (profile) activity  
        if (SharedPrefManager.getInstance(this).isLoggedIn()) {  
            finish();  
            startActivity(new Intent(this, MainActivity.class));  
            return;  
        }  

        editTextUsername = findViewById(R.id.editTextUsername);  
        editTextEmail = findViewById(R.id.editTextEmail);  
        editTextPassword = findViewById(R.id.editTextPassword);  
        radioGroupGender = findViewById(R.id.radioGender);  


        findViewById(R.id.buttonRegister).setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View view) {  
                //if user pressed on button register  
                //here we will register the user to server  
                registerUser();  
            }  
        });  

        findViewById(R.id.textViewLogin).setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View view) {  
                //if user pressed on textview that already register open LoginActivity  
                finish();  
                startActivity(new Intent(RegisterActivity.this, LoginActivity.class));  
            }  
        });  

    }  

    private void registerUser() {  
        final String username = editTextUsername.getText().toString().trim();  
        final String email = editTextEmail.getText().toString().trim();  
        final String password = editTextPassword.getText().toString().trim();  

        final String gender = ((RadioButton) findViewById(radioGroupGender.getCheckedRadioButtonId())).getText().toString();  

        //first we will do the validations  
        if (TextUtils.isEmpty(username)) {  
            editTextUsername.setError("Please enter username");  
            editTextUsername.requestFocus();  
            return;  
        }  

        if (TextUtils.isEmpty(email)) {  
            editTextEmail.setError("Please enter your email");  
            editTextEmail.requestFocus();  
            return;  
        }  

        if (!android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {  
            editTextEmail.setError("Enter a valid email");  
            editTextEmail.requestFocus();  
            return;  
        }  

        if (TextUtils.isEmpty(password)) {  
            editTextPassword.setError("Enter a password");  
            editTextPassword.requestFocus();  
            return;  
        }  

        StringRequest stringRequest = new StringRequest(Request.Method.POST, URLs.URL_REGISTER,  
                new Response.Listener<String>() {  
                    @Override  
                    public void onResponse(String response) {  
                        progressBar.setVisibility(View.GONE);  

                        try {  
                            //converting response to json object  
                            JSONObject obj = new JSONObject(response);  
                            //if no error in response  
                            if (!obj.getBoolean("error")) {  
                                Toast.makeText(getApplicationContext(), obj.getString("message"), Toast.LENGTH_SHORT).show();  

                                //getting the user from the response  
                                JSONObject userJson = obj.getJSONObject("user");  

                                //creating a new user object  
                                User user = new User(  
                                        userJson.getInt("id"),  
                                        userJson.getString("username"),  
                                        userJson.getString("email"),  
                                        userJson.getString("gender")  
                                );  

                                //storing the user in shared preferences  
                                SharedPrefManager.getInstance(getApplicationContext()).userLogin(user);  

                                //starting the profile activity  
                                finish();  
                                startActivity(new Intent(getApplicationContext(), MainActivity.class));  
                            } else {  
                                Toast.makeText(getApplicationContext(), obj.getString("message"), Toast.LENGTH_SHORT).show();  
                            }  
                        } catch (JSONException e) {  
                            e.printStackTrace();  
                        }  
                    }  
                },  
                new Response.ErrorListener() {  
                    @Override  
                    public void onErrorResponse(VolleyError error) {  
                        Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();  
                    }  
                }) {  
            @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);  
                params.put("gender", gender);  
                return params;  
            }  
        };  

        VolleySingleton.getInstance(this).addToRequestQueue(stringRequest);  
    }  
} 

將以下權限添加到 AndroidManifest.xml 文件中

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

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="example.javatpoint.com.volleyregistrationloginsystem">
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".LoginActivity" />
        <activity android:name=".RegisterActivity"></activity>
    </application>

</manifest>

輸出:

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 久久亚洲AV无码精品色午夜麻 | 麻豆果冻传媒精品二三区| 免费视频爱爱太爽了| 曰皮全部过程视频免费国产30分钟 | 国产精品一区欧美激情| 美国式禁忌23| 亚洲av无码专区亚洲av桃| 在线观看一区二区精品视频| 男女肉粗暴进来120秒动态图| 夜夜春宵伴娇全文阅读| 中文字幕免费观看视频| 国产在线视频专区| 欧美孕妇与黑人巨交| 99热这里只有精品7| 亚洲精品456人成在线| 国产老买老妇bbb| 欧美高清在线精品一区| а√最新版在线天堂| 另类图片亚洲校园小说区| 草莓视频未满十八勿网站| 久久国产视频一区| 日本乱偷人妻中文字幕| 钻胯羞辱的视频vk| 亚洲视频在线免费播放| 国产第一页在线观看| 午夜老司机永久免费看片| 少妇大战黑吊在线观看| 日韩国产欧美在线观看| 狠狠色综合网久久久久久| jealousvue成熟50maoff老狼| 免费a级毛视频| 国产猛男猛女超爽免费视频| 男女下面一进一出免费无遮挡| yy6080欧美三级理论| 免费无码看av的网站| 国产伦理不卡伦理剧| 男女混合的群应该取什么名字| 91精品欧美一区二区综合在线| 亚洲精品www| 国产精品夜间视频香蕉| 日本大胆欧美艺术337p|