java - 如何使用 RETROFIT 库发布原始 JSON 对象

标签 java android firebase firebase-cloud-messaging retrofit

我尝试使用 Postman 并使用相同的 JSON 对象进行测试,它工作得很好,但当我使用改造库时它不起作用。

我尝试将 JSON 对象放入 Pojo 类中,但仍然不起作用。

通知服务类

public interface NotificationService {
    @Headers({
            "Content-Type:"+ApiConstants.CONTENT_TYPE,
            "Authorization:"+ApiConstants.SERVER_KEY
    })
    @POST(ApiConstants.SEND)
    Call<ResponseBody> sendNotification(@Body String body);

}

API 常量类

public class ApiConstants {
    public static final String SERVER_KEY = "key=mykey";
    public static final String SEND = "send";
    public static final String BASE_URL = "https://fcm.googleapis.com/fcm/";
    public static final String CONTENT_TYPE = "application/json";
    public static final String NOTIFICATION = "{\n" +
            "    \"to\": \"/topics/MISSING\",\n" +
            "    \"data\": {\n" +
            "        \"extra_information\": \"This is some extra information\"\n" +
            "    },\n" +
            "    \"notification\": {\n" +
            "        \"title\": \"She pressed the button\",\n" +
            "        \"text\": \"She misses you\",\n" +
            "        \"click_action\": \"MAINACTIVITY\"\n" +
            "    }\n" +
            "}";
}

主要 Activity

private void buttonIsPressed() {
        RetrofitClient retrofitClient;
        retrofitClient = RetrofitClient.getInstance();


        Call<ResponseBody> call = retrofitClient.getNotificationService().sendNotification(ApiConstants.NOTIFICATION);

        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                ResponseBody result = response.body();
                String gs = new Gson().toJson(result);
                Log.d("MainActivity", "response = " + gs);
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.d(TAG, "//onFailure");
            }
        });
    }

我正在尝试在按下按钮时向某些特定用户发送通知。据我所知,唯一不起作用的是我在使用 Call<ResponseBody> sendNotification(@Body String body) 时为正文提供了错误的输入。

最佳答案

您应该创建一个模型类

public class MyRequestBodyModel {

    @SerializedName("id")
    private int id;

    @SerializedName("name")
    private String name;

}

创建 MyRequestBodyModel 的新实例并传递您的值

MyRequestBodyModel model = new MyRequestBodyModel();
model.id = 1;
model.name = "john";

将此模型的实例设置为改造调用方法的参数

Call<ResponseBody> sendNotification(@Body MyRequestBodyModel model);

关于java - 如何使用 RETROFIT 库发布原始 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56839243/

相关文章:

android - 导航组件,检查返回堆栈中是否存在 fragment

Android Intent.FLAG_ACTIVITY_SINGLE_TOP 和 Intent.FLAG_ACTIVITY_CLEAR_TOP

Java套接字连接超时,在本地工作

java - 如何让 Hadoop 命令行脚本在 Win32 上运行?

android - 当从地址中找到经纬度时,如何给出地址?

javascript - 随着时间的推移,firebase 的存在变得越来越错误

node.js - Firebase Cloud 函数和 Cloud Vision API : TypeError: vision. detectorText 不是函数

java - Java Micro Edition 最好的语音识别库是什么?

java - @Transactional 注释未启动事务(Guice Persist)

firebase - 是否可以在一个项目中创建多个 Firebase 实时数据库实例(>20)