2016-08-21 3 views
1

Ich versuche, Daten aus meiner App in die MYSQL-Datenbank einzufügen. Ich benutze HttpURLConnection, um eine Verbindung zu öffnen und es mit einem BufferedWriter zu schreiben. Alles funktioniert (es gibt keine Ausnahme), aber irgendwie werden keine Daten in die Tabelle eingefügt. (Im folgenden this Tutorial).Einfügen von Daten mit MYSQL, aber nichts passiert

Ich verwende die AsyncTask, um die Vernetzung im Hintergrund zu tun. Wie unten gezeigt, habe ich eine neue Klasse erstellt, die sich von AsyncTask erstreckt.

public class BackgroundTask extends AsyncTask<String, Void, String> 
{ 
    Context ctx; 
    BackgroundTask(Context ctx) 
    { 
     this.ctx = ctx; 
    } 

Dies ist die DoInBackground-Methode.

@Override 
protected String doInBackground(String... strings) 
{ 
    String registerUrl = "http://localhost/APPoint/register.php"; 
    String method = strings[0]; 
    if (method.equals("register")) 
    { 
     try 
     { 
      String gebruikersnaam = strings[1]; 
      String wachtwoord = strings[2]; 
      String voornaam = strings[3]; 
      String tussenvoegsel = strings[4]; 
      String achternaam = strings[5]; 
      String bedrijfsnaam = strings[6]; 
      String email = strings[7]; 
      String telefoonnummer = strings[8]; 
      URL url = new URL(registerUrl); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setRequestMethod("POST"); 
      conn.setDoOutput(true); 
      OutputStream OS = conn.getOutputStream(); 
      BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(OS)); 
      String data = URLEncoder.encode("Gebruikersnaam", "UTF-8")+ "=" + URLEncoder.encode(gebruikersnaam, "UTF-8")+"&"+ 
        URLEncoder.encode("wachtwoord", "UTF-8")+ "=" + URLEncoder.encode(wachtwoord, "UTF-8")+"&"+ 
        URLEncoder.encode("voornaam", "UTF-8")+ "=" + URLEncoder.encode(voornaam, "UTF-8")+"&"+ 
        URLEncoder.encode("tussenvoegsel", "UTF-8")+ "=" + URLEncoder.encode(tussenvoegsel, "UTF-8")+"&"+ 
        URLEncoder.encode("achternaam", "UTF-8")+ "=" + URLEncoder.encode(achternaam, "UTF-8")+"&"+ 
        URLEncoder.encode("bedrijfsnaam", "UTF-8")+ "=" + URLEncoder.encode(bedrijfsnaam, "UTF-8")+"&"+ 
        URLEncoder.encode("email", "UTF-8")+ "=" + URLEncoder.encode(email, "UTF-8")+"&"+ 
        URLEncoder.encode("telefoonnummer", "UTF-8")+ "=" + URLEncoder.encode(telefoonnummer, "UTF-8"); 
      try { 
       bw.write(data); 
      }catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
      bw.flush(); 
      InputStream inputS = conn.getInputStream(); 
      inputS.close(); 
      bw.close(); 
      OS.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return "Registreren voltooid"; 
    } 
    return null; 
} 

Meine php DB Verbindungsinitialisierer.

<?php 

define('HOST', 'localhost'); 
define('USER', 'root'); 
define('PASS', ''); 
define('DB', 'appoint'); 

$conn = new PDO('mysql:dbname=' . DB . ';host=' . HOST, USER, PASS); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

Meine register.php Datei

<?php 
$username = filter_var(trim($_POST['gebruikersnaam']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); 
$password = filter_var(trim($_POST['wachtwoord']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); 
$voornaam = filter_var(trim($_POST['voornaam']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); 
$tussenvoegsel = filter_var(trim($_POST['tussenvoegsel']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); 
$achternaam = filter_var(trim($_POST['achternaam']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); 
$bedrijfsnaam = filter_var(trim($_POST['bedrijfsnaam']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); 
$email = filter_var(trim($_POST['email']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); 
$telefoonnummer = filter_var(trim($_POST['telefoonnummer']), FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH); 

if ($username == '' || $password == '' || $voornaam == '' || $tussenvoegsel == '' || $achternaam == '' || $bedrijfsnaam == '' || $email == '' || $telefoonnummer == '') { 
    //echo 'Verplichte velden zijn niet ingevoerd!'; 
} else { 
    require_once('DBConnect.php'); 

    $stmnt = $conn->prepare("INSERT INTO gebruikers (`gebruikersnaam`, `wachtwoord`, `voornaam`, `tussenvoegsel`, `achternaam`, `bedrijfsnaam`, `email`, `telefoonnummer`) " 
      . "VALUES (?, ? , ? , ?, ?, ?, ?, ?)"); 
    try { 
     $stmnt->execute(array($username, $password, $voornaam, $tussenvoegsel, $achternaam, $bedrijfsnaam, $email, $telefoonnummer)); 
    } catch (PDOException $ex) { 
     if ($ex->errorInfo[1] == 1062) { 
      echo 'duplicate entry'; 
     } else { 
      var_dump($ex); 
     } 
    } 
} 

Zuerst dachte ich, meine URL falsch war. Ich habe versucht mit:

"http://127.0.0.1/APPoint/register.php" 
"http://localhost/APPoint/register.php" 
"http://10.0.2.2/APPoint/register.php" 
"http://192.168.0.1/APPoint/register.php" 

Nichts scheint den Job zu tun. Wenn jemand etwas Input haben könnte, würde ich mich freuen.

Bearbeiten Ich hätte erwähnen sollen, dass ich nicht einen AVD verwende, um den Code zu testen. Ich benutze mein eigenes Samsung-Gerät dafür.

bearbeiten Zugabe der

if(!errors) 
     { 
      String method = "register"; 
      BackgroundTask bgTask = new BackgroundTask(this); 
      bgTask.execute(method, gebruikersnaam, wachtwoord, voornaam, tussenvoegsel, achternaam, bedrijfsnaam, email, telefoonnummer); 
      finish(); 
     } 

bearbeiten Auf logcat für Background ausführen dieser Fehler nach oben zeigt, während sie mit AVD läuft (wahrscheinlich das Android Bug): getSlotFromBufferLocked: unbekannt Puffer 0xb4095170 Nach einer Google-Suche Es sieht aus wie ein Android-Fehler bezüglich der Berechtigungen. Aber ich habe bereits eine Internet-Erlaubnis in meinem Manifest.

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
+0

In '$ _POST [ 'gebruikersnaam']' variable Klein ist aber in 'URLEncoder.encode ("Gebruikersnaam", "UTF-8")' mit – Marko

+0

@MarkoMets Dank Groß beginnt, dass für den Hinweis auf, unfortunally kein erfolgreiches Ergebnis – Necati

+0

Ist Ihre registerUrl korrekt? – Marko

Antwort

0

Request an den Server gesendet, wenn Sie conn.getInputStream() oder conn.getResponseCode() aufrufen. Wenn Sie das nicht tun, passiert nichts. Bitte fügen Sie eine dieser Methoden zu Ihrem doInBackground() hinzu.

+0

Bearbeitet, aber immer noch nichts. Siehe Originalbeitrag. – Necati

+0

@ Necati Wahrscheinlich sollten Sie getInputStream() vor dem Schließen von Streams setzen. Eigentlich muss man nur debuggen. Wird die HTTP-Anfrage tatsächlich gesendet? Wird die HTTP-Anfrage tatsächlich von Ihrem PHP-Skript empfangen? Und so weiter. – Fedor

+0

Die Position des Eingangsstroms wurde geändert. setze es nach dem b.flush(), check post. – Necati

0

Rufen Sie die execute() -Methode für die AsyncTask auf?

Wie hosten Sie Ihren Server für die App? Sie können mit Ihrem Telefon nicht auf den lokalen Host zugreifen.

Es gibt ein intelligentes Tool namens Ngrok, um Ihren lokalen Host im Internet zu öffnen. Es ist sehr einfach in Android-Entwicklung, Ihren Localhost als Server für die Android-App zu verwenden. Besuche https://ngrok.com

+0

Der ausführende Teil des backgroundTask-Teils des Codes wurde hinzugefügt. Bitte Beitrag prüfen. – Necati