新手-99 2022-07-29 07:30 采纳率: 79.3%
浏览 44
已结题

安卓POST请求怎么放到线程里?

最近写了个获取验证码,为减少代码复用,我把post网络请求放在了一个工具类里面,当主程序无需获取服务器的返回数据时,只用new Thread这种线程就行了,但是当需要获取返回值时,比如获取用户名,验证码等,用new Thread就不行了

请问怎么实现在一个有返回值的post请求方法中开创线程?并且主程序还能调用这个return数据?真是刚入坑,自己实现不了,多谢多谢!

  • 写回答

3条回答 默认 最新

  • 耳东陈的陈 2022-07-29 09:23
    关注

    还是可以用new Thread,只不过在run方法中要通过handler传值给主线程
    class Mhandler extends Handler {

        // 通过复写handlerMessage() 从而确定更新UI的操作
        @Override
        public void handleMessage(Message msg) {
            // 根据不同线程发送过来的消息,执行不同的UI操作
            // 根据 Message对象的what属性 标识不同的消息
            switch (msg.what) {
                case 1:
                    mTextView.setText("执行了线程1的UI操作");
                    break;
                case 2:
                    mTextView.setText("执行了线程2的UI操作");
                    break;
            }
        }
    }
    

    // 此处用2个工作线程展示
    new Thread() {
    @Override
    public void run() {
    这里执行http请求
    String result = post(url,data);
    // 通过sendMessage()发送
    // a. 定义要发送的消息
    Message msg = Message.obtain();
    msg.what = 2; //消息的标识
    msg.obj =result; // 消息的存放
    // b. 通过Handler发送消息到其绑定的消息队列
    mHandler.sendMessage(msg);
    }
    }.start();

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月9日
  • 已采纳回答 8月1日
  • 创建了问题 7月29日

悬赏问题

  • ¥15 (SQL语句|查询结果翻了4倍)
  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用
  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊