我正在使用Volley从HTTP API获取JSONObject。
我的问题是我想让我的方法等待响应侦听器得到结果,否则我的方法返回的是一个空对象。
我尝试使用synchronize wait和notify来实现它,但似乎不起作用,activity在isfinished.wait()之后冻结,并且侦听器没有触发。你能告诉我我的代码出了什么问题吗?
public JSONObject query(String url) throws InterruptedException {
finished=false;
Req = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
synchronized (isFinished){
Retour = response;
finished = true;
isFinished.notifyAll();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
synchronized (isFinished){
Retour = null;
finished = true;
isFinished.notifyAll();
}
}
});
Queue.add(Req);
synchronized (isFinished) {
while (!finished) {
isFinished.wait();
}
return Retour;
}
}
我通过更改设计解决了这个问题,因此该方法不会返回任何东西,而是回调一个使用者接口,然后将结果检索到类字段数据中:
Consumer<JSONObject> cons = a -> Data=a;
原来的代码变成了:
public void query(String url,Consumer<JSONObject> cons) {
Req = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Retour = response;
callb.accept(Retour);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Retour = null;
callb.accept(null);
}
});
Queue.add(Req);
}
问题内容: 嗨,我想使用WMI类来查找应用程序和产品信息。但是问题是我想使用Java或任何脚本语言(如python,javascript或perl)。我听说过JWMI,这可能是一个选择。有人可以帮我吗??? 问题答案: JavaScript和Java不是一回事。 JavaScript Windows脚本宿主(WSH)下提供了JavaScript。有了它,访问WMI相当容易: jWMI(Java)
问题内容: 我正在编写小型且非常干燥的框架,该框架高度依赖元数据。我想知道是否有一种方法来获取方法参数名称,即给定一些方法 得到的字符串和。 我知道我可以注释参数,但是那不是很好。 问题答案: 我们为包含参数名称的String[]的方法创建了一个自定义注释。与必须注释每个单独的参数相比,此方法感觉易于管理。我们计划添加构建时检查,以确保带注释的参数名称的数量与参数的数量匹配,因为这是我们所需要的。
问题内容: 我有Visio2007,我真的很喜欢。但是,它似乎没有Java的UML模型/数据类型。我可以为Java下载一些模板吗?还是我应该完全忘记Visio并获得一个Elipse插件? 谢谢! 问题答案: 后者是更好的选择,恕我直言。此外,我认为UML模型不应该特定于Java。我不知道周围是否有特定于Java的UML。 我在网上搜索时发现了这个。UML模型:MS Visio 2007。
我们可以使用这些jvm标志来确定编译阈值,但是有没有一种方法可以在运行时以编程方式确定它?
我试图使用bytebuddy返回一些字段作为列表。我打电话给数组。asList()使用MethodCall,但无法处理可变长度参数。还有其他方法吗? 错误: 线程“main”java中出现异常。lang.ExceptionInInitializerError由以下原因引起:java。IllegalStateException:公共静态java。util。列出java。util。数组。asList(
问题内容: doIt函数将打印“ dad”。有没有办法让它打印“儿子”? 问题答案: 是。但是就变量而言,它会被覆盖(将新值赋予变量。将新定义赋予函数是Override)。 在父类的块中使用时,该值将得到反映 如果变量是静态的,则在初始化时使用静态块更改其值, 否则更改构造函数。 你还可以稍后在任何块中更改该值。它将反映在超一流