Android异步消费Web服务

Android异步消费Web服务,android,web-services,android-asynctask,Android,Web Services,Android Asynctask,我需要一个从C#到Java/Android的过渡,让客户端异步使用web服务,这样它就不会锁定gui了……(进度条会锦上添花。)在C#中,我会创建对象,在客户端执行类似的操作 创建服务引用。 创建与服务接口成员匹配的对象并填充。 在单独的线程中启动在步骤2中创建的服务请求传递对象。 等待显示进度条。 处理响应,无论是错误还是返回数据 现在,也许我过于简单化了,但我认为在Java中,它与此方法非常接近。我看到很多人都在说要扩展AsyncTask类。我缺少的是如何从客户那里传递我的价值观?例如,如何

我需要一个从C#到Java/Android的过渡,让客户端异步使用web服务,这样它就不会锁定gui了……(进度条会锦上添花。)在C#中,我会创建对象,在客户端执行类似的操作

创建服务引用。 创建与服务接口成员匹配的对象并填充。 在单独的线程中启动在步骤2中创建的服务请求传递对象。 等待显示进度条。 处理响应,无论是错误还是返回数据

现在,也许我过于简单化了,但我认为在Java中,它与此方法非常接近。我看到很多人都在说要扩展AsyncTask类。我缺少的是如何从客户那里传递我的价值观?例如,如何发送用户名和密码?恐怕所有不同的文章和细微差别都让我困惑。我只是需要一个直接的方法来完成这项工作

因此,如果有任何提示、指针、教程或其他类似的阅读,我将不胜感激


JB

6个月前,我以C#/.NET为背景开始了Android开发

我们当前使用的第一个选项是执行异步任务。。。在本例中,它正在使用web服务

下面是一个示例代码

public class AsyncHttpRequestManager extends AsyncTask<String, Boolean, String> {
    private final String serviceUrl = "URL HERE";

    @Override
    protected String doInBackground(String... params) {
        try {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpPut putRequest = new HttpPut(serviceUrl);
        putRequest.setHeader("Content-type", "text/plain");
        putRequest.setHeader("Accept", "text/plain");
            putRequest.setEntity(new StringEntity(params[0]));
            HttpResponse response = client.execute(putRequest);
            InputStream content = response.getEntity().getContent();
        BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
        String result = "";
        String s = "";
        while ((s = buffer.readLine()) != null) {
            result += s;
        }
        return result;

        } 
        catch (UnsupportedEncodingException e) {
            Log.e("AsyncOperationFailed", e.getMessage());
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            Log.e("AsyncOperationFailed", e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
            Log.e("AsyncOperationFailed", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    protected void onPostExecute(String result) {
        Log.d("MESSAGE", result);
    }
}

随着时间的推移,我们已经在HttpClient上创建了我们的助手,因此我建议您使用诸如loopj之类的开放源代码库,这将真正帮助您快速完成最初的步骤。唯一的挑战是,当您来自另一个平台时,您可能会面临其他库的初始挑战,而不是简单的异步任务,但值得花时间,如果您有灵活性。

异步任务会带来很多问题,因为它们承载的活动可能会在执行过程中被破坏

最好的方法是将请求托管在intentservice内或服务内,这将在请求活动中继续存在


如果您想要一个开箱即用的解决方案,我建议您看看library,它是一个相当成熟的项目。基于此

顺便说一句,我们使用的是Apache Http客户端库。我想除了传递参数之外,我什么都懂。假设我有两个要送。用户名和密码。我必须分开实体行吗?它在方法签名中看起来如何?ie关于(字符串…参数)的更多细节它看起来像什么?
AsyncHttpClient client = new AsyncHttpClient();
client.setBasicAuth("username","password/token");
client.get("http://www.example.com", new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(String response) {
        System.out.println(response);
    }
});
public class AsyncHttpRequestManager extends AsyncTask<String, Boolean, String> {
    private final String serviceUrl = "URL HERE";
    String user;  
    String pass;

    public AsyncHttpRequestManager(String user, String Pass){
        this.user = user;  
        this.pass = pass;
    }

    @Override
    protected String doInBackground(String... params) {
        //execute the post
        return "";
    }

    protected void onPostExecute(String result) {
        Log.d("MESSAGE", result);
        //update the UI with the results
    }
}
new AsyncHttpRequestManager(user, pass).execute();