我需要调用android java中的webservice,另一个类调用它。我结束了,在UI中显示了ws响应。
我已经完成了网络服务。只有“异步”的那部分不能正常工作。
这是我的网络服务,收到三个字符串:
public class WebServiceRestFull extends AsyncTask<String, String, String>
{
protected ProgressDialog dialog;
public String wsURL;
public String wsFunction;
public String wsInput;
public int codeHTTP;
public String messageHTTP;
public String strResponse;
public WebServiceRestFull(Context act)
{
dialog = new ProgressDialog(act);
}
@Override
protected void onPreExecute() {
dialog.setMessage("Wait please...");
dialog.show();
}
@Override
protected void onPostExecute(String result)
{
if (dialog.isShowing())
{
dialog.dismiss();
}
}
@Override
protected String doInBackground(String... params)
{
String url = wsURL + wsFunction;
String inputCoded = EncodeString(wsInput);
HttpURLConnection request;
URL urlToRequest = new URL(url);
request = (HttpURLConnection) urlToRequest.openConnection();
request.setDoOutput(true);
request.setDoInput(true);
request.setRequestProperty("Content-Type", "application/json");
request.setRequestMethod("POST");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(request.getOutputStream());
outputStreamWriter.write("\""+inputCoded+"\"");
outputStreamWriter.flush();
outputStreamWriter.close();
codeHTTP = request.getResponseCode();
messageHTTP = request.getResponseMessage();
InputStream is = request.getInputStream();
String resp = convertStreamToString(is);
strResponse = DecodeString(resp);
request.disconnect();
return strResponse;
}
catch (Exception ex)
{
ex.printStackTrace();
return "ERROR";
}
}
}
另一方面,在“Android Activity”中,我按如下方式调用此异步类:
WebServiceRestFull web = new WebServiceRestFull(this);
web.wsURL = "http://someurl.com/rest/etc";
web.wsFunction = "login";
web.wsInput = "mike";
web.execute();
Thread.sleep(1000);
问题是这实际上并不是在进行异步调用,并且Web服务通常不会收到结果。
有没有简单的方法可以做到这一点,或者我在某些方面做错了,因为调用webservice或自己的webservice类?
抱歉我的英文。
谢谢!
答案 0 :(得分:0)
您创建并执行此asynctask
的方式没有任何问题请不要使用Thread.sleep();
问题显然在doInBackground()方法中,我们没有这里的代码
答案 1 :(得分:0)
您的代码是否完整?你班上没有任何人提出http请求,其余的似乎没问题。 尝试使用Okhttp它真的很简单。检查here
该线程睡眠将在主线程中运行,这不是一个好主意。使用post执行来运行回调并发布任何结果。