Сейчас я впервые работаю в приложении на студии android. Сейчас у меня проблема, и я не знаю, с чего начать ... Я часами ищу документацию и все такое, но я не нашел что-то, что у меня работает.
Итак, мое приложение приложение для заказа гамбургеров. Я получаю данные с сервера, использующего API, который я создаю (простой файл php для подключения к базе данных и получения бургера, который я передаю приложению), затем я создаю представление с данными, которые я получаю.
Когда я здесь, пользователь может выбрать количество, которое он хочет для своего заказа, и затем ему нужно отправить свою команду на сервер. Но я не знаю, как сделать эту часть приложения. Я пробую вещи, которые нашел inte rnet, но никогда не получал ответа от моего сервера или чего-то еще. Немного сложно работать, ничего не засея. Вот мой дизайн приложения: Вид приложения с точки зрения пользователя
А вот мой код:
- 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