[英]How to send request from android to servlet with parameters
我正在尝试使用参数将参数从我的android设备发送到servlet,并且参数作为请求的一部分发送。
我有一个单击按钮,我从editText视图获取文本,修改我的url以使其带有参数的url并将该url发送到AsyncTask。
这是我的代码。
buttonRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String stringUrl = "http://192.168.11.4:8084/WebApplication1/DemoServlet?email=" + editTextEmail.getText() + "&password=" + editTextPassword.getText() + "&phone=" + editTextPhoneNumber.getText();
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
new RegistrationTask().execute(stringUrl);
} else {
Toast.makeText(RegisterActivity.this, "Error!. Please check your internnet connection", Toast.LENGTH_SHORT).show();
}
}
});
}
这是我的RegistrationTask代码。
class RegistrationTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
return getResponse(params[0]);
}
@Override
protected void onPostExecute(String result) {
editTextEmail.setText(result);
}
public String getResponse(String myurl) {
InputStream is = null;
String contentAsString = null;
int len = 500;
try {
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
int response = conn.getResponseCode();
Log.d("Download", "The response is: " + response);
is = conn.getInputStream();
// Convert the InputStream into a string
contentAsString = readIt(is, len);
return contentAsString;
} catch (Exception e) {
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return contentAsString;
}
// Reads an InputStream and converts it to a String.
public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
Reader reader = null;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
reader.read(buffer);
return new String(buffer);
}
}
我尝试调试我的servlet代码,但请求以email = password = phone =的形式出现
请帮我整理一下。
没有答案,但是会帮助您。
首先请也分享servlet代码
URLEncoder.encode(arg:String):String
编码参数,例如
String stringUrl = "http://192.168.11.4:8084/WebApplication1/DemoServlet?email="
+URLEncoder.encode(editTextEmail.getText())
readIt(stream:InputStream,len:int):String
您的方法readIt(stream:InputStream,len:int):String
不可靠。
请注意,即使有太多可用数据, InputStream.read(buf::byte[]):int
也不会填满整个缓冲区,并且int响应指示已将数据数量写入缓冲区,因此您的代码将获取数据不一致。
您可以使用DataInputStream.readFully(buff:byte[]):void
,它会完全填充缓冲区,或者在数据不足时引发异常。
或者更好的方式读取直到EOS,其中read()
方法返回-1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.