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>
("Gebruikersnaam가", "UTF-8")'하지만 회로 그 지적에 대한 대문자 – Marko
@MarkoMets 감사로 시작 https://ngrok.com 성공한 결과가 없습니다. – Necati
registerUrl이 맞습니까? – Marko