gpt4 book ai didi

java - 向服务器发送 POST 请求

转载 作者:行者123 更新时间:2023-12-01 16:15:24 25 4
gpt4 key购买 nike

我目前第一次在 android studio 上的应用程序中工作。我目前面临一个问题,我不知道从哪里开始......我搜索了几个小时的文档和所有内容,但我没有找到适合我的东西。

所以我的应用程序是一个订购汉堡的应用程序。我通过我构建的 API 从服务器获取数据(一个简单的 php 文件,用于连接到数据库并获取我提供给应用程序的汉堡),然后我使用获取的数据创建 View 。

当我在这里时,用户可以选择他想要的订单数量,然后他需要将命令发送到服务器。但我不知道如何执行应用程序的这一部分。我尝试了在互联网上找到的东西,但我从未收到服务器或任何东西的响应。没有看到任何东西就工作有点困难。这是我的应用程序设计: App View from user perspective

这是我的代码:

  1. 主要 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();
}

}
  • 这是我的 DownLoadJson 类
  • 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
  •     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+%22芝士汉堡%22%2C%22quantite%22%3A+%220 %22%7D%2C+%7B%22id%22%3A+%223%22%2C%22nom%22%3A+%22Giant%22%2C%22quantite%22%3A+%220%22%7D%2C+%7B%22id %22%3A+%224%22%2C%22nom%22%3A+%22巨型+最大%22%2C%22数量%22%3A+%220%22%7D%2C+%7B%22id%22%3A+%225% 22%2C%22nom%22%3A+%22培根+最大%22%2C%22数量%22%3A+%220%22%7D%2C+%7B%22id%22%3A+%226%22%2C%22nom%22 %3A+%22Supreme+奶酪%22%2C%22quantite%22%3A+%220%22%7D%2C+%7B%22id%22%3A+%227%22%2C%22nom%22%3A+%22Supreme+胡椒%22 %2C%22quantite%22%3A+%220%22%7D%2C+%7B%22id%22%3A+%228%22%2C%22nom%22%3A+%22至尊+鸡%22%2C%22quantite%22%3A+ %220%22%7D%2C+%7B%22id%22%3A+%229%22%2C%22nom%22%3A+%22鱼+汉堡%22%2C%22quantite%22%3A+%220%22%7D%2C+ %7B%22id%22%3A+%2210%22%2C%22nom%22%3A+%22鸡肉+汉堡%22%2C%22quantite%22%3A+%220%22%7D%2C+%7B%22id%22%3A+ %2211%22%2C%22nom%22%3A+%22空竹%22%2C%22quantite%22%3A+%220%22%7D%2C+%7B%22id%22%3A+%2212%22%2C%22nom%22 %3A+%22烧烤%22%2C%22定量%22%3A+%220%22%7D%5D

    '''

    我在互联网上检查,当我将其解码为 json 时,我得到: JSON DECODE

    最佳答案

    我有一个错误,因为我发送的是非 Json 数组。在 doinbackground 方法中,我使用 urlEncode,当我检查该功能正在做什么时,我读到:

    The space character " " is converted into a plus sign "+".

    这就是为什么当我对 file_get_contents("php://input") 进行 json_decode 时,我得到了错误的 jsonArray

    关于java - 向服务器发送 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62407479/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com