2016-04-15 3 views
2

Я делаю приложение для Android с помощью андроид-студии для входа/регистрации, и я не смог отправить информацию о регистре в файл .php.Войти/Зарегистрироваться приложение с помощью volley

Вот мой код:

Для LoginActivity:

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

import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.toolbox.Volley; 

import org.json.JSONException; 
import org.json.JSONObject; 

public class RegisterActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_register); 

    final EditText etAge = (EditText) findViewById(R.id.etAge); 
    final EditText etName = (EditText) findViewById(R.id.etName); 
    final EditText etUsername = (EditText) findViewById(R.id.etUsername); 
    final EditText etPassword = (EditText) findViewById(R.id.etPassword); 
    final Button bRegister = (Button) findViewById(R.id.bRegister); 

    bRegister.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final String name = etName.getText().toString(); 
      final String username = etUsername.getText().toString(); 
      final int age = Integer.parseInt(etAge.getText().toString()); 
      final String password = etPassword.getText().toString(); 

      Response.Listener<String> responseListener = new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        try { 
         JSONObject jsonResponse = new JSONObject(response); 
         boolean success = jsonResponse.getBoolean("success"); 
         if (success) { 
          Intent intent = new Intent(RegisterActivity.this, LoginActivity.class); 
          RegisterActivity.this.startActivity(intent); 
         } else { 
          AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this); 
          builder.setMessage("Register Failed") 
            .setNegativeButton("Retry", null) 
            .create() 
            .show(); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }; 

      RegisterRequest registerRequest = new RegisterRequest(name, username, age, password, responseListener); 
      RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this); 
      queue.add(registerRequest); 
     } 
    }); 
} 
} 

Для RegisterActivity:

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

import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.toolbox.Volley; 

import org.json.JSONException; 
import org.json.JSONObject; 

public class RegisterActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_register); 

    final EditText etAge = (EditText) findViewById(R.id.etAge); 
    final EditText etName = (EditText) findViewById(R.id.etName); 
    final EditText etUsername = (EditText) findViewById(R.id.etUsername); 
    final EditText etPassword = (EditText) findViewById(R.id.etPassword); 
    final Button bRegister = (Button) findViewById(R.id.bRegister); 

    bRegister.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final String name = etName.getText().toString(); 
      final String username = etUsername.getText().toString(); 
      final int age = Integer.parseInt(etAge.getText().toString()); 
      final String password = etPassword.getText().toString(); 

      Response.Listener<String> responseListener = new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        try { 
         JSONObject jsonResponse = new JSONObject(response); 
         boolean success = jsonResponse.getBoolean("success"); 
         if (success) { 
          Intent intent = new Intent(RegisterActivity.this, LoginActivity.class); 
          RegisterActivity.this.startActivity(intent); 
         } else { 
          AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this); 
          builder.setMessage("Register Failed") 
            .setNegativeButton("Retry", null) 
            .create() 
            .show(); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }; 

      RegisterRequest registerRequest = new RegisterRequest(name, username, age, password, responseListener); 
      RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this); 
      queue.add(registerRequest); 
     } 
    }); 
} 
} 

Для RegisterRequest:

import com.android.volley.Response; 
import com.android.volley.toolbox.StringRequest; 

import java.util.HashMap; 
import java.util.Map; 

public class RegisterRequest extends StringRequest { 
private static final String REGISTER_REQUEST_URL = "http://mydomain.hostei.com/Register.php"; 
private Map<String, String> params; 

public RegisterRequest(String name, String username, int age, String password, Response.Listener<String> listener) { 
    super(Method.POST, REGISTER_REQUEST_URL, listener, null); 
    params = new HashMap<>(); 
    params.put("name", name); 
    params.put("age", age + ""); 
    params.put("username", username); 
    params.put("password", password); 
} 

@Override 
public Map<String, String> getParams() { 
    return params; 
} 
} 

И register.php:

$con = mysqli_connect("mysql10.000webhost.com", "a3288368_user", "abcd1234", "a3288368_data"); 

$name = $_POST["name"]; 
$age = $_POST["age"]; 
$username = $_POST["username"]; 
$password = $_POST["password"]; 
$statement = mysqli_prepare($con, "INSERT INTO user (name, age, username, password) VALUES (?, ?, ?, ?)"); 
mysqli_stmt_bind_param($statement, "siss", $name, $age, $username, $password); 
mysqli_stmt_execute($statement); 

$response = array(); 
$response["success"] = true; 

echo json_encode($response); 

Связь между моей базы данных и файл register.php исправному сдачи значения вручную в файле register.php. Но когда я ожидаю, что значения образуют метод POST, я не смог установить связь между моей заявкой и Register.php

Я уже добавил разрешение на подключение к моему проекту, также собрал библиотеку волейбола.

Любые идеи, что происходит не так? Возможно, есть ошибка в моем Java-коде?

Благодаря

+0

Вы пробовали отлаживать код? Чтобы увидеть, как выглядит запрос? Вы также можете отладить php-код, чтобы узнать, что там прибывает ... – f1sh

+0

Ничто не приходит на php.I, эхо переменные, и они не принимают значения из метода POST. Кажется, ошибка связана с кодом java. –

+0

Все параметры, проходящие правильно через RegisterReuqest.I проверили, что с system.out.prints –

ответ

0

Проблема fixed.The ошибка была в коде PHP

Я изменил эхо json_encode ($ ответ);
с print_r (json_encode ($ response));

+0

Маленький совет, вы должны использовать метод isset() в своем аргументе post в ваших php-файлах, чтобы избежать ошибок и ненужных ошибок – Roee