【问题标题】:Android studio toast message not showing from jsonAndroid Studio Toast 消息未从 json 显示
【发布时间】: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; 
    }

}
?>

这里是我的问题的图像:

toast message blank on phone

提前谢谢,对不起我的英语不好

【问题讨论】:

  • 请不要自己滚动密码散列,特别是不要使用 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


【解决方案1】:

这是我的简单 Api.php 文件。希望这会有所帮助:

<?php  
    require_once 'DbConnect.php';

    $response = array();

    if(isset($_GET['apicall'])){

        switch($_GET['apicall']){

            case 'add_data':
                if(isTheseParametersAvailable(array('name','email', 'phone'))){
                    $name = $_POST['name']; 
                    $phone = $_POST['phone']; 
                    $email = $_POST['email'];

                    $stmt = $conn->prepare("INSERT INTO users(name, email, phone) VALUES (?, ?, ?)");
                    $stmt->bind_param("sss", $name, $email, $phone);

                    if($stmt->execute()){
                        $stmt->close();
                        $response['error'] = false; 
                        $response['message'] = 'Data entered successfully'; 
                    }else{
                        $response['error'] = true; 
                        $response['message'] = 'Cannot enter data';
                    } 
                }else{
                    $response['error'] = true; 
                    $response['message'] = 'required parameters are not available'; 
                }
            break;



            default: 
            $response['error'] = true; 
            $response['message'] = 'Invalid Operation Called';
        }

    }else{
        $response['error'] = true; 
        $response['message'] = 'Invalid API Call';
    }

 echo json_encode($response);

 function isTheseParametersAvailable($params){

    foreach($params as $param){
        if(!isset($_POST[$param])){
        return false; 
    }
 }
 return true; 
 }

 ?>

【讨论】:

    【解决方案2】:

    在你的最终变量之后,也定义下面的变量:

    final Activity currentActivity = this;
    

    现在,在 Toast 中使用此变量而不是 getApplicationContext()

    Toast.makeText(currentActivity, jsonObject.getString("message"), Toast.LENGTH_LONG).show();
    

    或者

    Toast.makeText(currentActivity, error.getMessage(), Toast.LENGTH_LONG).show();
    

    【讨论】:

    • 对不起...我刚刚检查了java代码。
    猜你喜欢
    • 1970-01-01
    • 2011-12-09
    • 2015-02-12
    • 1970-01-01
    • 2014-07-04
    • 2020-07-30
    • 1970-01-01
    • 2019-01-31
    相关资源
    最近更新 更多