楼主没有明白为何访问网络的操作会要求在线程中执行吗?这是为了防止界面无响应严重影响用户体验.
这个问题正常的解决办法是在具体的页面中新建 Handler , 然后在线程中取得数据后直接 sendMessage.
如果一定要使用现有的方法,那得改造一下,增加一个参数,这个参数是一个接口,通过接口回传数据.

解决方案 »

  1.   


    访问网络放到子线程中就是为了避免ui受影响,如果按lz的思路,非要得到一个什么返回值,还不如直接在主线程访问网络。解除主线程网络访问限制StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                     .detectDiskReads()
                     .detectDiskWrites()
                     .detectNetwork()   // or .detectAll() for all detectable problems
                     .penaltyLog()
                     .build());
             StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                     .detectLeakedSqlLiteObjects()
                     .detectLeakedClosableObjects()
                     .penaltyLog()
                     .penaltyDeath()
                     .build());
      

  2.   

    网络请求完可以发Message出去,Message里可以带Bundle数据,你可以在这Bundle中存放一些数据,在handleMessage里,可以获取到Message里的Bundle数据
      

  3.   

    既然已经是异步处理了,我倒是觉得 你可以通过observer模式把结果给返回了,而不是通过函数返回值。
      

  4.   

    handleMessage这个Message就是携带信息的啊,本身这个用法就避免了自建回调函数这种麻烦一点的做法。
    简单的话Message.what 和 Message.object都可以,还可以按楼上说的放bundle(Message.setData(Bundle bundle)),handleMessage的时候把这些个信息拿出来做你要做的
      

  5.   

    同意LS ,用Bundle  对象。
      

  6.   

    把 Handler 定义在 Activity 全局变量;定义一个全局变量 A , 初始值设置为 -1 或者 null, 当 Handler 中获取到了这个数据, 直接给全局变量赋值 ; 在方法中, 你线程执行完毕之后 设置一个 while 无线循环 , 条件是 你设置的全局变量 A 不等与 你的初始值, 然后 把 A 返回;如果 A 需要重复使用, 你在方法中设置一个临时变量, 将 A 赋值给临时变量, 然后将 A 设置为初值, 返回临时变量; 
      

  7.   

    如果这个返回值有多处使用的话就定义一个全局变量接收就行了,如果只有一处使用,可以用message传到handler里面处理,,你这个函数可以不用返回值