Android Volley StringRequest иногда дает пустые коляски - PullRequest
0 голосов
/ 27 июня 2019

Я пытался решить эту проблему более недели, у меня есть запрос строки залпа, который отправляет отзывы на 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)

, тогда я получаю только пустые данные, если это будет решено на стороне клиента или сервера, и как я могу это решить.

1 Ответ

1 голос
/ 01 июля 2019

Вы можете предотвратить вставку пустых данных в базу данных

if(!empty($_POST['email']) && !empty($_POST['message'])) {
        // insert into table
}

Или же вы можете проверить эти данные на стороне Android, они пустые или нет.

...