我已经尝试解决了一个多星期,我遇到了一个凌空字符串请求,该请求将反馈发送到php服务器,然后保存到数据库。
android代码:
final Button sendMessage = findViewById(R.id.sendMessage);
sendMessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String messageFinal = message.getText().toString();
if(messageFinal.isEmpty()){
Toast.makeText(FeedbackActivity.this, "Message is empty!", Toast.LENGTH_LONG).show();
return;
}
String sendUrl = "https://example.com/feedback.php";
StringRequest jsonRequestSend = new StringRequest(Request.Method.POST, sendUrl, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("respond", response);
try
{
JSONObject respondObject = new JSONObject(response);
if(respondObject.get("response").equals("true")){
Intent homepageIntent = new Intent(FeedbackActivity.this, GlobalListActivity.class);
FeedbackActivity.this.startActivity(homepageIntent);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("VOLLEY", error.toString());
}
}){
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<>();
params.put("email", userEmail);
params.put("message", messageFinal);
return params;
}
};
jsonRequestSend.setRetryPolicy(new DefaultRetryPolicy(0,-1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
RequestQueue rQueue = Volley.newRequestQueue(FeedbackActivity.this);
rQueue.add(jsonRequestSend);
}
});
在php中,我可以将反馈发送到数据库:
require_once('dbConnect.php');
$email = $_POST['email'];
$message = $_POST['message'];
$now = new \DateTime('now');
$dateTime = $now->format('Y-m-d H:i:s');
$status = "new";
$sql = "INSERT INTO `yc_contacts` (`Email`,`Message`,`Date` ,`Status` ) VALUES('$email', '$message' , '$dateTime' , '$status')";
if ($conn->query($sql) === TRUE) {
$res = "true";
} else {
$res = "false";
}
$response = (object) [
'response' => $res
];
echo json_encode($response, JSON_UNESCAPED_UNICODE);
我从3种不同的设备上尝试过此方法,并且可以正常工作,但是有时我在数据库中没有消息也没有电子邮件时得到空结果。有人能帮我一下吗 ? ,我做错了什么?
更新:
进行进一步的挖掘之后,我现在知道当我进入标头时,像这样:User-Agent: Dalvik/2.1.0 (Linux; U; Android 9; SM-N960U Build/PPR1.180610.011)
我可以正确获取数据,但是当我获得这种用户代理时:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.2)
然后我只能得到空数据,应该在客户端还是服务器端解决此问题,我该如何解决。
答案 0 :(得分:1)
您可以防止将空数据插入数据库
if(!empty($_POST['email']) && !empty($_POST['message'])) {
// insert into table
}
否则,您可以在android端检查那些发布数据是否为空。