Я следовал и адаптировал учебник для создания приложения для регистрации и входа в систему с базами данных и php.
Проблема, я не могу отправить запрос POST, и перенаправление не сработало. Если я попробую 2 раза, приложение cra sh. Я попробовал мой PHP файл с HTML, и он отлично работает, поэтому проблема в приложении.
Можете ли вы помочь мне решить эту проблему?
RegisterActivity. java
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.android.volley.RequestQueue;
import com.pandeo.loginapp.myrequest.MyRequest;
import java.util.Map;
public class RegisterActivity extends AppCompatActivity {
private Button btn_send;
private EditText et_email, et_password, et_password2;
private RequestQueue queue;
private MyRequest request;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
btn_send = (Button) findViewById(R.id.btn_send);
et_email = (EditText) findViewById(R.id.et_email);
et_password = (EditText) findViewById(R.id.et_password);
et_password2 = (EditText) findViewById(R.id.et_password2);
queue = VolleySingleton.getInstance(this).getRequestQueue();
request = new MyRequest(this, queue);
btn_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String email = et_email.getText().toString().trim();
String password = et_password.getText().toString().trim();
String password2 = et_password2.getText().toString().trim();
if(email.length() > 0 && password.length() > 0 && password2.length() > 0) {
request.register(email, password, password2, new MyRequest.RegisterCallback() {
@Override
public void onSuccess(String message) {
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.putExtra("REGISTER", message);
startActivity(intent);
finish();
}
@Override
public void inputErrors(Map<String, String> errors) {
}
@Override
public void onError(String message) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
});
}else{
Toast.makeText(getApplicationContext(), "Veuillez remplir tous les champs", Toast.LENGTH_SHORT).show();
}
}
});
}
}
activity_register. xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".RegisterActivity">
<RelativeLayout android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="MissingConstraints">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:orientation="horizontal"
android:layout_marginTop="150dp">
<TextView
android:text="@string/register_title"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"/>
</LinearLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:orientation="horizontal">
<EditText
android:id="@+id/et_email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/email"
android:imeOptions="actionNext"
android:inputType="textEmailAddress"
android:singleLine="true"
android:layout_marginTop="40dp"/>
<EditText
android:id="@+id/et_password"
android:inputType="textPassword"
android:layout_width="fill_parent"
android:singleLine="true"
android:imeOptions="actionNext"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:hint="@string/password"
android:layout_marginTop="80dp"/>
<EditText
android:id="@+id/et_password2"
android:inputType="textPassword"
android:layout_width="fill_parent"
android:singleLine="true"
android:imeOptions="actionDone"
android:layout_height="wrap_content"
android:hint="@string/password2"
android:layout_marginTop="120dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:orientation="horizontal"
android:layout_marginTop="250dp">
<Button
android:id="@+id/btn_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/register" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
MyRegister. java
import android.content.Context;
import com.android.volley.AuthFailureError;
import com.android.volley.NetworkError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.pandeo.loginapp.LoginActivity;
import com.pandeo.loginapp.RegisterActivity;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class MyRequest {
private Context context;
private RequestQueue queue;
public MyRequest(Context context) {
this.context = context;
}
public MyRequest(RegisterActivity registerActivity, RequestQueue queue) {
}
public MyRequest(LoginActivity loginActivity, RequestQueue queue) {
}
public void register(final String email, final String password, final String password2, final RegisterCallback callback){
String url = "http://149.91.88.218/yolotest/register.php";
StringRequest request = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Map<String, String> errors = new HashMap<>();
try{
JSONObject json = new JSONObject(response);
Boolean error = json.getBoolean("error");
if(!error){
callback.onSuccess("Vous êtes maintenant inscrit");
}else{
JSONObject messages = json.getJSONObject("message");
if(messages.has("email")){
errors.put("email", messages.getString("email"));
}
if(messages.has("password")){
errors.put("password", messages.getString("password"));
}
callback.inputErrors(errors);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if(error instanceof NetworkError){
callback.onError("Impossible de se connecter");
}else if(error instanceof VolleyError){
callback.onError("Une erreur est survenue");
}
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> map = new HashMap<>();
map.put("email", email);
map.put("password", password);
map.put("password2", password2);
return map;
}
};
queue.add(request);
}
public interface RegisterCallback{
void onSuccess(String message);
void inputErrors(Map<String, String> errors);
void onError(String message);
}
VolleySingleton. java
package com.pandeo.loginapp;
import android.content.Context;
import android.graphics.Bitmap;
import android.util.LruCache;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;
public class VolleySingleton {
private static VolleySingleton instance;
private RequestQueue requestQueue;
private ImageLoader imageLoader;
private static Context ctx;
private VolleySingleton(Context context) {
ctx = context;
requestQueue = getRequestQueue();
imageLoader = new ImageLoader(requestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap>
cache = new LruCache<String, Bitmap>(20);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});
}
public static synchronized VolleySingleton getInstance(Context context) {
if (instance == null) {
instance = new VolleySingleton(context);
}
return instance;
}
public RequestQueue getRequestQueue() {
if (requestQueue == null) {
// getApplicationContext() is key, it keeps you from leaking the
// Activity or BroadcastReceiver if someone passes one in.
requestQueue = Volley.newRequestQueue(ctx.getApplicationContext());
}
return requestQueue;
}
public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
public ImageLoader getImageLoader() {
return imageLoader;
}
}
build.gradle (: app)
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.0"
defaultConfig {
applicationId "com.pandeo.loginapp"
minSdkVersion 15
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.mcxiaoke.volley:library:1.0.19'
}
Начальное руководство здесь: https://www.youtube.com/watch?v=dC7p2zHbvXg
Спасибо заранее. С уважением, xxloubexx.