繁体   English   中英

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

[英]Why am I getting, “incompatible types: Object cannot be converted to String” with this?

我正在尝试使用最简单的代码从Android应用程序调用Web API REST方法,我在这里找到的代码看起来很有前途:

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;
}

但是,它不会编译,告诉我:“不兼容的类型:对象不能转换为String”在这一行:

result = httpclient.execute(request, handler);

它确实提供了几个选项来试图绕过logjam:

在此输入图像描述

......但我不知道哪些选项(如果有的话)是解决这一难题的首选方式。 一种方式“方式”?

UPDATE

正如我所说,这段代码看起来很有希望,但我觉得它基本上不可用,因为它给了我可怕的“ NetworkOnMainThreadException ”来自logcat:

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>

现在

httpclient.execute(request, handler);

将具有与声明handler时使用的类型参数关联的返回类型,它是String ,因此可以将结果分配给String变量(或任何需要String位置)。

尝试这个:

result = httpclient.execute(request, handler).toString();

如果我没错,你应该能够使用“toString”方法将execute方法的返回转换为String类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM