2016-09-29 10 views
-1

これは私のコードです。onResponseコールバックからデータを取得し、同じメソッドで返す

private long getLastTimestamp() 
{ 
    long timestamp = 0; 
    retrofit2.Call<UserStatistic> call = api.getUserStatistics(); 

    call.enqueue(new Callback<UserStatistic>() { 

     @Override 
     public void onResponse(retrofit2.Call<UserStatistic> call, Response<UserStatistic> response) { 
      if (response.body() != null) 
      { 
       List<Statistic> statistics = response.body().getData(); 

       statistics.get(statistics.size() - 1).Data; 
      } 
     } 

     @Override 
     public void onFailure(retrofit2.Call<UserStatistic> call, Throwable t) { 
      Log.d("LOG", "Something went wrong :c"); 
     } 

    }); 

    return timestamp; 
} 

私は本当にタイムスタンプ変数に保存された応答を返す方法がわかりません。何か案は?前もって感謝します。

答えて

2

このメソッドを同期的に呼び出す場合は、次のコードを使用できます。

private long getLastTimestamp() { 

     retrofit2.Call<UserStatistic> call = api.getUserStatistics(); 

     UserStatistic statistics = call.execute().body(); 

     long timestamp = statistics.YOUR_CODE; 

     return timestamp; 
    } 

か、非同期呼び出しを行いたい場合は、ネットワーク・オペレーションが別のスレッドで実行されcall.enqueue(...)メソッドを呼び出すことにより、この

private void callingMethod() { 

     getLastTimestamp (new Callback<UserStatistic>() { 

      @Override 
      public void onResponse(retrofit2.Call<UserStatistic> call, Response<UserStatistic> response) { 
       if (response.body() != null) 
       { 
        List<Statistic> statistics = response.body().getData(); 

        statistics.get(statistics.size() - 1).Data; 
       } 
      } 

      @Override 
      public void onFailure(retrofit2.Call<UserStatistic> call, Throwable t) { 
       Log.d("LOG", "Something went wrong :c"); 
      } 

     }); 
    } 

    private long getLastTimestamp(Callback<UserStatistic> callback) 
    { 
     long timestamp = 0; 
     retrofit2.Call<UserStatistic> call = api.getUserStatistics(); 

     call.enqueue(callback); 

     return timestamp; 
    } 
+0

これは私が必要なものです!ありがとうございました! –

0

これは

retrofit2.Call<UserStatistic> call = api.getUserStatistics(); 

のこのライン

call.enqueue(new Callback<UserStatistic>() { 

リスナーを作成して、データがロードされたとき、このリスナー改造のhelop内のネットワーク呼び出しはonResponse()メソッドを呼び出す後

+0

しかし、私はresponse.body()を返す必要があります。getData();メインメソッドから、私は私のコールバックonresponseからそれを得ることはできません。 –

0

のように、このメソッドを呼び出します。

結果に戻りたい場合は、call.execute()メソッドを使用して、ネットワーク操作を同期して実行する必要があります。

UIスレッド(https://developer.android.com/training/basics/network-ops/connecting.html)でネットワーク操作を実行できないため、注意してください。

希望に役立ちます!

関連する問題