【发布时间】:2018-10-18 08:36:48
【问题描述】:
我正在开发一个 android 项目,但我遇到了一个问题:toast 消息没有显示在我的应用程序上。当我在手机上测试时,toast 消息显示为空白。
这里是 Register.java
public class Register extends AppCompatActivity implements View.OnClickListener {
private EditText etUsername, etPassword, etPassword2, etEmail;
private Button bRegis;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
etUsername = (EditText) findViewById(R.id.etUsername);
etPassword = (EditText) findViewById(R.id.etPassword);
etPassword2= (EditText) findViewById(R.id.etPassword2);
etEmail = (EditText) findViewById(R.id.etEmail);
bRegis = (Button) findViewById(R.id.bRegis);
progressDialog = new ProgressDialog(this);
bRegis.setOnClickListener(this);
}
private void RegisterUser(){
final String Email = etEmail.getText().toString().trim();
final String Username = etUsername.getText().toString().trim();
final String Password = etPassword.getText().toString().trim();
progressDialog.setMessage("Registering User...");
progressDialog.show();
StringRequest stringRequest = new StringRequest(Request.Method.POST,
Constants.URL_REGISTER,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
progressDialog.dismiss();
try {
JSONObject jsonObject = new JSONObject(response);
Toast.makeText(getApplicationContext(), jsonObject.getString("message"), Toast.LENGTH_LONG).show();
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressDialog.hide();
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).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);
return params;
}
};
RequestHandler.getInstance(this).addToRequestQueue(stringRequest);
}
@Override
public void onClick(View view){
String Password = etPassword.getText().toString();
String Password2= etPassword2.getText().toString();
if(Password2.equals(Password) && view == bRegis) {
RegisterUser();
}else{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Error");
builder.setMessage("Password does not match");
builder.setPositiveButton("Ok", null);
AlertDialog dialog = builder.show();
}
}
}
这里是 register.php 文件
<?php
require_once 'DbOperations.php';
$response = array();
if($_SERVER['REQUEST_METHOD']=='POST'){
if(
isset($_POST['Username']) and
isset($_POST['Email']) and
isset($_POST['Password']))
{
//operate the data further
$db = new DbOperations();
$result = $db->createUser( $_POST['Username'],
$_POST['Password'],
$_POST['Email']
);
if($result == 1){
$response["error"] = false;
$response["message"] = "User registered successfully";
}elseif($result == 2){
$response["error"] = true;
$response["message"] = "Some error occurred please try again";
}elseif($result == 0){
$response["error"] = true;
$response["message"] = "It seems you are already registered, please choose a different email and username";
}
}else{
$response['error'] = true;
$response['message'] = "Required fields are missing";
}
}else{
$response['error'] = true;
$response['message'] = "Invalid Request";
}
echo json_encode($response);
?>
这里是 DbOperations.php
<?php
class DbOperations{
private $con;
function __construct(){
require_once dirname(__FILE__).'/DbConnect.php';
$db = new DbConnect();
$this->con = $db->connect();
}
/*CRUD -> C -> CREATE */
public function createUser($Username, $Password, $Email){
if($this->isUserExist($Username,$Email)){
return 0;
}else{
$Password = md5($Password);
$stmt = $this->con->prepare("INSERT INTO `User` (`id`, `Username`, `Password`, `Email`) VALUES (NULL, ?, ?, ?);");
$stmt->bind_param("sss",$Username,$Password,$Email);
if($stmt->execute()){
return 1;
}else{
return 2;
}
}
}
public function UserLogin($Username, $pass){
$Password = md5($pass);
$stmt = $this->con->prepare("SELECT id FROM User WHERE Username = ? AND Password = ?");
$stmt->bind_param("ss",$Username,$Password);
$stmt->execute();
$stmt->store_result();
return $stmt->num_rows > 0;
}
public function getUserByUsername($Username){
$stmt = $this->con->prepare("SELECT * FROM User WHERE Username = ?");
$stmt->bind_param("s",$Username);
$stmt->execute();
return $stmt->get_result()->fetch_assoc();
}
private function isUserExist($Username, $Email){
$stmt = $this->con->prepare("SELECT id FROM User WHERE Username = ? OR Email = ?");
$stmt->bind_param("ss", $Username, $Email);
$stmt->execute();
$stmt->store_result();
return $stmt->num_rows > 0;
}
}
?>
这里是我的问题的图像:
提前谢谢,对不起我的英语不好
【问题讨论】:
-
请不要自己滚动密码散列,特别是不要使用 MD5() 或 SHA1()。 PHP 提供
password_hash()和password_verify()请使用它们。这里有一些good ideas about passwords如果你使用的是5.5之前的PHP版本there is a compatibility pack available here -
您可以尝试记录响应变量以查看其中包含的内容
-
@RiggsFolly 啊我明白了,谢谢我会尝试使用它,但我真正的问题是吐司消息
-
@gratienasimbahwe 在哪里查看日志? sry 在 android studio 中真的很新
-
没关系。在
public void onResponse(String response) {中插入Log.d("RESPONSE",response)并在运行时,如果您的设备已连接到android studio,请在android studio 底部找到logcat 并打开它。然后在搜索字段中插入“RESPONSE”作为键
标签: php android-studio android-toast