gpt4 book ai didi

java - CodenameOne 连接请求等待 postResponse

转载 作者:行者123 更新时间:2023-12-01 11:07:49 25 4
gpt4 key购买 nike

我已经完成了一个休息网络服务,它为我提供了一些联系信息,例如号码、年龄......我在此功能中获取了所有这些信息

public static void getRest(String search) {
if(search.equals("")){
json="http://localhost:8080/com.vogella.jersey.first/rest/jsonServices/print/";
} else {
json="http://localhost:8080/com.vogella.jersey.first/rest/jsonServices/print/"+search;
}

ConnectionRequest req = new ConnectionRequest() {

@Override
protected void postResponse() {

}

@Override
protected void readResponse(InputStream input) throws IOException {
JSONParser p = new JSONParser();
Map<String, Object> h = p.parseJSON(new InputStreamReader(input));
ArrayList object=new ArrayList();

for (Entry<String, Object> entry : h.entrySet()) {
object = (ArrayList) entry.getValue();

int i=object.size();
}

for(int i=0; i<object.size();i++){
LinkedHashMap s= (LinkedHashMap) object.get(i);
Risultati.add(s);
}
}
};

req.setUrl(json);
req.setPost(false);
req.addRequestHeader("Accept", "application/json");
InfiniteProgress prog = new InfiniteProgress();
Dialog dlg = prog.showInifiniteBlocking();
req.setDisposeOnCompletion(dlg);
NetworkManager.getInstance().addToQueue(req);

Risultati 是该类的一个属性:ArrayList<LinkedHashMap> Risultati;

问题是当我调用函数getRest("")时这样:

getRest("");
Label contatto=null;
for(int j=0;j<Risultati.size();j++){
LinkedHashMap s=Risultati.get(j);
String nome=(String) s.get("firstName");
String cognome=(String) s.get("lastName");
String numero =(String) s.get("numero");
contatto=new Label(nome+" "+cognome+" "+numero);
}
hi.addComponent(contatto);

事实证明 Risultati 为空,如果我注释 for 循环,我注意到内部函数 readResponse 是在...之后执行的,我不知道我做错了什么

最佳答案

我认为重点是您正在调用NetworkManager.getInstance().addToQueue(req)。根据it's documentation ,它将向队列添加一个连接请求(您刚刚创建的请求)。连接请求添加到队列后就会返回,这意味着此时该请求可能已执行,也可能尚未执行。

你必须有选择来处理这个问题。在我看来,最好的方法是在请求完成后更新用户界面,如 the "File System, Storage, Network & Parsing" chapter 中所述。 CodeOne 手册的内容:

req.addResponseListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
NetworkEvent e = (NetworkEvent)ev;
// ... process the response
}
});

或者,您可以将对 addToQueue(req) 的调用替换为 addToQueueAndWait(req)。后一种方法会等待队列中的请求被处理。后一种方法的缺点是,在处理请求时,您的用户界面可能会卡住,因为 UI 线程在网络 I/O 上被阻塞。

关于java - CodenameOne 连接请求等待 postResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32739790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com