首页 > 解决方案 > 尝试使用 android api 16 及更低版本的设备发出请求时显示未知字符 (????) 而不是波斯字符

问题描述

嗨,我正在用 java 中的 android studio 开发一个 android 应用程序,它将注册信息发送到服务器,我正在使用 volley 库发出 HTTP 请求(GET 方法),而对于我的服务器端,我正在使用 php 进行编码以获取信息从客户端。
我的问题是当我使用 api 16 或更低版本的 android 设备将波斯字符发送到服务器时,服务器获取请求参数内容如下:???? ,当我从具有 api 17 及更高版本的设备发出请求时,我没有遇到此问题,
我尝试以 JSON 格式发送注册信息,但它不起作用。

我的 php 版本 5.3.5,mySql 5.5.8 和 android studio 版本 3。
这是我的 android 客户端代码:

private void sendDataToServer() {

    SendDataObject dataObject = new SendDataObject();
    dataObject.setName(edtName.getText().toString());
    dataObject.setFamily(edtFamily.getText().toString());
    dataObject.setCodeMelli(edtCodeMelli.getText().toString());
    dataObject.setOstan(edtOstan.getText().toString());
    dataObject.setID(ID);





    String url = SplashActivity.SERVER_IP + "sign_up_users.php?name=" + edtName.getText()
            +
            "&family=" + edtFamily.getText().toString().trim() +
            "&codeMelli=" + edtCodeMelli.getText().toString().trim() +
            "&ostan=" + edtOstan.getText().toString().trim() +
            "&ID=" + ID;


    StringRequest getRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    if (response.toString().equals("true")) {

                        SplashActivity.USER_ID = ID;

                        Intent intent = new Intent(SignUpActivity.this, MainActivity.class);
                        startActivity(intent);
                        setSharedPrefs();
                        overridePendingTransition(R.anim.slide_i_left,R.anim.slide_i_right);
                    }
                    else {
                        NoInternetDialog cdd = new NoInternetDialog(SignUpActivity.this);
                        cdd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                        cdd.show();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            }
    );
    getRequest.setRetryPolicy(new DefaultRetryPolicy(18000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    RequestQueue requestQueue = Volley.newRequestQueue(SignUpActivity.this);
    requestQueue.add(getRequest);



}

和我的 php 服务器端代码 sign_up_users.php :

<?php
    include 'connect.php';


    if (isset($_GET["name"]) && isset($_GET["family"]) && isset($_GET["codeMelli"]) && isset($_GET["ostan"]) && isset($_GET["ID"])) {
        $name = $_GET["name"];
        $family = $_GET["family"];
        $codeMelli = $_GET["codeMelli"];
        $ostan = $_GET["ostan"];
        $ID = $_GET["ID"];




        $stmt = $conn->prepare("UPDATE users SET name=:name ,family=:family, validation_status=1, codeMelli=:codeMelli , ostan=:ostan WHERE ID=:ID");

        $stmt->bindParam(':name',$name);
        $stmt->bindParam(':family',$family);
        $stmt->bindParam(':codeMelli',$codeMelli);
        $stmt->bindParam(':ostan',$ostan);
        $stmt->bindParam(':ID',$ID);
        $res = $stmt->execute();

        $stmt = null;

        if ($res) {
            echo 'true';
        }
        else {
            echo 'false';
        }

    }
    else {
        echo 'error_parameters';
    }
?>

标签: phpandroidmysqlandroid-volleyfarsi

解决方案


推荐阅读