我有一个在线请求json的课程。工作正常,但功能无效,我需要对活动返回true或false的函数。这是一个例子:
public class Async extends AbstractService{
public void getData(fina Context context){
JSONObject param = new JSONObject();
try {
param.put("field_1", "1");
param.put("field_3", "2");
param.put("field_3", "3");
}catch (Exception e) {}
requester = new HttpRequestController().sendPost("auth/device", param, new HttpRequestController.CallBackRequest(){
@Override
public void run(final String result) {
new Thread(new Runnable() {
@Override
public void run() {
if(resultObj.optBoolean("success")) {
//here return true or false
}
}
}).start();
System.out.println("test auth 1: " + result);
}
});
}
}
public class MainActivity extends baseActivity{
....
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Async auth = new Async();
auth.getUserDevice(this); //how to test is true or false ?
}
}
答案 0 :(得分:1)
由于某种原因,该函数为void
。异步函数由于其异步性质而不应返回某些内容。不可能依赖你不知道什么时候(或者甚至是否会)返回某些东西。
如果您有兴趣在成功完成异步任务的情况下执行某些操作,我认为是这种情况,您应该完全这样做。这是一个活动操作,它完全在您知道操作已完成的代码块内部开始。此操作可以重置状态,或发出事件以通知对此类事件感兴趣的任何人。
答案 1 :(得分:1)
像这样使用AsyncTask:
public class MyTask extends AsyncTask<Void,Boolean,Boolean> {
JSONObject param;
MyTask(){
param = new JSONObject();
try {
param.put("field_1", "1");
param.put("field_3", "2");
param.put("field_3", "3");
}catch (Exception e) {}
}
@Override
protected Boolean doInBackground(Void... voids) {
// do your request call and get result then,
return resultObj.optBoolean("success");
}
}
然后像这样执行:
public class MainActivity extends baseActivity {
....
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
boolean b = new MyTask().execute().get();
}
}
答案 2 :(得分:0)
将void更改为布尔值,并且在函数内你可以验证如果某个json确实已经发送到某个地方或者生成了,则放置一个条件: if(json.length()&gt; 0) return true;