Rest API выдает ошибку синтаксического анализа JSON: исключение во время синтаксического анализа JSON в строке: 1 столбец: 1 буфер

#codenameone

#codenameone

Вопрос:

Я использую Rest API, и когда я использую Rest.put(), он выдает ошибку. Он вообще не доходит до сервера. Я не знаю, где я ошибаюсь. Вот мой код:

 Response<String> res = Rest.put(URLLinks.getMainBackend()   "items")
                        .body(reqJson.toString())
                        .jsonContent()
                        .bearer(initForm.data.getString("jwt"))
                        .header("token", initForm.data.getString("token"))
                        .pathParam("id", item.getId())
                        .onErrorCodeJSON((errorData) -> {
                            if (errorData.getResponseCode() == 404) {
                                Dialog dlg = rich.Dialog("Not found!");

                                Button yes = new Button("Close");
                                yes.addActionListener(ev -> {
                                    dlg.dispose();
                                });

                                dlg.add(new SpanLabel("//////!"));
                                dlg.add(FlowLayout.encloseRight(yes));
                                dlg.showPacked(BorderLayout.CENTER, true);
                            }else if (errorData.getResponseCode() == 402){
                               
                            }
                        })
                        .getAsString();
 

Выдает ошибку:

 java.io.IOException: Stream closed
[Network Thread] 0:0:12,855 - Codename One revisions: 4afb54f6a5cecd2b6fbee170262d5c3c8d9431f9

[Network Thread] 0:0:12,855 - Exception: java.io.IOException - Stream closed
[Network Thread] 0:0:12,858 - Exception during JSON parsing at row: 1 column: 1 buffer: 
[EDT] 0:0:12,874 - Exception: java.lang.NullPointerException - null
    at com.codename1.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:140)
    at com.codename1.io.BufferedInputStream.read1(BufferedInputStream.java:338)
    at com.codename1.io.BufferedInputStream.read(BufferedInputStream.java:445)
    at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.base/java.io.InputStreamReader.read(InputStreamReader.java:185)
    at com.codename1.io.JSONParser$ReaderClass.read(JSONParser.java:124)
    at com.codename1.io.JSONParser.parse(JSONParser.java:188)
    at com.codename1.io.JSONParser.parseJSON(JSONParser.java:475)
    at com.codename1.io.rest.RequestBuilder$Connection.readUnzipedResponse(RequestBuilder.java:683)
    at com.codename1.io.gzip.GZConnectionRequest.readResponse(GZConnectionRequest.java:67)
    at com.codename1.io.ConnectionRequest.performOperation(ConnectionRequest.java:809)
    at com.codename1.io.NetworkManager$NetworkThread.run(NetworkManager.java:282)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
java.lang.NullPointerException
    at java.base/java.lang.String.<init>(String.java:537)
    at com.codename1.io.rest.RequestBuilder.getAsString(RequestBuilder.java:361)
    at com.falcontechnology.items.NewItem.backendItem(NewItem.java:425)
    at com.falcontechnology.items.NewItem.lambda$itemFields$7(NewItem.java:296)
    at com.codename1.ui.util.EventDispatcher.fireActionEvent(EventDispatcher.java:349)
    at com.codename1.ui.Button.fireActionEvent(Button.java:570)
    at com.codename1.ui.Button.released(Button.java:604)
    at com.codename1.ui.Button.pointerReleased(Button.java:708)
    at com.codename1.ui.Form.pointerReleased(Form.java:3356)
    at com.codename1.ui.Component.pointerReleased(Component.java:4552)
    at com.codename1.ui.Display.handleEvent(Display.java:2080)
    at com.codename1.ui.Display.edtLoopImpl(Display.java:1052)
    at com.codename1.ui.Display.mainEDTLoop(Display.java:970)
    at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
 

Нулевой указатель в строке newItem.java:425 указывает на строку, где есть .getAsString() .
Что я могу делать неправильно?

Редактировать

Я обновил библиотеки своего проекта, которые разрешили исключение нулевого указателя в .getAsString(), но он по-прежнему оставляет другую ошибку, которая:

     java.io.IOException: Stream closed
[Network Thread] 0:0:54,316 - Exception: java.io.IOException - Stream closed
[Network Thread] 0:0:54,344 - Exception during JSON parsing at row: 1 column: 1 buffer: 
    at com.codename1.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:140)
    at com.codename1.io.BufferedInputStream.read1(BufferedInputStream.java:338)
    at com.codename1.io.BufferedInputStream.read(BufferedInputStream.java:445)
    at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.base/java.io.InputStreamReader.read(InputStreamReader.java:185)
    at com.codename1.io.JSONParser$ReaderClass.read(JSONParser.java:191)
    at com.codename1.io.JSONParser.parse(JSONParser.java:278)
    at com.codename1.io.JSONParser.parseJSON(JSONParser.java:568)
    at com.codename1.io.rest.RequestBuilder$Connection.readUnzipedResponse(RequestBuilder.java:785)
    at com.codename1.io.gzip.GZConnectionRequest.readResponse(GZConnectionRequest.java:67)
    at com.codename1.io.ConnectionRequest.performOperationComplete(ConnectionRequest.java:1002)
    at com.codename1.io.NetworkManager$NetworkThread.run(NetworkManager.java:340)
    at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)
 

Комментарии:

1. Я предполагаю, что идентификатор равен нулю, но трудно сказать, поскольку библиотеки вашего проекта, похоже, устарели. В настройках Codename One обновите библиотеки проекта в зависимости от версии Codename One, которая у вас есть.

2. Что касается устаревших библиотек, я следовал процедурам по этой ссылке codenameone.com/blog/netbeans-plugin-update-center.html и пока я обновлял некоторые другие плагины в netbeans, он показал мне, что он также обновляет codenameone, и я не возражал против этого. Я только что понял, что вместо этого понизил рейтинг моего плагина. Возможно, @Shai Almog должен разобраться в этом.

3. Это не процесс обновления Codename One. Это процесс обновления плагина. Codename One обновляется через Codename One Настройки -> Основные -> Обновить библиотеки проекта в старом пользовательском интерфейсе и через пункт меню справа в новом пользовательском интерфейсе

4. Я понимаю. Спасибо

Ответ №1:

По-видимому, когда вы используете .pathparam() , вам также необходимо добавить параметр в URL. Поэтому я скорректировал свой код на:

 Response<String> res = Rest.put(URLLinks.getMainBackend()   "items" item.getId())
                        .body(reqJson.toString())
                        .jsonContent()
                        .bearer(initForm.data.getString("jwt"))
                        .header("token", initForm.data.getString("token"))
                        .pathParam("id", item.getId())
                        .onErrorCodeJSON((errorData) -> {
                            if (errorData.getResponseCode() == 404) {
                                Dialog dlg = rich.Dialog("Not found!");

                                Button yes = new Button("Close");
                                yes.addActionListener(ev -> {
                                    dlg.dispose();
                                });

                                dlg.add(new SpanLabel("//////!"));
                                dlg.add(FlowLayout.encloseRight(yes));
                                dlg.showPacked(BorderLayout.CENTER, true);
                            }else if (errorData.getResponseCode() == 402){
                               
                            }
                        })
                        .getAsString();