php - 尝试使用 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';
}
?>
解决方案
推荐阅读
- php - 卷曲忽略 CURLOPT_FILE
- r - R 中按组划分的树状图的颜色分支(没有 h 或 k 元素)
- c# - 如何处理应用程序中长时间运行的请求并允许用户在不冻结 UI 的情况下访问应用程序
- javascript - 通过Javascript访问s3对象时区分文件不存在和访问被拒绝
- for-loop - 如何使用动态创建的选项卡和 for 循环显示 ggplotly 图?
- python-3.x - python - 如何将一个窗口中计算的值访问到python tkinter中的另一个窗口?
- javascript - JavaScript Async/Await:尝试修改工作代码失败
- autodesk-forge - 无法获取 Forge 清单 - Autodesk Forge 查看器
- android - :kotlin.UninitializedPropertyAccessException:lateinit 属性管理器尚未初始化
- c# - 使用 Directory.GetFiles 作为条件来检查某些文件是否在目录中,c# 脚本