Java 如何使用PHP和android studio(服务器00webhost)将数据导入数据库?
我已经使用000webhost创建了一个数据库,并将我的php文件上传到那个服务器。使用android studio,我试图创建一个用户注册页面。我点击进入注册页面,输入所有信息,点击提交按钮,它会像它应该做的那样将我带回登录页面。但是,信息没有发送到我的数据库。我没有收到错误消息,所以我不知道从哪里开始。下面是我的java类和php文件中的代码,以及清单文件的一个片段 注册请求java类Java 如何使用PHP和android studio(服务器00webhost)将数据导入数据库?,java,php,android-studio,database-connection,registration,Java,Php,Android Studio,Database Connection,Registration,我已经使用000webhost创建了一个数据库,并将我的php文件上传到那个服务器。使用android studio,我试图创建一个用户注册页面。我点击进入注册页面,输入所有信息,点击提交按钮,它会像它应该做的那样将我带回登录页面。但是,信息没有发送到我的数据库。我没有收到错误消息,所以我不知道从哪里开始。下面是我的java类和php文件中的代码,以及清单文件的一个片段 注册请求java类 package amp.riot; import com.android.volley.Response
package amp.riot;
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 ="https://upbeat.000webhostapp.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("username", username);
params.put("password", password);
params.put("age", age + "");
}
public Map<String, String> getParams(){
return params;
}
}
package amp.riot;
导入com.android.volley.Response;
导入com.android.volley.toolbox.StringRequest;
导入java.util.HashMap;
导入java.util.Map;
公共类RegisterRequest扩展了StringRequest{
专用静态最终字符串寄存器\u请求\u URL=”https://upbeat.000webhostapp.com/register.php";
私有映射参数;
公共注册表请求(字符串名称、字符串用户名、整数、字符串密码、Response.Listener){
super(Method.POST,REGISTER\u REQUEST\u URL,listener,null);
params=新的HashMap();
参数put(“名称”,名称);
参数put(“用户名”,用户名);
参数put(“密码”,密码);
参数put(“年龄”,年龄+”);
}
公共映射getParams(){
返回参数;
}
}
java类的注册页
public class Register 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 String password=etPassword.getText().toString();
final int age= Integer.parseInt(etAge.getText().toString());
final 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(Register.this, Login.class);
Register.this.startActivity(intent);
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(Register.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(Register.this);
queue.add(registerRequest);
}
});
}
公共类寄存器扩展AppCompative活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u寄存器);
最终EditText etAge=(EditText)findViewById(R.id.etAge);
最终EditText etName=(EditText)findViewById(R.id.etName);
最终EditText etUsername=(EditText)findViewById(R.id.etUsername);
最终EditText etPassword=(EditText)findViewById(R.id.etPassword);
最终按钮b注册表=(按钮)findViewById(R.id.b注册表);
bRegister.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
最终字符串名称=etName.getText().toString();
最终字符串username=etUsername.getText().toString();
最终字符串password=etPassword.getText().toString();
final int age=Integer.parseInt(etAge.getText().toString());
final Response.Listener responseListener=new Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONObject jsonResponse=新的JSONObject(响应);
boolean success=jsonResponse.getBoolean(“success”);
如果(成功){
意图=新意图(Register.this、Login.class);
注册。此。开始触觉(意图);
}否则{
AlertDialog.Builder=新建AlertDialog.Builder(Register.this);
builder.setMessage(“注册失败”)
.setNegativeButton(“重试”,null)
.create()
.show();
}
}捕获(JSONException e){
e、 printStackTrace();
}
}
};
RegisterRequest RegisterRequest=新的RegisterRequest(名称、用户名、年龄、密码、响应侦听器);
RequestQueue=Volley.newRequestQueue(Register.this);
添加(registerRequest);
}
});
}
}
清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="amp.riot">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
注册PHP文件
<?php
$con = mysqli_connect("localhost", "id202020_sierra", "05alop59", "id202020_plank");
$name = $_POST["name"];
$age = $_POST["age"];
$username = $_POST["username"];
$password = $_POST["password"];
$statement = mysqli_prepare($con, "INSERT INTO user(name, username, age, password) VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($statement, "siss", $name, $username, $age, $password);
mysqli_stmt_execute($statement);
$response = array();
$response["success"] = true;
echo json_encode($response);
尝试StringRequest
而不是使用Response.Listener
StringRequest strreq=new-StringRequest(Request.Method.POST,url,new-Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
Toast.makeText(getApplicationContext(),response,Toast.LENGTH_SHORT.show();
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
}){
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数put(“id”,id);
参数put(“name”,editText_name.getText().toString());
参数put(“pass”,editText_pass.getText().toString());
返回参数;
}
};
AppController.getInstance().addToRequestQueue(streq);
您在php文件中犯了一个小错误。
变,
对,
这里,s表示字符串,我表示整数。我相信用户名是String,年龄是int。谢谢。你说你收到了一条错误消息,我们需要它。对不起,我的意思是说没有错误消息,这就是我不知道该怎么办的原因。
StringRequest strreq = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(getApplicationContext(),response,Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> params = new HashMap<String, String>();
params.put("id",id);
params.put("name",editText_name.getText().toString());
params.put("pass",editText_pass.getText().toString());
return params;
}
};
AppController.getInstance().addToRequestQueue(strreq);
mysqli_stmt_bind_param($statement, "siss", $name, $username, $age, $password);
mysqli_stmt_bind_param($statement, "ssis", $name, $username, $age, $password);