Не удается отправить данные в базу данных с помощью Volley

#php #android #mysql #post #android-volley

#php #Android #mysql #Публикация #android-volley

Вопрос:

Мое приложение получает название региона от mapActivity с помощью getStringExtra , затем включается в строку, полученную в результате текущей активности, которая General_Info должна быть отправлена в онлайн-базу данных.

В PHP-коде нет ошибки.

Я тестировал приложение, используя Wi-Fi и data, но, к сожалению, оно всегда возвращает «fail».

Я понятия не имею, в чем проблема с моим кодом.

Прилагается мой код

 StringRequest request=new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            if(response.contains("SUCCESS")){
                Toast.makeText(getApplicationContext(), response, Toast.LENGTH_SHORT).show();

            }
            else{
                Toast.makeText(getApplicationContext(), "fail", Toast.LENGTH_SHORT).show();

            }

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getApplicationContext(), "system error", Toast.LENGTH_SHORT).show();

            error.printStackTrace();
        }
    }){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String,String> param=new HashMap<String, String>();
            param.put("householdid",houseNo.getText().toString());
            param.put("region", region);
            param.put("totalmembers", totalMembers.getText().toString());
            param.put("totalfemale", totalFemale.getText().toString());
            param.put("totalmale", totalMale.getText().toString());

            return param;
        }
    };
    MySingleton.getInstance(General_Info.this).addToRequestQueue(request);
}
  

php-код:

 <?php
if($_SERVER['REQUEST_METHOD']=='POST'){
    include_once("connect.php");

    $householdId = $_POST['householdid'];
    $region = $_POST['region'];
    $totalMembers = $_POST['totalmembers'];
    $totalFemale = $_POST['totalfemale'];
    $totalMale = $_POST['totalmale'];
    $result = mysqli_query($con,"INSERT INTO households (householdId,region,totalMembers,totalFemale,totalMale) 
      VALUES ('$householdId',' $region','$totalMembers','$totalFemale',' $totalMale')");

    if($result == true) {
        echo "SUCCESS";
    }
    else{
        echo "FAILURE ";
    }
}
mysqli_close($con);
  

Комментарии:

1. Я думаю, вы пропустили код 🙂

2. Добавляйте журналы во все полученные ответы (Log.d) и вставляйте полученный ответ. Кроме того, используйте кнопку code при вставке своего кода, не делайте это так, как вы делали, прикрепляя картинку.

3. используйте Log для каждого введенного вами параметра, а также регистрируйте ответ..

4. Прежде всего, я предлагаю вам использовать Retrofit…it это намного проще, чем Volley. И, как говорили другие, разместите некоторые журналы с помощью Log.d и просмотрите свой журнал cat

5. отправьте свой URL, пожалуйста, без этого, как я проверю, с какой проблемой вы столкнулись

Ответ №1:

На вашем месте я бы внес изменения в код следующим образом. Прежде всего, я использую medoo в качестве фреймворка базы данных, который действительно прост в использовании и полностью документирован. Если вы используете это, ваша вставка будет выглядеть следующим образом:

 $householdId = $_POST['householdid'];
$region = $_POST['region'];
$totalMembers = $_POST['totalmembers'];
$totalFemale = $_POST['totalfemale'];
$totalMale = $_POST['totalmale'];

// $database is an object which you declared using medoo.
$result = $database->insert("households",[
    "householdId" => $householdId,
    "region" => $region,
    "totalMembers" => $totalMembers,
    "totalFemale" => $$totalFemale,
    "totalMale" => $totalMale
    ]);
  

И как в документации сказано для insert:

Возврат: [число] Последний идентификатор вставки

Итак, вы просто проверяете, $result это >= 1 или нет:

 if($result >= 1) {
    echo "SUCCESS";
}
else{
    echo "FAILURE ";
}
  

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

Сначала вам нужен генератор сервисов:

 public class ServiceGenerator {

    public static final String API_BASE_URL = "http://your.api-base.url";

    private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

    private static Retrofit.Builder builder =
        new Retrofit.Builder()
                .baseUrl(API_BASE_URL)
                .addConverterFactory(GsonConverterFactory.create());

    public static <S> S createService(Class<S> serviceClass) {
        Retrofit retrofit = builder.client(httpClient.build()).build();
        return retrofit.create(serviceClass);
    }
}
  

Затем вы должны написать свой собственный интерфейс…допустим, у нас есть ваш веб-сервис, который выглядит примерно так: http://your.api-base.url/my-service/insert.php

И ваш интерфейс:

 public interface MyClient {  
    @POST("/myservice/insert.php")
    Call<String> insert(
        @Body("householdid") String householdId,
        @Body("region") String region,
        @Body("totalmembers") String totalMembers,
        @Body("totalfemale") String totalFemale,
        @Body("totalmale") String totalMale
    );
}
  

Что ж, теперь все готово.

Для вызова метода вы должны сделать это:

 MyClient client = ServiceGenerator.createService(MyClient.class);
Call<String> insertCall = client.insert(houseNo.getText().toString(),
        region,
        totalMembers.getText().toString(),
        totalFemale.getText().toString(),
        totalMale.getText().toString());

        insertCall.enqueue(new Callback<String>() {
                @Override
                public void onResponse(Call<String> call, Response<String> response) {
                    if(response != null amp;amp; response.isSuccessful()){
                        // you have a response...handle it
                    }
                }
                @Override
                public void onFailure(Call<OwnerResponse> call, Throwable t) {
                    //PROBLEM!!!
                }
            }
  

Комментарии:

1. Спасибо @Mohammad Z 🙂 я уже решил проблему, фактически у меня была проблема со структурой моей базы данных, и все, что вы опубликовали, тоже помогло мне. Большое вам спасибо