2016-08-21 1 views
1

MYSQL 데이터베이스에 내 앱의 데이터를 삽입하려고합니다. 임 HttpURLConnection을 사용하여 연결을 열고 BufferedWriter으로 작성하십시오. 모든 것이 작동하지만 (아무 것도 예외를 잡아 내지 않습니다) 어떻게 든 데이터가 테이블에 삽입되지 않습니다. (this 자습서에 따라).MYSQL을 사용하여 데이터 삽입하지만 아무 일도 일어나지 않습니다.

백그라운드에서 네트워킹을 수행하려면 AsyncTask을 사용하고 있습니다. 아래에 표시된대로 AsyncTask에서 연장되는 새로운 수업을 만들었습니다.

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

이것은 doInBackground 메소드입니다.

@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; 
} 

내 PHP DB 연결 초기화 프로그램.

<?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); 

내 register.php 파일

<?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); 
     } 
    } 
} 

는 처음에 나는 내 URL이 잘못 생각했다.

"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" 

아무것도 일을 할 것 같다 : 내가 사용하려고했습니다. 누군가가 약간의 의견을 가질 수 있다면 감사하겠습니다.

내가 코드를 테스트하기 위해 AVD를 사용하지 않는다고 언급 했어야합니다. 내 자신의 삼성 장치를 사용하여 임.

편집 (가) backgroundtask

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

AVD (아마도 안드로이드 버그)을 실행하는 동안이 오류가 나타납니다 로그 캣에 편집 : getSlotFromBufferLocked : Google 검색 후 알 수없는 버퍼 0xb4095170 그것은 권한에 관한 몇 가지 안드로이드 오류처럼 보입니다. 하지만 이미 내 매니페스트에 인터넷 사용 권한이 있습니다.

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

("Gebruikersnaam가", "UTF-8")'하지만 회로 그 지적에 대한 대문자 – Marko

+0

@MarkoMets 감사로 시작 https://ngrok.com 성공한 결과가 없습니다. – Necati

+0

registerUrl이 맞습니까? – Marko

답변

0

conn.getInputStream() 또는 conn.getResponseCode()를 호출하면 서버에 요청이 전송됩니다. 그렇게하지 않으면 아무 일도 일어나지 않습니다. 이 메소드 중 하나를 doInBackground()에 추가하십시오.

+0

수정되었지만 여전히 아무것도 아닙니다. 원래 게시물을 참조하십시오. – Necati

+0

@Necati 아마 스트림을 닫기 전에 getInputStream()을 넣어야합니다. 실제로 디버깅 만하면됩니다. http 요청이 실제로 전송됩니까? http 요청이 실제로 php 스크립트에 의해 수신 되었습니까? 등등. – Fedor

+0

입력 스트림의 위치가 변경되었습니다. bw.flush()를 수행 한 후 게시하십시오. – Necati

0

AsyncTask에 대해 execute() 메서드를 호출합니까?

어떻게 서버를 응용 프로그램에 호스팅합니까? 휴대 전화를 사용하여 로컬 호스트에 액세스 할 수 없습니다.

로컬 호스트를 인터넷에 열 수있는 ngrok라는 스마트 도구가 있습니다. 안드로이드 개발에서 로컬 호스트를 안드로이드 앱을위한 서버로 사용하는 것이 훨씬 쉽습니다. 방문`$ _POST는 [ 'gebruikersnaam는'] '변수가 소문자에서하지만`URLEncoder.encode에서

+0

코드의 backgroundTask 부분의 실행 부분을 추가했습니다. 우편으로 확인하십시오. – Necati

관련 문제