2015-11-18 45 views
0

我知道這個問題存在,但我真的沒有發現任何問題,而運行的程序。我嘗試收到「Hello Android !!!」來自servlet的文本並使用Log.i()來顯示它。Android連接servlet的簡單例子

注意我正在使用Android Studio和java servlet。

這將是觸發而button.onClick(),我試圖既方法1和方法2。

方法1:

  try { 
       InputStream stream = null; 

       URL url = new URL ("http://xxx/HelloWorldServlet"); 
       URLConnection connection = url.openConnection(); 

       connection.setDoInput(true); 
       connection.setDoOutput(true); 
       connection.setRequestProperty("loginId", mUsername.getText().toString()); 
       connection.setRequestProperty("password", mPassword.getText().toString()); 

       try { 

        HttpURLConnection httpConnection = (HttpURLConnection) connection; 
        httpConnection.setRequestMethod("GET"); 
        httpConnection.connect(); 

        if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { 
         stream = httpConnection.getInputStream(); 
        } 



        BufferedReader buffer = new BufferedReader(new InputStreamReader(stream)); 
        String s = ""; 
        while ((s = buffer.readLine()) != null) 
        {Log.i(TAG, s);} 

        ((HttpURLConnection) connection).disconnect(); 
       } catch (Exception ex) { 
        ex.printStackTrace(); 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 

      }   
     } 

方法2:

InputStream is = null; 

      try { 
       URL url = new URL("http://xxx/xxx/mobileapps/HelloWorldServlet"); 

       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setReadTimeout(10000 /* milliseconds */); 
       conn.setConnectTimeout(15000 /* milliseconds */); 
       conn.setRequestMethod("GET"); 
       conn.setDoInput(true); 
       // Starts the query 
       conn.connect(); 

       int response = conn.getResponseCode(); 
       Log.d(TAG, "The response is: " + response); 
       is = conn.getInputStream(); 

       String contentAsString = is.toString() ; 
       conn.disconnect(); 

       Log.i(TAG, contentAsString); 
      }catch (Exception e) {} 

servlet代碼:

import java.io.IOException; 
    import java.io.PrintWriter; 
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 

    /** 
    * Servlet implementation class HelloWorldServlet 
    */ 
    @WebServlet("/HelloWorldServlet") 
    public class HelloWorldServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public HelloWorldServlet() { 
     super(); 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     HttpServletResponse response) throws ServletException, IOException { 
       PrintWriter out = response.getWriter(); 
       out.println("Hello Android !!!!"); 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
    } 
} 

This is what I get after button triggered

回答

0

看看這個:http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html
你要做的網絡中的一個線索,而不是像你一樣。

+0

你是什麼意思?你的意思是我應該做一個拋出NetworkOnMainThreadException而不是異常? @RanSh –

+0

他們的意思是,你的代碼必須創建一個線程,與執行網絡代碼的主線程分開,而不是在主線程中。就像你不應該在UI線程中執行其他(可能很慢或阻塞)代碼一樣。 – Matthew