#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();