【问题标题】:Retrofit 2.0, request GET to a .json file as endpointRetrofit 2.0,请求 GET 到 .json 文件作为端点
【发布时间】:2016-04-14 21:37:26
【问题描述】:

您好,我正在使用 Retrofit 2.0 进行测试,其中一项测试是对以 .json 结尾的 url 进行请求:

示例:https://domain.com/contacts.json

baseURL:https://domain.com/ 端点:/contacts.json

这是一个文件,但是我想发出一个普通的GET请求,直接获取里面的json

【问题讨论】:

  • 你能发布你的源代码并告诉我们更多关于什么不工作的信息吗?
  • 制作基础 uri https://domain.com/ 和端点 contacts.json

标签: android json retrofit2


【解决方案1】:

如果您可以控制您的网络服务器,您可以自定义它支持.json 文件为text/plainapplication/json。请看我下面的截图(我已经完成了 IIS 7.5)

以下截图是使用 PostMan 的请求:

build.gradle 文件:

dependencies {
    ...    
    compile 'com.squareup.retrofit2:retrofit:2.0.1'
    compile 'com.squareup.retrofit2:converter-gson:2.0.1'
}

WebAPIService.java:

public interface WebAPIService {
    @GET("/files/jsonsample.json")
    Call<JsonObject> readJson();
}

MainAcitivty.java:

Retrofit retrofit1 = new Retrofit.Builder()
        .baseUrl("http://...")
        .addConverterFactory(GsonConverterFactory.create())
        .build();

WebAPIService service1 = retrofit1.create(WebAPIService.class);
Call<JsonObject> jsonCall = service1.readJson();
jsonCall.enqueue(new Callback<JsonObject>() {
    @Override
    public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
        Log.i(LOG_TAG, response.body().toString());
    }

    @Override
    public void onFailure(Call<JsonObject> call, Throwable t) {
        Log.e(LOG_TAG, t.toString());
    }
});

Logcat:

04-15 15:31:31.943 5810-5810/com.example.asyncretrofit I/AsyncRetrofit: {"glossary":{"title":"example glossary","GlossDiv":{"title":"S","GlossList":{"GlossEntry":{"ID":"SGML","SortAs":"SGML","GlossTerm":"Standard Generalized Markup Language","Acronym":"SGML","Abbrev":"ISO 8879:1986","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"GlossSee":"markup"}}}}}

【讨论】:

  • 您好,谢谢,这正是我的问题,但我无法控制网络服务器,所以我要选择的选项是下载文件并解析它。
【解决方案2】:

您好,我找到了使用您的代码获取文件的解决方案,它现在确实有效,但我还没有触及 Web 服务器上的 MIME,我想我没有在代码中添加转换器。谢谢。

WebAPIService.java:

public interface WebAPIService {
@GET("/contacts.json")
     Call<JsonObject> getContacts();
}

MainAcitivty.java:

Retrofit retrofit1 = new Retrofit.Builder()
    .baseUrl(BuildConfig.API_ENDPOINT)
    .addConverterFactory(GsonConverterFactory.create())
    .build();

 WebAPIService service1 = retrofit1.create(WebAPIService.class);

 Call<List<Contact>> jsonCall = service1.getContacts();
 jsonCall.enqueue(new Callback<List<Contact>() {

 @Override
 public void onResponse(Call<List<Contact>> call, Response<List<Contact>> response) {
    Log.i(LOG_TAG, response.body().toString());
 }

 @Override
 public void onFailure(Call<List<Contact>> call, Throwable t) {
     Log.e(LOG_TAG, t.toString());
 }
});

【讨论】:

    猜你喜欢
    • 2016-06-16
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2015-07-02
    • 2021-06-19
    • 1970-01-01
    相关资源
    最近更新 更多