2016-07-03 27 views
-1

我在CustomerService類中有兩個方法,並且當我在HomeFragment上調用它們五次時,我看到在getTransactions回調中我得到getCard服務響應雖然使用OkHttp調用多個異步請求,但有時回調會受到干擾

public class CustomerService { 

    OkHttpClient okHttpClient = new OkHttpClient(); 

    ..... 

    public void getTransactions(String memberId, Callback callback) 
    { 
     List<Pair> params = new ArrayList<>(); 
     params.add(new Pair<>("member_id", memberId)); 

     String url = BASE_URL + "customer/gettransaction/?" + getQuery(params); 
     Request request = new Request.Builder().url(url).build(); 
     okHttpClient.newCall(request).enqueue(callback); 
    } 

    public void getCard(String memberId, Callback callback) 
    { 
     List<Pair> params = new ArrayList<>(); 
     params.add(new Pair<>("member_id", memberId)); 

     String url = BASE_URL + "customer/getcard/?" + getQuery(params); 
     Request request = new Request.Builder().url(url).build(); 

     okHttpClient.newCall(request).enqueue(callback); 
    } 

} 

而在片段類我打電話給他們如下:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    rootView = inflater.inflate(R.layout.fragment_activities, container, false); 
    realm = Realm.getDefaultInstance(); 

    getCardData(); 
    getTransactions(); 

    .... 

    return rootView; 
} 

private void getTransactions() { 
    final User currentUser = UserRepository.getUser(realm); 

    customerService.getTransactions(currentUser.getMember_id(), new Callback() { 
     @Override 
     public void onFailure(Call call, final IOException e) { 

      Log.d(TAG, "Transaction service error: " + e.getMessage()); 
     } 

     @Override 
     public void onResponse(Call call, Response response) throws IOException { 

      Type responseType = new TypeToken<WsResponse<List<WsTransaction>>>() {}.getType(); 
      final List<WsTransaction> wsTransactionList = LoyaltyService.getWsResponseData(response, responseType); 

      if (wsTransactionList != null) { 

       .... 
      } 
     } 
    }); 
} 

private void getCardData() { 
    final User currentUser = UserRepository.getUser(realm); 

    customerService.getCard(currentUser.getMember_id(), new Callback() { 
     @Override 
     public void onFailure(Call call, final IOException e) { 

      Log.d(TAG, "Customer - GetCard service error: " + e.getMessage()); 
     } 

     @Override 
     public void onResponse(Call call, Response response) throws IOException { 

      Type responseType = new TypeToken<WsResponse<WsCard>>() {}.getType(); 
      final WsCard wsCard = LoyaltyService.getWsResponseData(response, responseType); 
      if (wsCard != null) { 

       ..... 
      } 
     } 
    }); 
} 

如果我遲疑呼籲一半getTransactions第二,那麼它就沒有問題。或者當我調試時,我沒有任何問題。有人可以幫助我理解我錯過了什麼嗎?

回答

0

原來是服務器端問題。

0

帶回調的排隊是異步的,所以很可能您使用的是相同的回調,但不等待登錄成功。如果是這種情況,並且您期待某個結果的順序,那麼第二次getCard請求很可能在登錄之前完成。

需要更多的上下文來確認這是否可能。

+0

我沒有使用相同的回調,我添加了更多的上下文 – efeyc

+0

登錄調用和回調不存在。 –

+0

對不起,我改名了他們 – efeyc