我希望通过volley发送参数到主机的php页面。但是我收到以下错误。
BasicNetwork.performRequest: Unexpected response code 400
这是我的php代码
<?php
if ($_SERVER['REQUEST_METHOD']=='POST'){
$user = $_POST['email'];
$pass = $_POST['password'];
$sql = "select * from users where email = '$user' AND password = '$pass'";
require_once('config.php');
$result = mysqli_query($con , $sql);
$check = mysqli_fetch_array($result);
if(isset($check)){
echo "success";
}else{
echo "failure";
}
mysqli_close($con);
}
?>
这是文件config.php
<?php
$serverName = "localhost";
$userName = "root";
$password = "";
$dbName = "testDb"
$con = mysqli_connect($serverName , $userName , $password , $dbName) or die("connect failed");
?>
这是我的安卓代码
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
editTextEmail = (EditText) findViewById(R.id.editTextEmail);
editTextPassword = (EditText) findViewById(R.id.editTextPassword);
buttonLogin = (Button) findViewById(R.id.buttonLogin);
buttonLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
login();
}
});
}
@Override
protected void onResume() {
super.onResume();
SharedPreferences sharedPreferences = getSharedPreferences(config.SHARED_PREF_NAME , Context.MODE_PRIVATE);
loggedIn = sharedPreferences.getBoolean(config.LOGGEDIN_SHARED_PREF , false);
Log.e("txt" , "text is : " + loggedIn);
if (loggedIn){
Intent intent = new Intent(loginActivity.this , profileActivity.class);
startActivity(intent);
}
}
private void login(){
final String email = editTextEmail.getText().toString().trim();
final String password = editTextPassword.getText().toString().trim();
StringRequest stringRequest = new StringRequest(Request.Method.POST, config.LOGIN_URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("StartActivity", response.toString());
if(response.equalsIgnoreCase(config.LOGIN_SUCCESS)){
//Creating a shared preference
SharedPreferences sharedPreferences = loginActivity.this.getSharedPreferences(config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
//Creating editor to store values to shared preferences
SharedPreferences.Editor editor = sharedPreferences.edit();
//Adding values to editor
editor.putBoolean(config.LOGGEDIN_SHARED_PREF, true);
editor.putString(config.EMAIL_SHARED_PREF, email);
//Saving values to editor
editor.commit();
//Starting profile activity
Intent intent = new Intent(loginActivity.this, profileActivity.class);
startActivity(intent);
}else{
//If the server response is not success
//Displaying an error message on toast
Toast.makeText(loginActivity.this, "Invalid username or password", Toast.LENGTH_LONG).show();
Log.e("s" , "invalid sssssssssssssssssssssss");
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
public Map<String, String> getParams() {
Map<String,String> params = new HashMap<>();
params.put(config.KEY_EMAIL, email);
params.put(config.KEY_PASSWORD, password);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
当运行onResponse时,执行else命令。 post方法值的传输参数是错误的
三江源
答案 0 :(得分:1)
BasicNetwork.performRequest:意外的响应代码400
A 400表示请求格式错误。换句话说,客户端发送到服务器的数据流不遵守规则。
错误原因:
您忘记在$dbName
之后添加分号,这会导致数据库一次又一次地死亡,而不会通过登录链接显示任何Exception
,正确:
$dbName = "testDb"; //<--here forgot to add semicolon
更正 - 尝试代码:
@Override
public Map<String, String> getParams() {
Map<String,String> params = new HashMap<>();
params.put("user", email); //here
params.put("pass", password); //here
return params;
}
};
更正 - 在与表交互之前需要一次:
<?php
$user = $_POST['email'];
$pass = $_POST['password'];
require_once('config.php'); //here
$sql = "select * from users where email = '$user' AND password = '$pass'";
答案 1 :(得分:0)
而不是覆盖getParams()
,而不是覆盖getBodyContentType()
和getBody()
。
这样的事情:
StringRequest stringRequest = new StringRequest(Request.Method.POST, config.LOGIN_URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("StartActivity", response.toString());
if(response.equalsIgnoreCase(config.LOGIN_SUCCESS)){
//Creating a shared preference
SharedPreferences sharedPreferences = loginActivity.this.getSharedPreferences(config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
//Creating editor to store values to shared preferences
SharedPreferences.Editor editor = sharedPreferences.edit();
//Adding values to editor
editor.putBoolean(config.LOGGEDIN_SHARED_PREF, true);
editor.putString(config.EMAIL_SHARED_PREF, email);
//Saving values to editor
editor.commit();
//Starting profile activity
Intent intent = new Intent(loginActivity.this, profileActivity.class);
startActivity(intent);
}else{
//If the server response is not success
//Displaying an error message on toast
Toast.makeText(loginActivity.this, "Invalid username or password", Toast.LENGTH_LONG).show();
Log.e("s" , "invalid sssssssssssssssssssssss");
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
public byte[] getBody() throws AuthFailureError {
final JSONObject body = new JSONObject();
try {
body.put(config.KEY_EMAIL, email);
body.put(config.KEY_PASSWORD, password);
} catch (JSONException e) {
e.printStackTrace();
}
return body.toString().getBytes();
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type","application/json");
return headers;
}
};
请检查此问题:StringRequest with JSON body