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
你是什麼意思?你的意思是我應該做一個拋出NetworkOnMainThreadException而不是異常? @RanSh –
他們的意思是,你的代碼必須創建一個線程,與執行網絡代碼的主線程分開,而不是在主線程中。就像你不應該在UI線程中執行其他(可能很慢或阻塞)代碼一樣。 – Matthew