Schritt 5 - Insert AlertDialog
In der insert.php nutzen wir zum Empfangen, die POST-Methode, das wird noch wichtig für die Ausführung der Insert-Methode in der App.
insert.php
<?php
include 'dbconn.php';
header('Content-Type: application/json');
$response = array();
$manufacturer = (isset($_POST['manufacturer'], $_POST['type'])) ? $_POST['manufacturer'] : die(json_encode(array('success' => -1), JSON_PRETTY_PRINT));
$type = (isset($_POST['manufacturer'], $_POST['type'])) ? $_POST['type'] : die(json_encode(array('success' => -1), JSON_PRETTY_PRINT));
$insert = "INSERT INTO devices(manufacturer, type) VALUES(:manufacturer, :type)";
$insertQuery = $conn->db->prepare($insert);
$insertQuery->bindParam(":manufacturer", $manufacturer, PDO:: PARAM_STR);
$insertQuery->bindParam(":type", $type, PDO:: PARAM_STR);
if ($insertQuery->execute() && $insertQuery->errorCode() == 0) {
echo json_encode(array('success' => 1), JSON_PRETTY_PRINT);
} else {
echo json_encode(array('success' => -1), JSON_PRETTY_PRINT);
}
$insertQuery->closeCursor();
$conn->db = null;
?>
Wir benötigen noch eine Klasse Insert, welche für den Callback (Response) unseres ApiService gebraucht wird.
public class Insert {
private int success;
public int getSuccess() {
return success;
}
}
Zunächst erweitern wir das Interface ApiService.
@FormUrlEncoded - dadurch werden die POST-Field's encoded.
@POST - hier wird wieder der Pfad zur Datei angegeben und gleichzeitig auf die POST-Methode verwiesen
@Field - die Felder, die im PHP-Script als POST's verarbeitet werden sollen.
@FormUrlEncoded
@POST("/api/insert.php")
Call<Insert> insertDevice(
@Field("manufacturer")
String manufacturer,
@Field("type")
String type
);
Wir erstellen uns ein eigenes Layout, da wir zwei EditText-Views brauchen.
prompts.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<EditText
android:id="@+id/editTextDialogManufacturer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Manufacturer">
<requestFocus/>
</EditText>
<EditText
android:id="@+id/editTextDialogType"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Type"/>
</LinearLayout>
Nun erstellen wir uns direkt eine Methode für den AlertDialog, um noch etwas Übersicht zu haben. Dazu inflate wir das Layout prompts.xml und initialisieren die EditText-Views.
In onClick des Positiv-Button werden dir die Daten aus den EditText-Views an den Server senden. Wie beim Select aus der Datenbank funktioniert das Ganze auch beim Insert zur Datenbank.
C
all insertCall = apiService.insertDevice(manufacturer, type);`
Das Resultat - ob es geklappt hat oder nicht - lassen wir uns in einem Toast anzeigen.
private void showDialogInsert(Context context) {
LayoutInflater li = LayoutInflater.from(context);
View promptsView = li.inflate(R.layout.prompts, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
context);
alertDialogBuilder.setTitle("Device added");
alertDialogBuilder.setView(promptsView);
final EditText userInputManufacturer = (EditText) promptsView
.findViewById(R.id.editTextDialogManufacturer);
final EditText userInputType = (EditText) promptsView
.findViewById(R.id.editTextDialogType);
alertDialogBuilder
.setCancelable(false)
.setPositiveButton(getString(android.R.string.ok),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
String manufacturer = userInputManufacturer.getText().toString();
String type = userInputType.getText().toString();
Call<Insert> insertCall = apiService.insertDevice(manufacturer, type);
insertCall.enqueue(new Callback<Insert>() {
@Override
public void onResponse(Call<Insert> call, Response<Insert> response) {
switch (response.body().getSuccess()) {
case -1:
Toast.makeText(getApplicationContext(), "etwas ist schief gelaufen.", Toast.LENGTH_LONG).show();
break;
case 1:
Toast.makeText(getApplicationContext(), "Alle OK.", Toast.LENGTH_LONG).show();
break;
}
}
@Override
public void onFailure(Call<Insert> call, Throwable t) {
Log.e("Fail", t.getLocalizedMessage());
}
});
}
})
.setNegativeButton(getString(android.R.string.cancel),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
Aufrufen werden wir das über einen Menüpunkt, dazu brauchen wir eine menu.xml - erstellt euch die Datei mit "Android recource file".
menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_add"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:icon="@android:drawable/ic_input_add"
android:title="Add"
app:showAsAction="always"/>
</menu>
In der MainActivity.java fügen wir die OptionMenu-Methoden ein und können nun die showDialogInsert-Methode aufrufen.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add:
showDialogInsert(MainActivity.this);
return true;
}
return super.onOptionsItemSelected(item);
}
— geändert am 20.10.2016, 20:45:04
Gruß Ludy (App Entwickler)
✴
Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺
✴
☕ Buy Me A Coffee ☕
✴
Lebensmittelwarnung-App
✴
✨Meine Wunschliste✨
✴
📲Telegram NextPit News📲
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.