为什么我会收到“不兼容的类型:对象无法转换为字符串”?

2023-12-29

我正在尝试使用最简单的代码从 Android 应用程序调用 Web API REST 方法,以及我找到的代码here http://www.speakingcode.com/2012/09/10/how-to-consume-data-from-a-rest-webservice-or-use-a-web-api-in-android/看起来很有希望:

public String callWebService(String requestUrl)
{
    String deviceId = "Android Device";

    HttpClient httpclient = new DefaultHttpClient();
    HttpGet request = new HttpGet(requestUrl);
    request.addHeader("deviceId", deviceId);

    ResponseHandler handler    = new BasicResponseHandler();
    String result = "";

    try
    {
        result = httpclient.execute(request, handler); // <= a line too far
    }
    catch (ClientProtocolException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }

    httpclient.getConnectionManager().shutdown();

    return result;
}

但是,它不会编译,告诉我:“不兼容的类型:对象无法转换为字符串”这一行:

result = httpclient.execute(request, handler);

它确实提供了几个选项来试图规避僵局:

...但我不知道这些选项中哪一个(如果有的话)是解决这个困境的首选方法。一种方法是“方法”吗?

UPDATE

正如我所说,这段代码对我来说看起来很有希望,但我认为它基本上无法按原样使用,因为它给了我可怕的“网络主线程异常“来自日志猫:

04-01 13:18:41.861    1267-1267/hhs.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
. . .
    java.lang.IllegalStateException: Could not execute method of the activity
. . .
     Caused by: java.lang.reflect.InvocationTargetException
. . .
     Caused by: android.os.NetworkOnMainThreadException

因为您正在使用原始类型

ResponseHandler handler = ...

对于原始类型,方法声明中的类型变量将被删除。所以一切都显示为Object(或者类型参数的最左边界是什么)。

相反,使用参数化类型

ResponseHandler<String> handler = ...

这也有效,因为BasicResponseHandler延伸ResponseHandler<String>.

Now

httpclient.execute(request, handler);

将具有与声明时使用的类型参数关联的返回类型handler,即String因此结果可以分配给String变量(或任何地方String是期待)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我会收到“不兼容的类型:对象无法转换为字符串”? 的相关文章

随机推荐