zoukankan      html  css  js  c++  java
  • 公司一个同事问的问题

    他在写Android客户端的时候提出来的疑问,具体看下面代码(他的代码与这个有差别,但是本质是一样的):

     1 public String getLink() {
     2         JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
     3 
     4                     @Override
     5                     public void onResponse(JSONObject response) {
     6                         shortenURL = response.getString("url");
     7                     }
     8                 }, new Response.ErrorListener() {
     9 
    10                     @Override
    11                     public void onErrorResponse(VolleyError error) {
    12                         // TODO Auto-generated method stub
    13 
    14                     }
    15                 });
    16 
    17           
    18 
    19                 return shortenURL;
    20 
    21 
    22     }

    他说,怎么改进这个代码,熟悉的同学一下子就看出来了,onResponse函数是本质就是callback机制,在onResponse还没有调用完成(shortenURL还没有赋值得到正确结果),getLink就返回了(此时shortenURL是无效的)。

    解决办法其实有了:

    不要以返回值的方式来写getLink函数,按异步的方式编写getLink,给getLink传入一个callback函数,在onReponse函数成功取得数据后再来调用传入的callback就行了

    references:

    http://stackoverflow.com/questions/23833977/android-wait-for-volley-response-to-return

    http://stackoverflow.com/questions/34184088/how-can-i-return-value-from-function-onresponse-of-retrofit

  • 相关阅读:
    Flutter 导航栏上添加搜索按钮
    tabController保活
    nav 选项卡
    flutter 毛玻璃
    [题解]CodeForces878 D
    [题解]CodeForces878C Tournament
    [题解]NOIP2012
    bzoj1070题解
    bzoj1061题解
    bzoj1059题解
  • 原文地址:https://www.cnblogs.com/foohack/p/6734790.html
Copyright © 2011-2022 走看看