【问题标题】:Why am I getting, "incompatible types: Object cannot be converted to String" with this?为什么我会得到“不兼容的类型:对象无法转换为字符串”?
【发布时间】:2014-04-01 16:39:47
【问题描述】:

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

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

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

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

更新

正如我所说,这段代码看起来很有希望,但我认为它基本上无法使用,因为它给了我可怕的“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

【问题讨论】:

    标签: java android android-studio http-get android-gradle-plugin


    【解决方案1】:

    因为您使用的是原始类型

    ResponseHandler handler = ...
    

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

    改为使用参数化类型

    ResponseHandler<String> handler = ...
    

    这也有效,因为BasicResponseHandler 扩展了ResponseHandler&lt;String&gt;

    现在

    httpclient.execute(request, handler);
    

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

    【讨论】:

      【解决方案2】:

      试试这个:

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

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

      【讨论】:

        猜你喜欢
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-15
        • 2018-08-30
        • 1970-01-01
        • 1970-01-01
        • 2014-05-25
        相关资源
        最近更新 更多