在Android Java中调用Async a Restfull WebService

时间:2016-07-05 13:08:28

标签: java android web-services

我需要调用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类?

抱歉我的英文。

谢谢!

2 个答案:

答案 0 :(得分:0)

您创建并执行此asynctask

的方式没有任何问题

请不要使用Thread.sleep();

问题显然在doInBackground()方法中,我们没有这里的代码

答案 1 :(得分:0)

您的代码是否完整?你班上没有任何人提出http请求,其余的似乎没问题。 尝试使用Okhttp它真的很简单。检查here

该线程睡眠将在主线程中运行,这不是一个好主意。使用post执行来运行回调并发布任何结果。