0

我正在将我的一些 Windows Phone 7 应用程序移植到 Android。当我们在 WP7 世界中调用服务时,调用是异步的。我们调用该服务,并且有一个委托 _completed 事件,该事件在返回结果时触发。与此同时,我们继续前进。

下面粘贴的 java android 代码是我在云服务器上调用 HTTP 服务的方式。我通过学习如何在 android 世界中调用服务的 Android 教程开发了这段代码。显然,这里的服务调用是同步的,因此以 InputStream in... 开头的指令在返回结果之前不会被执行。

这是它应该如何为Android工作?如果服务没有响应,则等待几分钟,然后发生超时异常。那不好。一切都会挂起。

在android中调用服务的推荐方式是什么?谢谢,加里

    public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    HttpURLConnection urlConnection = null;

        try 
        {
            URL url = new URL("http://www.deanblakely.com/REST/api/products");
            urlConnection = (HttpURLConnection) url.openConnection();
            InputStream in = new BufferedInputStream(urlConnection.getInputStream());     
            String myString = readStream(in);
            String otherString = myString;
            otherString = otherString + " ";
        } 
        catch (MalformedURLException e) 
        {
            e.printStackTrace();
        } 
        catch (IOException e) 
        {   
            e.printStackTrace();
        }  

        finally 
        {     
            urlConnection.disconnect();   
        } 
}       
4

1 回答 1

2

这是它应该如何为Android工作?

是的。在后台线程中执行 HTTP 操作,例如由AsyncTask.

如果服务没有响应,则等待几分钟,然后发生超时异常。那不好。一切都会挂起。

您可以将套接字超时设置为比“几分钟”更短的时间。例如,您可以调用setReadTimeout()您的HttpURLConnection以毫秒为单位指定超时时间。

于 2012-09-16T23:24:42.690 回答