• 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. }

  • 相关阅读:
    猿创征文|Cglib代理之代理类方法的动态传递
    开发工具 - Ubuntu版本VS code离线安装
    飞桨中国行落地广州 共探企业智能化升级新路径
    Unity Shader实现UI流光效果
    微信小程序客服功能
    基于matlab目标雷达横截面建模(附源码)
    python爬虫
    Zookeeper入门(一)
    对数字化时代的企业来说,数据治理难做,但应该去做
    Java中的标记接口(标签接口)
  • 原文地址:https://blog.csdn.net/m0_52238102/article/details/126186191