【问题标题】:Retrofit in android?在安卓中改造?
【发布时间】:2017-02-13 11:08:54
【问题描述】:

我是 Retrofit 的新手。如何发送参数并从以下网址获取 Json?

http://xxx:8087/courier.svc/login?username=jim&password=123456

我需要一个教程链接。

此代码在我的MainActivity 中:

private void loadJSON(String username, String password) {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://192.168.8.11:8087/sample.svc/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    RequestInterface_Login request = retrofit.create(RequestInterface_Login.class);
    Call<JSONResponseLogin> call = request.getJSON(username, password);
    call.enqueue(new Callback<JSONResponseLogin>() {
        @Override
        public void onResponse(Call<JSONResponseLogin> call, Response<JSONResponseLogin> response) {

            JSONResponseLogin jsonResponse = response.body();
            data = new ArrayList<>(Arrays.asList(jsonResponse.getLogin()));
        }

        @Override
        public void onFailure(Call<JSONResponseLogin> call, Throwable t) {
            Log.d("Error", t.getMessage());
        }
    });
}

我的ModelLogin

public class ModelLogin {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }
}

我的RequestInterface_Login

public interface RequestInterface_Login {

    @GET("/login/{username}/{password}")
    Call<JSONResponseLogin> getJSON(@Path("username") String username, @Path("password") String password);
}

我的JSONResponseLogin

public class JSONResponseLogin {
    private ModelLogin[] login;

    public ModelLogin[] getLogin() {
        return login;
    }
}

但是找我NullPointerException

我从下面的服务中得到json

{"Key":null,"Response":1}

【问题讨论】:

  • API Hit 是 field 还是 JSON Response 的形式还是直接在 URL 中输入?
  • 我的库是: compile 'com.squareup.retrofit2:retrofit:2.1.0' compile ('com.squareup.retrofit2:converter-gson:2.0.0-beta4') { exclude module: “改造”}
  • 我不是在谈论改造。如果您可以分享实际的 API 链接,我可以为您提供帮助
  • 看看这个文档。 https://futurestud.io/tutorials/android-basic-authentication-with-retrofit 还有很多基本的例子还有如何处理http参数
  • @kshitij 耆那教。我编辑了我的问题。

标签: android retrofit retrofit2


【解决方案1】:

在你调用改造之前,你可以打印 URL,然后你可以在浏览器中加载 URL,看看会发生什么响应,你可以在 call.enqueue(new Callback&lt;JSONResponseLogin&gt;() 之前通过下面的行添加日志

Log.e(TAG, "API URL: " + call.request().url());

检查您的回复 让我知道我会帮助你......因为我在我的 3 个项目中使用改造

这样做...在界面中

 @GET("/courier.svc/login?)
 Call<JSONResponseLogin> getJSON(@Query("username") String username,
                                 @Query("password") String password);

并将其从基础 .baseUrl("http://192.168.8.11:8087") 中删除

【讨论】:

  • 我已经编辑了答案,请参阅执行此操作并让我知道它是否有效@JoJoRoid
  • 我现在可以看到真实的 URL 了。但是告诉我错误 java.lang.NullPointerException: storage == null 我认为它是用于 {"Key":null,"Response":1} 的?
  • 您是否使用任何身份验证(如 apikey 或秘密密钥)来调用 url? @JoJoRoid
  • 首先在 getpostman.com 中运行 api 并查看响应确保您不需要额外的查询参数来调用 url @JoJoRoid
【解决方案2】:

我正在使用我们最新的 Retrofit 库在“Android 中的改造”上写这篇文章,该插件可用于将改造集成到您的项目中。 在使用 reftrofit 之前,我们只需要按照一些步骤在 Android Studio 中添加 QAssist 插件,这将减少您在 Web 服务集成方面的工作量。

1.在您的 Android 工作室中添加(QAssist - Android Studio 插件)Android 插件。 (https://github.com/sakkeerhussain/QAssist).:-

2.当我们完成插件后,我们需要重新启动我们的 Android 工作室。

3.检查你的Android studio菜单栏你可以找到“QAssist”。

4.单击它并从 Retrofit Integrate 开始。

5.现在我们需要: - Web Api 的 BaseUrl - 所有 Api 的 en 点。 - 所有请求的示例请求和响应。 - 完成这些步骤后,您的改造(QAssist/改造包在项目内生成)。

6.您可以在该包中找到一个类和一个接口。

7.接口包含所有端点详细信息,Class将包含Retrofit连接详细信息。

8.我们只需要添加一个小代码来访问和 Api 并解析该 Api 对 Data 模型的响应。 9.使用此示例函数调用Api。

private void demoRetroFitCall() {
        APIService apiService = RetrofitManager.getInstance(this);
        //APIService apiService = RetroFitApiClient.getClient().create(APIService.class);
        Call<ModelData> call = apiService.TestGet();
        call.enqueue(new Callback<ModelData>() {
            @Override
            public void onResponse(Call<ModelData> call, Response<ModelData> response) {
                Log.d("TAG", "Data recived in response.body");            
                }

            @Override
            public void onFailure(Call<ModelData> call, Throwable t) {
                Log.e("TAG", t.toString());            
                }
        });
    }
56 - voda

【讨论】:

    猜你喜欢
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    相关资源
    最近更新 更多