2016-05-02 12 views
0

私はSpring Restful Serverを機能させています。それは、私がそれをテストするために作ったブラウザとJavaクライアントからの要求を受け入れます。AndroidクライアントがRESTサーバーに接続していません

問題は、エミュレータまたはスマートフォンにあるかどうかにかかわらず、Androidで接続しようとするときです。それは完璧に動作

public void requestServer() throws IOException { 
    String url = "http://localhost:8080/checkPoints?username=john"; 

    URL obj = new URL(url); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

    // optional default is GET 
    con.setRequestMethod("GET"); 

    int responseCode = con.getResponseCode(); 
    System.out.println("\nSending 'GET' request to URL : " + url); 
    System.out.println("Response Code : " + responseCode); 

    BufferedReader in = new BufferedReader(
      new InputStreamReader(con.getInputStream())); 
    String inputLine; 
    StringBuffer response = new StringBuffer(); 

    while ((inputLine = in.readLine()) != null) { 
     response.append(inputLine); 
    } 
    in.close(); 

    //print result 
    System.out.println(response.toString()); 
} 

は、私は、サーバーをテストするために、私のJavaクライアントでは、この単純なコードを持っています。私がそれをデバッグするとconにHTTP応答コード200があり、ページからの応答は正確にjohnが持っているポイント数であることがわかります。

しかし、私はボタンがクリックされたときに起動するために、同じコードをAndroid上でそれをしようとします。私はそれをデバッグする場合

HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

public void requestServer(View view) throws IOException { 
    String url = "http://10.0.2.2:8080/checkPoints?username=joao"; 

    URL obj = new URL(url); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

    // optional default is GET 
    con.setRequestMethod("GET"); 

    int responseCode = con.getResponseCode(); 
    System.out.println("\nSending 'GET' request to URL : " + url); 
    System.out.println("Response Code : " + responseCode); 

    BufferedReader in = new BufferedReader(
      new InputStreamReader(con.getInputStream())); 
    String inputLine; 
    StringBuffer response = new StringBuffer(); 

    while ((inputLine = in.readLine()) != null) { 
     response.append(inputLine); 
    } 
    in.close(); 

    //print result 
    System.out.println(response.toString()); 
} 

それは、常にこの行で勃発私はHTTPレスポンスコードが200ではなく-1であることを確認します。 私の内部ネットワークIP(私の場合は192.168.1.79)を試しましたが、動作しません。私はStackoverflowで多くのスレッドを検索し、ユーザが持っている多くのコードを試しましたが、これらのコードでは常に同じコード(obj.openConnection())でブレークアウトします。

私はマニフェストでインターネットの許可を持っていますが、そのためではありません。

何ができますか?

編集:ここではスタックトレース

5-02 19:19:38.109 2769-2769/pt.androidrestfulclient E/AndroidRuntime: FATAL EXCEPTION: main 
                         Process: pt.androidrestfulclient, PID: 2769 
                         java.lang.IllegalStateException: Could not execute method for android:onClick 
                          at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:289) 
                          at android.view.View.performClick(View.java:4780) 
                          at android.view.View$PerformClick.run(View.java:19866) 
                          at android.os.Handler.handleCallback(Handler.java:739) 
                          at android.os.Handler.dispatchMessage(Handler.java:95) 
                          at android.os.Looper.loop(Looper.java:135) 
                          at android.app.ActivityThread.main(ActivityThread.java:5254) 
                          at java.lang.reflect.Method.invoke(Native Method) 
                          at java.lang.reflect.Method.invoke(Method.java:372) 
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
                         Caused by: java.lang.reflect.InvocationTargetException 
                          at java.lang.reflect.Method.invoke(Native Method) 
                          at java.lang.reflect.Method.invoke(Method.java:372) 
                          at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
                          at android.view.View.performClick(View.java:4780)  
                          at android.view.View$PerformClick.run(View.java:19866)  
                          at android.os.Handler.handleCallback(Handler.java:739)  
                          at android.os.Handler.dispatchMessage(Handler.java:95)  
                          at android.os.Looper.loop(Looper.java:135)  
                          at android.app.ActivityThread.main(ActivityThread.java:5254)  
                          at java.lang.reflect.Method.invoke(Native Method)  
                          at java.lang.reflect.Method.invoke(Method.java:372)  
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)  
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  
                         Caused by: android.os.NetworkOnMainThreadException 
                          at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147) 
                          at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110) 
                          at libcore.io.IoBridge.connectErrno(IoBridge.java:137) 
                          at libcore.io.IoBridge.connect(IoBridge.java:122) 
                          at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183) 
                          at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456) 
                          at java.net.Socket.connect(Socket.java:882) 
                          at com.android.okhttp.internal.Platform.connectSocket(Platform.java:174) 
                          at com.android.okhttp.Connection.connect(Connection.java:152) 
                          at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276) 
                          at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211) 
                          at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382) 
                          at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:332) 
                          at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:500) 
                          at pt.ulisboa.tecnico.cmov.androidrestfulclient.MainActivity.requestServer(MainActivity.java:50) 
                          at java.lang.reflect.Method.invoke(Native Method)  
                          at java.lang.reflect.Method.invoke(Method.java:372)  
                          at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)  
                          at android.view.View.performClick(View.java:4780)  
                          at android.view.View$PerformClick.run(View.java:19866)  
                          at android.os.Handler.handleCallback(Handler.java:739)  
                          at android.os.Handler.dispatchMessage(Handler.java:95)  
                          at android.os.Looper.loop(Looper.java:135)  
                          at android.app.ActivityThread.main(ActivityThread.java:5254)  
                          at java.lang.reflect.Method.invoke(Native Method)  
                          at java.lang.reflect.Method.invoke(Method.java:372)  
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)  
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  
+0

obj.openConnection()を実行中に例外が発生することを意味しますか?正確にはどのような例外ですか? – kit

+0

例外とは何ですか?また、AsynckTaskのような2番目のスレッドでrequestServerメソッドを実行する必要があります。 – Crash

+0

これはIllegalStateExceptionです。 –

答えて

0

AsynctaskでrequestServer()をラップしてみています。このメソッドをdoInBackground()で実行します。

+1

私はすでにそれを試していたし、それは動作しませんでした。私は今すぐテストしてStackTraceを印刷するコードを書いたとき、それはいくつかの奇跡によって機能しました! 私はAPI(Spring)から直接コードを使用しました(これは最初の試みでした)。以前は機能しませんでしたが、今は機能的です。 助けてくれてありがとう –

関連する問題