我正在使用改造来从http URL获取数据。 我的接口类:
public interface SlotsAPI {
/*Retrofit get annotation with our URL
And our method that will return a Json Object
*/
@GET(url)
retrofit.Call<JSONObject> getSlots();
}
我的请求方法。
public void getResponse(){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
//Creating an object of our api interface
SlotsAPI api = retrofit.create(SlotsAPI.class);
retrofit.Call<JSONObject> callback = api.getSlots();
callback.enqueue(new Callback<JSONObject>() {
@Override
public void onResponse(Response<JSONObject> response) {
if (response != null) {
Log.d("OnResponse", response.body().toString());
}
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
});
}
在响应中,我收到一个空体。服务器响应200 OK。
D/OnResponse: {}
但是当我在浏览器中打开URL时,我会在屏幕上显示JSONObject。
答案 0 :(得分:11)
你应该这样试试......
public interface SlotsAPI {
/*Retrofit get annotation with our URL
And our method that will return a Json Object
*/
@GET(url)
Call<JsonElement> getSlots();
}
请求方法
retrofit.Call<JsonElement> callback = api.getSlots();
callback.enqueue(new Callback<JsonElement>() {
@Override
public void onResponse(Response<JsonElement> response) {
if (response != null) {
Log.d("OnResponse", response.body().toString());
}
}
答案 1 :(得分:6)
请检查您的JsonObject。如果你想在json中得到响应,你必须定义一个响应类型JsonObject而不是JSONObject,否则在你的接口中指定pojo类。
答案 2 :(得分:0)
我认为你不了解改造费用。 正确的界面应该是:
public interface SlotsAPI {
/*Retrofit get annotation with our URL
And our method that will return a Json Object
*/
@GET(url)
JSONObject getSlots();
}
当您调用getSlots方法时,retrofit将自动执行HTTP请求并返回JSONObject。 你需要从主线程中做到这一点。
答案 3 :(得分:0)
确保@Get的网址是相对路径
@Base URL:始终以/
@ Url:不要以/
示例:
String URL = http://api.co/base/ ;
和
@GET("webservice/syncdown")
JSONObject getSlots();
您可能会收到一个Slots列表。如果发送json数组
,Gson转换器将处理它 @GET(url)
retrofit.Call<List<Slot>> getSlots();
答案 4 :(得分:0)
您正在使用改装2还是1?版本2仍处于测试阶段。 如果您使用的是版本1.使用此:
public interface SlotsAPI {
/*Retrofit get annotation with our URL
And our method that will return a Json Object
*/
@GET(url)
void getSlots(Callback<JsonElement> callback);
}
这样调用将是异步的。
答案 5 :(得分:0)
这里有同样的问题,answer from curiousMind节省了我的一天 关于同一主题的更多内容:如果您需要从一对中获取值,请使用:
String value = response.body().getAsJsonObject().get("pair_name").getAsString();
答案 6 :(得分:0)
通话&LT;无效&GT; getSlots()为我工作。
答案 7 :(得分:0)
private void APIRetrofit_method() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(RecyclerInterface.JSONURL)
// .client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build();
RecyclerInterface api = retrofit.create(RecyclerInterface.class);
Call<ResponseBody> call = api.getString(); /// GET METHOD without passing params
// Post METHOD CODE START
// HashMap<String, String> params = new HashMap<String, String>();
// params.put("name", "yuva");
// params.put("pass", "" + "123");
// Call<ResponseBody> call1 = api.getProspectList(params);
// Post METHOD CODE END
答案 8 :(得分:0)
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try {
Log.d(TAG, "GetProspectlistresponse" + "" + response.isSuccessful());
utility.hideProgressDialog();
if (response.isSuccessful()) {
String remoteResponse = new String(response.body().string());
Log.d(TAG, "Holidaylistresponse" + "" + remoteResponse);
try {
JSONObject object = new JSONObject(remoteResponse);
JSONArray array = object.getJSONArray("Holidays_Details");
if (array.toString().equals("[]")) {
holiday_recyclerView.setVisibility(View.GONE);
} else {
holiday_recyclerView.setVisibility(View.VISIBLE);
for (int i = 0; i < array.length(); i++) {
JSONObject c = array.getJSONObject(i);
String holidayDate = c.getString(TAG_HOLIDAYDATE);
String holidayName = c.getString(TAG_HOLIDAYName);
String holidaytype = c.getString(TAG_HOLIDAYtype);
HashMap<String, String> customers = new HashMap<String, String>();
customers.put(TAG_HOLIDAYDATE, holidayDate);
customers.put(TAG_HOLIDAYName, holidayName);
customers.put(TAG_HOLIDAYtype, holidaytype);
arrayList.add(customers);
}
getHolidaylistAdapter.notifyDataSetChanged();
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
utility.hideProgressDialog();
}
} catch (IOException e) {
e.printStackTrace();
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Log.i("ErrorResponsestring", call.toString());
}
});
}
String JSONURL = "https://demonuts.com/Demonuts/JsonTest/Tennis/";
@GET("json_parsing.php")
Call<ResponseBody> getString();
// @POST("getProspectList")
// @FormUrlEncoded
// Call<ResponseBody> getProspectList(@FieldMap HashMap<String, String> body);
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
implementation 'com.squareup.okhttp3:okhttp:4.0.0'