[英]Why am I getting the error: Incompatible types; JButton cannot be converted to a JTextfield
[英]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:
......但我不知道哪些选项(如果有的话)是解决这一难题的首选方式。 一种方式“方式”?
正如我所说,这段代码看起来很有希望,但我觉得它基本上不可用,因为它给了我可怕的“ 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.