Java 从android应用程序到servlet的Throught GET方法接收到多个空参数
我正在尝试使用AsyncTask从一个简单的android应用程序发送一些参数 通过get请求,但是当我在servlet上获取参数时,这些参数是空的! 我不明白为什么,logcat没有显示任何错误,因此我无法找到原因。。 以下是我的主要活动:Java 从android应用程序到servlet的Throught GET方法接收到多个空参数,java,android,servlets,parameters,null,Java,Android,Servlets,Parameters,Null,我正在尝试使用AsyncTask从一个简单的android应用程序发送一些参数 通过get请求,但是当我在servlet上获取参数时,这些参数是空的! 我不明白为什么,logcat没有显示任何错误,因此我无法找到原因。。 以下是我的主要活动: package com.theopentutorials.android; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; imp
package com.theopentutorials.android;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
//the main activity
public class HttpGetServletActivity extends Activity implements OnClickListener {
Button button; // gui part
TextView outputText;
EditText titulli;
EditText ingredientet;
EditText receta;
public static String getTitulliS() {
return titulliS;
}
// setters and getters of the url parameters
public static void setTitulliS(String titulliS) {
HttpGetServletActivity.titulliS = titulliS;
}
public static String getIngredientetS() {
return ingredientetS;
}
public static void setIngredientetS(String ingredientetS) {
HttpGetServletActivity.ingredientetS = ingredientetS;
}
public static String getRecetaS() {
return recetaS;
}
public static void setRecetaS(String recetaS) {
HttpGetServletActivity.recetaS = recetaS;
}
public static String getURL() {
return URL;
}
public static void setURL(String uRL) {
URL = uRL;
}
// the parameters i would like to send
static String titulliS;
static String ingredientetS;
static String recetaS;
static String URL = "http://10.0.2.2:8080/HttpGetServlet/HelloWorldServlet?"
+ getTitulliS() + getIngredientetS() + getRecetaS();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewsById();
button.setOnClickListener(this);
}
private void findViewsById() {
button = (Button) findViewById(R.id.button);
outputText = (TextView) findViewById(R.id.outputTxt);
titulli = (EditText) findViewById(R.id.editText1);
ingredientet = (EditText) findViewById(R.id.editText2);
receta = (EditText) findViewById(R.id.editText2);
setTitulliS("titulli=" + titulli.getText().toString() + "&");
setIngredientetS("ingredientet=" + ingredientet.getText().toString()
+ "&");
setRecetaS("receta=" + receta.getText().toString());
}
public void onClick(View view) {
GetXMLTask task = new GetXMLTask();
task.execute(new String[] { URL });
}
private class GetXMLTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String output = null;
for (String url : urls) {
output = getOutputFromUrl(url);
}
return output;
}
private String getOutputFromUrl(String url) {
StringBuffer output = new StringBuffer("");
try {
InputStream stream = getHttpConnection(url);
BufferedReader buffer = new BufferedReader(
new InputStreamReader(stream));
String s = "";
while ((s = buffer.readLine()) != null)
output.append(s);
} catch (IOException e1) {
e1.printStackTrace();
}
return output.toString();
}
// Makes HttpURLConnection and returns InputStream
private InputStream getHttpConnection(String urlString)
throws IOException {
InputStream stream = null;
URL url = new URL(urlString);
URLConnection connection = url.openConnection();
try {
HttpURLConnection httpConnection = (HttpURLConnection) connection;
httpConnection.setRequestMethod("GET");
httpConnection.connect();
if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
stream = httpConnection.getInputStream();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return stream;
}
@Override
protected void onPostExecute(String output) {
outputText.setText(output);
}
}
}
有人知道吗?先谢谢你 在我看来,似乎您只是在
onCreate()
中为输入字段设置参数扩展,而实际上您必须在onClick()
中这样做
我还想说几句类似“为什么是静态的?”之类的话,但你并没有要求这样做 将您的URL分配放在findViewById()方法的末尾,您应该会没事的。谢谢!我将属于url参数的所有内容或最后所有内容都放在onClick()方法上,现在所有内容都正常工作了:D!此外,我还将这些变量标记为“static”,以便从方法中轻松访问它们,如果我做错了什么,请告诉我:)@p3rand0r,因为你问过了。你将变量和相关方法设置为静态以便于访问的理由是完全错误的,尤其会让你的Android生活更加艰难。没有什么能让你的生活变得更轻松了。变量和相关方法应该是私有的,而不是静态的。除此之外,你还避免了许多本可以犯的错误,所以竖起大拇指Thnx@Class Stacker,我会从现在开始记住这一点:),同时竖起大拇指是为了你:)你帮我分配的!
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@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 {
String titulli = request.getParameter("titulli");
String ingredientet = request.getParameter("ingredientet");
String receta = request.getParameter("receta");
PrintWriter out = response.getWriter();
out.println(titulli+ingredientet+receta);
System.out.println(titulli+ingredientet+receta);
}
}