2017-11-20 16 views
0

MYSQL 데이터베이스를 Android 앱과 연결하는 방법에 대한 자습서를 본 후 작은 앱을 개발했습니다. 나는이 애플 리케이션을 안드로이드 에뮬레이터에서 테스트 해왔다. 그러나 지금까지 나는 틀린 것이 무엇인지 알지 못했다.

이 문제에 대해 전체 stackoverflow를 검색했지만 지금까지 성공하지 못했습니다.

Stackoverflow에는 'using 10.0.2.2:8080', 'using your own ip address', 'switching off firewall settings', 'changing apache server (configuration) settings'등의 솔루션이 포함되어 있지만 어느 누구도 저에게 효과가 없습니다. 여기

android studio를 통해 Android 에뮬레이터에서 localhost (wampserver)에 액세스하는 방법

내 코드입니다 :

BackgroundWorker.java

package apps.harry.mysqldemo; 

import android.app.AlertDialog; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.util.Log; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLEncoder; 

/** 
* Created by harry on 18/11/2017. 
*/ 
public class BackgroundWorker extends AsyncTask<String,Void,String> { 
    Context context; 
    AlertDialog alertDialog; 
    Log log; 
    int a=0; 
    BackgroundWorker (Context ctx) { 
     context = ctx; 
    } 
    @Override 
    protected String doInBackground(String... params) 
    { 
     String type = params[0]; 
     String login_url = "http://10.0.2.2:8081/login.php"; 
     if(type.equals("login")) { 
      try { 
       a=1;//for debugging purposes 

       String user_name = params[1]; 
       String password = params[2]; 

       URL url = new URL(login_url); 

       HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); 

       httpURLConnection.setRequestMethod("POST"); 

       httpURLConnection.setDoOutput(true); 
       httpURLConnection.setDoInput(true); 

       OutputStream outputStream = httpURLConnection.getOutputStream();// this line seems to be some problem as during debugging it never crossed this line and hence you will see in logcat "erro is beacuse null 1", not "2" 
       a=2;//for debugging purposes 
       BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
       String post_data = URLEncoder.encode("user_name","UTF-8")+"="+URLEncoder.encode(user_name,"UTF-8")+"&" 
         +URLEncoder.encode("password","UTF-8")+"="+URLEncoder.encode(password,"UTF-8"); 
       bufferedWriter.write(post_data); 
       bufferedWriter.flush(); 
       bufferedWriter.close(); 
       outputStream.close(); 
       InputStream inputStream = httpURLConnection.getInputStream(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1")); 
       String result=""; 
       String line=""; 
       while((line = bufferedReader.readLine())!= null) 
       { 
        result += line; 
       } 
       bufferedReader.close(); 
       inputStream.close(); 
       httpURLConnection.disconnect(); 

       return result; 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     //a=3; 
     return null; 
    } 

    @Override 
    protected void onPreExecute() { 
     alertDialog = new AlertDialog.Builder(context).create(); 
     alertDialog.setTitle("Login Status"); 
     log.e("onpostexecute","bg"); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     alertDialog.setMessage(result); 
     alertDialog.show(); 
    log.e("onpostexecute","erro is beacuse "+result+" "+a); 

    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
    } 
} 



MainActivity.java

package apps.harry.mysqldemo; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 

public class MainActivity extends AppCompatActivity 
{ 

    EditText uname_et,pass_et; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     uname_et=findViewById(R.id.uname_et); 
     pass_et=findViewById(R.id.pass_et); 

    } 

    public void onLogin(View view) 
    { 
     String user_name=uname_et.getText().toString(); 
     String pass_word=pass_et.getText().toString(); 
     String type="login"; 

     BackgroundWorker backgroundWorker=new BackgroundWorker(this); 
     backgroundWorker.execute(type,user_name,pass_word); 
    } 
} 

뿐만 아니라 Failed to connect to /10.0.2.2:8081, 또한 Failed to connect to /localhost:8081Failed to connect to /192.168.0.5:8081

를 연결하는 데 실패,

D/NetworkSecurityConfig: No Network Security Config specified, using platform default 
11-20 17:55:10.604 6165-6189/apps.harry.mysqldemo W/System.err: java.net.ConnectException: Failed to connect to /10.0.2.2:8081 
11-20 17:55:10.604 6165-6189/apps.harry.mysqldemo W/System.err:  at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:143) 
11-20 17:55:10.604 6165-6189/apps.harry.mysqldemo W/System.err:  at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:112) 
11-20 17:55:10.604 6165-6189/apps.harry.mysqldemo W/System.err:  at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:184) 
11-20 17:55:10.604 6165-6189/apps.harry.mysqldemo W/System.err:  at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126) 
11-20 17:55:10.604 6165-6189/apps.harry.mysqldemo W/System.err:  at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95) 
11-20 17:55:10.604 6165-6189/apps.harry.mysqldemo W/System.err:  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281) 
11-20 17:55:10.604 6165-6189/apps.harry.mysqldemo W/System.err:  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224) 
11-20 17:55:10.604 6165-6189/apps.harry.mysqldemo W/System.err:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461) 
11-20 17:55:10.604 6165-6189/apps.harry.mysqldemo W/System.err:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127) 
11-20 17:55:10.604 6165-6189/apps.harry.mysqldemo W/System.err:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:258) 
11-20 17:55:10.605 6165-6189/apps.harry.mysqldemo W/System.err:  at apps.harry.mysqldemo.BackgroundWorker.doInBackground(BackgroundWorker.java:54) 
11-20 17:55:10.605 6165-6189/apps.harry.mysqldemo W/System.err:  at apps.harry.mysqldemo.BackgroundWorker.doInBackground(BackgroundWorker.java:25) 
11-20 17:55:10.605 6165-6189/apps.harry.mysqldemo W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:333) 
11-20 17:55:10.605 6165-6189/apps.harry.mysqldemo W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
11-20 17:55:10.606 6165-6189/apps.harry.mysqldemo W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 
11-20 17:55:10.606 6165-6189/apps.harry.mysqldemo W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 
11-20 17:55:10.606 6165-6189/apps.harry.mysqldemo W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 
11-20 17:55:10.606 6165-6189/apps.harry.mysqldemo W/System.err:  at java.lang.Thread.run(Thread.java:764) 
11-20 17:55:10.747 6165-6165/apps.harry.mysqldemo E/onpostexecute: erro is beacuse null 1 



과 : 내가 로그 캣에서 이러한 행을 발견 디버깅 과정에서
는 봐

저는 해결책이 없습니다. 나는 무엇을해야할지 모른다.
도와주세요.

답변