Как отправить массив JSON в HTTP-запрос с помощью библиотеки Android Studio Volley - PullRequest
0 голосов
/ 04 октября 2019

Я провел много исследований, но не увенчался успехом.

У меня есть приложение для Android. Где я могу добавить имя сохраняемого человека в базу данных SQLite.

Я хочу иметь кнопку SYNC, которая затем помещала данные в MYSQL с помощью REST API (HTTP-запрос).

Итак, во-первых, ясоздал функцию для получения всех данных из таблицы имен.

        //get the data to to send to mysql
    final Cursor data = mDatabaseHelper.getData();

    //Create an Array list
    final ArrayList<String> listData = new ArrayList<>();


    //Declare json array
    final JSONArray datatoperse = new JSONArray();


    //Store the result in array using while loop
    while (data.moveToNext()){
        //get the value from the database in column 1
        //than add to array list
        listData.add(data.getString(1));

        //append data to json array
        datatoperse.put(data.getString(1));

    }
    System.out.println(datatoperse.toString());

system.out.print выглядит следующим образом

 I/System.out: ["name1","name2","name3"]

Затем я сохраняю данныев массив JSON. Затем я хочу отправить HTTP-запрос на сервер.

  String url = "server host name";

        JsonArrayRequest request = new JsonArrayRequest(Request.Method.POST, url, null, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {

                final String result = response.toString();
                Log.d("Response","result :" + result);

            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        })
        {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> params = new HashMap<String,String>();

                   params.put("array",jsonText);


                return super.getParams();
            }
        }  ;
        mQueue.add(request);

У меня есть страница php, на которую отправляется этот запрос.

<?php

 //Receive the RAW post data.
$content = $_POST["name"];
//$json = '{"name": "wewqewq"}';
$obj = json_decode($content);


 $insert_stmt = $mysqli_scs->prepare("INSERT INTO xamarinuserregister_ur (name) VALUES (?)");
 $name =$obj->{'name'};


 $insert_stmt->bind_param("s", $name);
 //Execute the statement
 $insert_stmt->execute();


?>

Я не знаю, что яя делаю неправильно

Я не уверен, нормально ли работает мой JSON.

Может кто-нибудь помочь мне, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Вы можете использовать мою библиотеку GridmiAPI .

Это решение для вас.

// Init library YOU CAN WRITE IT ONE TIME
GridmiAPI.init("http://example.com/API/", 8000, JSONObject.class);

// Create request
GridmiAPI.Request request = new GridmiAPI.Request("POST", "load");

// TODO FULL URL EQUAL `STATIC + ENDPOINT` = "http://example.com/API/load"

// Create body JSONArray of the request
JSONArray jsonArrayBody = new JSONArray();
jsonArrayBody.put("Item 1");
jsonArrayBody.put("Item 2");
jsonArrayBody.put("Item 2");

// Add to request
request.setBody(jsonArrayBody);

// Send request
GridmiAPI.onRequest(this, request, new GridmiAPI.Handler.OUT() {

    @Override
    protected void onSuccess(GridmiAPI.Response response) {
        try {
            boolean result = ((JSONObject) response.getData()).getBoolean("result");
            ((TextView) findViewById(R.id.title)).setText(result ? "OK" : "NOT OK");
        } catch (Exception exception) {
            this.onFailed(exception);
        }
    }

    @Override
    protected void onFailed(Exception exception) {
        Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_LONG).show();
    }

}).start();
0 голосов
/ 04 октября 2019

Попробуйте этот код

<?php

// Receive the RAW post data.
$content = file_get_contents("php://input");
// $json = '{"name": "wewqewq"}';
$obj = json_decode($content);

$insert_stmt = $mysqli_scs->prepare("INSERT INTO xamarinuserregister_ur (name) VALUES (?)");
$name = $obj->name;

$insert_stmt->bind_param("s", $name);
// Execute the statement
$insert_stmt->execute();

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...