Я получил уведомление от FCM о Google, но мое сообщение искажено. Как это решить? - PullRequest
0 голосов
/ 21 февраля 2020

Запись прошла успешно, но тело сообщения было искажено.

{"data": {"data_content": "測試", "data_title": "Joyce"}, "messages": {"body ":" 測試 "," title ":" test "}," to ":" myDeviceId "}

this.is мой почтовый индекс, есть ли что-то неправильное? Спасибо.

<pre><code>
public class HttpConnection {

    public void startConnection(final String apiUrl, final String jsonStr, final OnPostNotificationListener listener) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                HttpURLConnection conn = null;
                StringBuilder response = new StringBuilder();

                try {
                    URL url = new URL(apiUrl);
                    conn = (HttpURLConnection) url.openConnection();
                    conn.setRequestProperty("Authorization","key=Key");
                    conn.setRequestProperty("Content-Type","application/json");
                    conn.setRequestMethod("POST");
                    conn.setConnectTimeout(10000);
                    conn.setReadTimeout(10000);
                    conn.setDoInput(true);
                    conn.setDoOutput(true);
                    conn.setUseCaches(false);

                    OutputStream os = conn.getOutputStream();
                    DataOutputStream writer = new DataOutputStream(os);
                    writer.writeBytes(jsonStr);
                    writer.flush();
                    writer.close();
                    os.close();
                    //Get Response
                    InputStream is = conn.getInputStream();

                    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                    String line;

                    while ((line = reader.readLine()) != null) {
                        response.append(line);
                        response.append('\r');
                    }
                    listener.onSuccessful(response.toString());
                    reader.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                    listener.onFail(ex.toString());
                } finally {
                    if (conn != null) {
                        conn.disconnect();
                    }
                }
            }
        }).start();


    }


    public interface OnPostNotificationListener{
        void onSuccessful(String result);
        void onFail(String exception);
    }

}

Спасибо за помощь. Картинка телефона

1 Ответ

1 голос
/ 25 февраля 2020

Проблема связана с методом writeBytes и представлением кандзи (или других символов, отличных от ISO-8859-1). Вы должны использовать метод writeUTF вместо:

writer.writeUTF(jsonStr);

Вы можете взглянуть на в этом посте, объясняя разницу между writeBytes и writeUTF. По сути, вы всегда должны использовать writeUTF при написании строк.

...