Pourquoi ai-je, “incompatible types: l'Objet ne peut pas être converti en Chaîne”?
Je suis en train d'utiliser le plus simple possible code pour l'appel d'une API Web RESTE la méthode à partir d'une application Android, et le code que j'ai trouvé ici avait l'air très prometteur:
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;
}
Cependant, il ne compile pas, en me disant: "incompatible types: l'Objet ne peut pas être converti en Chaîne" sur cette ligne:
result = httpclient.execute(request, handler);
Il donne quelques options dans une tentative de contourner l'impasse:
...mais je ne sais pas qui, le cas échéant, de ces options est la meilleure façon de résoudre ce dilemme. Est une façon "le chemin"?
Mise à JOUR
Ce code, comme je l'ai dit, l'air prometteur pour moi, cependant, je pense que c'est essentiellement inutilisable tel quel, parce qu'il me donne le redoutable "NetworkOnMainThreadException" De 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
OriginalL'auteur B. Clay Shannon | 2014-04-01
Vous devez vous connecter pour publier un commentaire.
Parce que vous êtes à l'aide d'une crue de type dans
Avec des types, le type des variables dans les déclarations de méthode sont effacées. Donc tout ce qui apparaît comme
Object
(ou quelle que soit la gauche lié au paramètre de type est).Au lieu de cela, utilisez un type paramétré
Cela fonctionne aussi parce que
BasicResponseHandler
s'étendResponseHandler<String>
.Maintenant
aura un type de retour associée avec le type de l'argument utilisé lors de la déclaration de
handler
, qui estString
et le résultat peut donc être attribué à unString
variable (ou n'importe où unString
est prévu).OriginalL'auteur Sotirios Delimanolis
Essayez ceci:
Si je ne me trompe pas, vous devriez être en mesure d'utiliser la "toString" méthode pour convertir le retour de la méthode execute de type Chaîne de caractères.
OriginalL'auteur Ivan Verges