• okHttp网络请求结果Response返回主线程中


        首先我们知道Android3.0 之后已经不允许在主线程中访问网络了,我们在访问网络时必须要新建一个线程去执行,但是这样的话请求返回的响应在另一个线程中,我尝试过使用全局静态变量等等其他,最后还是使用Handler解决的问题。

        注明:Android开发小白,可能这不是特别好的方法,但是亲测有效。

    首先在主线程内写一个Handler

    1. private boolean registerUser(User user) {
    2. //准备JSON数据
    3. JSONStringer jsonText= new JSONStringer();
    4. try {
    5. jsonText.object();
    6. jsonText.key("account");
    7. jsonText.value(user.getAccount());
    8. jsonText.key("password");
    9. jsonText.value(user.getPassword());
    10. jsonText.endObject();
    11. } catch (JSONException e) {
    12. e.printStackTrace();
    13. }
    14. //准备Handler负责传递消息
    15. Handler handler=new Handler(){
    16. @Override
    17. public void handleMessage(@NonNull Message msg) {
    18. super.handleMessage(msg);
    19. Response s=(Response)msg.obj;
    20. try {
    21. Log.e("sd",ss.body().string()); //打印响应的body
    22. } catch (IOException e) {
    23. e.printStackTrace();
    24. }
    25. }
    26. };
    27. //调用post方法,将JSON数据发送
    28. Network.postSync(jsonText.toString(),handler); //自己写的工具类,用于post请求
    29. return true;
    30. }

    POST请求方法:
            这是我写的一个工具类,url是指定的一个地址,我用的全局变量。

    1. public static void postSync(String json,Handler handler){
    2. new Thread(){
    3. @Override
    4. public void run() {
    5. //准备请求体
    6. RequestBody body=RequestBody.create(MediaType.parse("application/json"),json);
    7. //准备请求
    8. Request request=new Request.Builder().url(url).post(body).build();
    9. Call call=okHttpClient.newCall(request);
    10. Response response=null;
    11. try {
    12. //通过Handler传递消息
    13. Message message=Message.obtain();
    14. message.what=123;
    15. message.obj=call.execute();
    16. handler.sendMessage(message);
    17. } catch (IOException e) {
    18. e.printStackTrace();
    19. }
    20. }
    21. }.start();
    22. }

  • 相关阅读:
    【基于C的排序算法】交换排序之快速排序
    在Windows的Docker上部署Mysql服务
    体验馆设计要考虑哪些需求
    【shell】$# 获取函数参数
    网络原理——No.4 传输层_TCP协议中的延迟应答, 捎带应答, 面向字节流与TCP的异常处理
    Java集合框架(二)Set
    如何才能让UI自动化收益更大?
    接口自动化测试 —— 工具、请求与响应
    01-React入门
    从MEV角度来看 为什么合并是以太坊的分水岭?
  • 原文地址:https://blog.csdn.net/m0_52238102/article/details/126186191