这是我的Api界面:
public interface Api {
@FormUrlEncoded
@POST("/")
public void feed(@Field("tag") String tag,
@Field("id") int id,
Callback<String> respone);
}
这是我在MainActivity中调用的方法:|
public static void setBody(int i) {
final RestAdapter restadapter = new RestAdapter.Builder().setEndpoint(WELCOM_URL).build();
Api vocApi = restadapter.create(Api.class);
vocApi.feed("get_about", 11, new Callback<String>() {
@Override
public void success(String obj, Response response) {
Log.d("Great", obj.toString());
}
@Override
public void failure(RetrofitError error) {
//Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_SHORT).show();
Log.e("Errrorrr..", error.toString());
}
});
}
如果正确,它将返回一个JSon Object字符串。 我的问题是我收到了这条消息:
retrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $
那么,我的代码有什么问题吗? 感谢
答案 0 :(得分:0)
对于一个完美的解决方案,我需要更多的细节,比如从你的api返回json,但根据你的错误日志,改装从api获取json对象,你试图把它作为一个字符串。
我修改了你的代码:
public static void setBody(int i) {
final RestAdapter restadapter = new RestAdapter.Builder().setEndpoint(WELCOM_URL).build();
Api vocApi = restadapter.create(Api.class);
vocApi.feed("get_about", 11, new Callback<JSONObject>() {
@Override
public void success(JSONObject obj, Response response) {
Log.d("Great", obj.toString());
}
@Override
public void failure(RetrofitError error) {
//Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_SHORT).show();
Log.e("Errrorrr..", error.toString());
}
});
}
对于改造的结果,您必须创建与您的api中的返回json对象匹配的POJOS并将其提供给Retrofit Callback,如
new Callaback<YourResponseBean>();
答案 1 :(得分:0)
我找到了解决方案:
我们必须为Callback对象创建新的POJO。我们不能将它直接用作字符串响应或任何Json对象。 这里是Api接口的代码:
@FormUrlEncoded
@POST("/")
public void feed(@Field("tag") String tag,
@Field("id") int id,
Callback<Profile> respone);
班级简介:
public class Profile {
@SerializedName("latitude")
public double latitude;
@SerializedName("longitude")
public double longitude;
@SerializedName("error")
public boolean error;
---
Constructor
Getter and Setter
----
}
叫方法:
public static void setBody(int i) {
final RestAdapter restadapter = new RestAdapter.Builder().setEndpoint(WELCOM_URL).build();
Api vocApi = restadapter.create(Api.class);
vocApi.feed("get_about", i, new Callback<Profile>() {
@Override
public void success(Profile obj, Response response) {
Log.d("sadf", obj.isError() +"-"+obj.getLatitude()+ "-" + obj.getLongitude());
}
@Override
public void failure(RetrofitError error) {
Log.e("1Errrorrr..", error.toString());
}
});
}