扫码关注官方订阅号
闭关修行中......
谢邀,然而不懂android……不过类似js的ajax请求一样,你可以传一个callback函数进去,或者用消息-订阅机制,或者用监听模式。
假设是callback函数,可以如下:
public interface DoSomethingAfterPost { void doSomthing(String data);//返回类型和传什么参数进去由你的业务决定 } public static void http_post(String URL, DoSomethingAfterPost callback) { client.post(url, params, new AsyncHttpResponseHandler() { public void onSuccess(int statusCode,String response) { if (statusCode == 200) { //在这里如何将数据返回到A的代码? callback(response); } } public void onFailure(Throwable e) { } }); }
可以考虑在异步回调中(就是那个onsuccess)发出一个broadcast,然后在自己的页面上监听那个broadcast,一旦发现,则认为服务器有应答
很不明白你要即时得到数据的场景为什么一定要用异步?改成同步吧!
首先申明不会android开发,那么只能给思路了
异步请求成功以后不执行后续任何操作,另外开一个请求定时轮询检测请求结果的接口
异步请求成功以后不执行后续任何操作,开一个异步通知接口等待接口方来通知你结果
结合你的业务场景和开发方式来选择好了
用看这个情景用handler就可以了。这应该只是一个java库,只是处理网络的异步请求直接。这个时候你用handler直接更新ui就可以了,更新ui必须在主线程中。
如果需要用数据更新 ui,那么就使用 handler 回传数据到主线程处理。在 activity 内声明一个 handler 对象,用这个对象来回传数据和操作 ui。
可以 Google 一下 handler 的用法
把AsyncHttpResponseHandler在B中的实现提到A中,也就是在A中写一个实现了AsyncHttpResponseHandler接口的内部类,然后将这个内部类传给http_post方法,所以你得改为http_post(String url, AsyncHttpResponseHandler handler),然后方法里调用client.post(url, params, handler)就好了。这样子你就可以在A中处理回调了。
AsyncHttpResponseHandler
B
A
http_post
http_post(String url, AsyncHttpResponseHandler handler)
client.post(url, params, handler)
用RxJava
1、主线程内是禁止网络请求的,所以只能在异步线程中使用,回调就是用来处理异步的请求回来了,主线程的UI控件刷新2、多个模块要用这个数据,那么可以3中解决方案:A、存放在内存;B、存sharedpreference内;C、存数据库
异步线程的核心作用是把耗时任务从ui线程中解放出来,换句话说,你这个网络请求完全可以放在ui线程中(android4.0以后不允许),然后经过一段时间的网络请求得到结果,继续执行你之后的代码,这样的执行顺序是完全可以得到保证的。但显然这不是个聪明的做法,ui界面卡那么长时间没人受得了,所以一般我们用异步回调机制解决这个问题,即执行任务时传入callback实例,callback中有我们要等到耗时任务执行完毕后要执行的代码,在异步任务完成后调用callback。这样就达到了我们之前的目的,在android中还需要处理下线程问题,写一个典型的例子:
private void loadFromNetwork(String url,Callback callback){ new Thread (new Runnable{ //网络请求 //请求完毕后调用callback,callback也可以传值 //将得到的结果加入post队列发送到主线程,否则若onSuccess中代码有涉及到ui更新将报错。 handler.post(new Runnable{ callback.onSuccess(); }); }).start(); }
volley框架 你值得拥有!
当然也可以自己写接口回调!
public doInterface di; public interface doInterface{ void onSucceed(); void onError(); } public void doSomethingListenner(doInterface di){ this.di=di; http.post(Error error){ if(error==null){ di.onSucceed(); }else{ di.onError(); } } } //使用接口 public void setData(){ doSomethingListenner(new doInterface(){ @override void onSucceed(){ } @override void onError(){ } }); }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
谢邀,然而不懂android……不过类似js的ajax请求一样,你可以传一个callback函数进去,或者用消息-订阅机制,或者用监听模式。
假设是callback函数,可以如下:
可以考虑在异步回调中(就是那个onsuccess)发出一个broadcast,然后在自己的页面上监听那个broadcast,一旦发现,则认为服务器有应答
很不明白你要即时得到数据的场景为什么一定要用异步?改成同步吧!
首先申明不会android开发,那么只能给思路了
异步请求成功以后不执行后续任何操作,另外开一个请求定时轮询检测请求结果的接口
异步请求成功以后不执行后续任何操作,开一个异步通知接口等待接口方来通知你结果
结合你的业务场景和开发方式来选择好了
用看这个情景用handler就可以了。这应该只是一个java库,只是处理网络的异步请求直接。这个时候你用handler直接更新ui就可以了,更新ui必须在主线程中。
如果需要用数据更新 ui,那么就使用 handler 回传数据到主线程处理。
在 activity 内声明一个 handler 对象,用这个对象来回传数据和操作 ui。
可以 Google 一下 handler 的用法
把
AsyncHttpResponseHandler在B中的实现提到A中,也就是在A中写一个实现了AsyncHttpResponseHandler接口的内部类,然后将这个内部类传给http_post方法,所以你得改为http_post(String url, AsyncHttpResponseHandler handler),然后方法里调用client.post(url, params, handler)就好了。这样子你就可以在A中处理回调了。用RxJava
1、主线程内是禁止网络请求的,所以只能在异步线程中使用,回调就是用来处理异步的请求回来了,主线程的UI控件刷新
2、多个模块要用这个数据,那么可以3中解决方案:A、存放在内存;B、存sharedpreference内;C、存数据库
异步线程的核心作用是把耗时任务从ui线程中解放出来,换句话说,你这个网络请求完全可以放在ui线程中(android4.0以后不允许),然后经过一段时间的网络请求得到结果,继续执行你之后的代码,这样的执行顺序是完全可以得到保证的。
但显然这不是个聪明的做法,ui界面卡那么长时间没人受得了,所以一般我们用异步回调机制解决这个问题,即执行任务时传入callback实例,callback中有我们要等到耗时任务执行完毕后要执行的代码,在异步任务完成后调用callback。
这样就达到了我们之前的目的,在android中还需要处理下线程问题,写一个典型的例子:
volley框架 你值得拥有!
当然也可以自己写接口回调!