Отправить запрос на сервер - PullRequest
0 голосов
/ 16 июня 2020

Сейчас я впервые работаю в приложении на студии android. Сейчас у меня проблема, и я не знаю, с чего начать ... Я часами ищу документацию и все такое, но я не нашел что-то, что у меня работает.

Итак, мое приложение приложение для заказа гамбургеров. Я получаю данные с сервера, использующего API, который я создаю (простой файл php для подключения к базе данных и получения бургера, который я передаю приложению), затем я создаю представление с данными, которые я получаю.

Когда я здесь, пользователь может выбрать количество, которое он хочет для своего заказа, и затем ему нужно отправить свою команду на сервер. Но я не знаю, как сделать эту часть приложения. Я пробую вещи, которые нашел inte rnet, но никогда не получал ответа от моего сервера или чего-то еще. Немного сложно работать, ничего не засея. Вот мой дизайн приложения: Вид приложения с точки зрения пользователя

А вот мой код:

  1. Main Activity
public class MainActivity extends AppCompatActivity {
        ListView listView;

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                listView = findViewById(R.id.listView);
                downLoadJson("http://192.168.0.5/API/burger.php");
            }

            private void downLoadJson(final String urlWebService) {
                DownLoadJson getJson = new DownLoadJson(urlWebService, this);
                getJson.execute();
            }

        }
Вот мой DownLoad Json Class
import android.app.Activity;
import android.os.AsyncTask;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;

public class DownLoadJson extends AsyncTask<Void, Void, String> {
    final String urlWebService;
    final Activity activity;
    private ArrayList<Burger> burgersList;

    public DownLoadJson(String url, Activity activity) {
        this.urlWebService = url;
        this.activity = activity;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //Toast.makeText(activity.getApplicationContext(),"DOWNLOADING",Toast.LENGTH_LONG).show();
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        try {
            renderView(s);
            Button btnSend = activity.findViewById(R.id.btnSend);
            btnSend.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.d("ENVOYER", ""+burgersList.toString());
                    new SendPostRequestToServer().execute("http://192.168.0.5/API/ServiceCommandes.php",burgersList.toString());
                }
            });
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected String doInBackground(Void... voids) {
        try {
            // Ouverture de la connexion avec l'api
            URL url = new URL(urlWebService);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            StringBuilder stringBuilder = new StringBuilder();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String json;
            while ((json = bufferedReader.readLine()) != null) {
                stringBuilder.append(json + "\n");
            }
            return stringBuilder.toString().trim();
        } catch (MalformedURLException e) {
            Log.d("ERROR", "WRONG URL");
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            Log.d("ERROR", "Connection I/O error ");
            e.printStackTrace();
            return null;
        } catch (Exception e) {
            return null;
        }
    }

    private void renderView(String json) throws JSONException {
        JSONArray jsonArray = new JSONArray(json);
        JSONObject jsonObject = jsonArray.getJSONObject(0);
        if (jsonObject.has("recette")) {
            burgersList = Burger.fromJson(jsonArray);
            BurgerAdapter adapter = new BurgerAdapter(activity, burgersList);
            ListView listView = (ListView) activity.findViewById(R.id.listView);
            listView.setAdapter(adapter);
            //adapter.addAll(burgersList);
            Log.d("DEBUG", "BURGER LIST = " + burgersList.size());
        }
    }

    public ArrayList<Burger> returnArrayList() {
        return burgersList;
    }
}
Вот мой SendPostRequestToServer, который я нашел inte rnet
    import android.os.AsyncTask;
    import android.util.Log;

    import java.io.DataOutputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;

    public class SendPostRequestToServer extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... params) {

            String data = "";

            HttpURLConnection httpURLConnection = null;
            try {

                httpURLConnection = (HttpURLConnection) new URL(params[0]).openConnection();
                httpURLConnection.setRequestMethod("POST");

                httpURLConnection.setDoOutput(true);

                DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream());
                wr.writeBytes("PostData=" + params[1]);
                wr.flush();
                wr.close();

                InputStream in = httpURLConnection.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(in);

                int inputStreamData = inputStreamReader.read();
                while (inputStreamData != -1) {
                    char current = (char) inputStreamData;
                    inputStreamData = inputStreamReader.read();
                    data += current;
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (httpURLConnection != null) {
                    httpURLConnection.disconnect();
                }
            }

            return data;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            Log.e("POST :", result); // this is expecting a response code to be sent from your server upon receiving the POST data
        }
    }
Php Файл:
<?php
// Headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
$PostData = json_decode(file_get_contents("php://input"));
if(!empty(($PostData)){
    http_response_code(200);
    echo json_encode(array("message" => "DATA RECEIVE"));

}else{
    http_response_code(503);
    echo json_encode(array("message" => "DATA ERROR"));
}

$con=mysqli_connect("localhost","root","","fastfood");
// check erreur
if (mysqli_connect_errno())
{
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_close($con);
?>

Когда я проверяю file_get_contents ("php: // input"); я получаю это: '' 2020-06-16 15: 16: 06.174 12488-12488 / com.example.fastfood D / POST ::% 5B% 7B% 22id% 22% 3A +% 221% 22% 2C% 22nom% 22% 3A +% 22Hamburger% 22% 2C% 22quantite% 22% 3A +% 220% 22% 7D% 2C +% 7B% 22id% 22% 3A +% 222% 22% 2C% 22nom% 22% 3A +% 22Cheeseburger% 22% 2C% 22квантит% 22% 3A +% 220% 22% 7D% 2C +% 7B% 22id% 22% 3A +% 223% 22% 2C% 22ном% 22% 3A +% 22Giant% 22% 2C% 22квантит% 22% 3A +% 220% 22% 7D% 2C +% 7B% 22id% 22% 3A +% 224% 22% 2C% 22nom% 22% 3A +% 22Giant + Макс.% 22% 2C% 22quantite% 22% 3A +% 220% 22% 7D% 2C +% 7B% 22id % 22% 3A +% 225% 22% 2C% 22nom% 22% 3A +% 22Bacon + Макс.% 22% 2C% 22quantite% 22% 3A +% 220% 22% 7D% 2C +% 7B% 22id% 22% 3A +% 226% 22% 2C% 22ном% 22% 3A +% 22Supreme + Cheese% 22% 2C% 22quantite% 22% 3A +% 220% 22% 7D% 2C +% 7B% 22id% 22% 3A +% 227% 22% 2C% 22ном% 22% 3A +% 22Supreme + Pepper% 22% 2C% 22quantite% 22% 3A +% 220% 22% 7D% 2C +% 7B% 22id% 22% 3A +% 228% 22% 2C% 22nom% 22% 3A +% 22Supreme + Chicken% 22% 2C% 22quantite% 22% 3A +% 220% 22% 7D% 2C +% 7B% 22id% 22% 3A +% 229% 22% 2C% 22nom% 22% 3A +% 22Fish + Burger% 22% 2C% 22quantite% 22% 3A +% 220% 22% 7D% 2C +% 7B% 22id% 22% 3A +% 2210% 22% 2C% 22nom% 22% 3A +% 22Chicken + Burger% 22% 2C% 22quantite% 22% 3A +% 220% 22% 7D% 2C +% 7B% 22id % 22% 3A +% 2211% 22% 2C% 22nom% 22% 3A +% 22Diabolo% 22% 2C% 22quantite% 22% 3A +% 220% 22% 7D% 2C +% 7B% 22id% 22% 3A +% 2212% 22% 2C % 22ном% 22% 3A +% 22 Барбекю% 22% 2C% 22quantite% 22% 3A +% 220% 22% 7D% 5D

'' '

Я проверяю inte rnet и когда Я декодирую это как json и получаю: JSON DECODE

1 Ответ

0 голосов
/ 16 июня 2020

У меня была ошибка, потому что я отправлял массив, отличный от Json. В методе doinbackground я использую urlEncode, и когда я проверил, что делает эта функция, я прочитал:

Пробел "" преобразуется в знак плюс "+".

поэтому, когда я json_decode file_get_contents ("php: // input"), у меня был неправильный jsonArray

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