2017-09-07 20 views
0

我使用loadUserName()方法在loadFriends()用戶名中發出請求 但沒有任何反應,第二個請求(loadUserName())僅爲第一個通道觸發。我有這個片段的日誌和代碼 另外,AS告訴我,列表「名稱」is never assigned,但我不填充它的方法loadUserNames()?並與我的問題(沒有要求onResponse和onFailure處?)這個相關 其他方法和要求做工精細retofit2不會調用onResponse或on onFailure

public class FriendsFragment extends Fragment { 

private String sid; 
private PenyokService friendsService; 
private RecyclerView friendsRecyclerView; 
private FriendsAdapter friendsAdapter; 
private List<Integer> ids; 
private List<String> names; 

public FriendsFragment() { 
} 

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

    friendsRecyclerView = (RecyclerView) inflater.inflate(R.layout.fragment_stats, container, false); 

    // view = getView(); 
    sid = ((MainActivity) getActivity()).getSid(); 
    friendsService = APIUtils.getPService(); 

    friendsRecyclerView = (RecyclerView) inflater.inflate(R.layout.fragment_stats, container, false); 
    friendsAdapter = new FriendsAdapter(new ArrayList<Integer>(0), new ArrayList<String>(0), getActivity().getApplicationContext(), sid); 
    friendsRecyclerView.setAdapter(friendsAdapter); 
    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
    friendsRecyclerView.setLayoutManager(layoutManager); 
    loadFriends(); 

    return friendsRecyclerView; 
} 

private void loadFriends(){ 
    friendsService.getFriends(sid).enqueue(new Callback<Model>() { 

     @Override 
     public void onResponse(Call<Model> call, Response<Model> response) { 
      if(response.isSuccessful()) { 
       ids = response.body().getMyFriends(); 
       Log.d("testtest", "start load names"); 
       for (int i : ids) 
        Log.d("test", "loaded names " + i); 
       loadUserName(ids); 
       Log.d("testtest", "loaded names"); 
       friendsAdapter.updateFriends(response.body().getMyFriends(), names); 
       // Toast.makeText(getActivity(), "Gav gav", Toast.LENGTH_SHORT).show(); 
      } 
     } 

     @Override 
     public void onFailure(Call<Model> call, Throwable t) { 
      //showErrorMessage(); 
      Log.d("testtest", t.toString()); 
      Toast.makeText(getActivity(), t.toString(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

private void loadUserName(List<Integer> id) { 
    Log.d("test", "loading names"); 
    for (int x : id) { 
     Log.d("testtest", "after for " + x); 
     friendsService.getUserName(x, sid).enqueue(new Callback<Model>() { 

      @Override 
      public void onResponse(Call<Model> call, Response<Model> response) { 
       Log.d("testtest", "before response is successful"); 
       if (response.isSuccessful()) { 
        Log.d("testtest", "response is successful"); 
        if (response.body().getNameFor() != null) { 
         names.add(response.body().getNameFor()); 
         Log.d("testtest", "in onResponse"); 
        } 
       else { 
         names.add("Set your name"); 
         Log.d("testtest", "we set name"); 
        } 
       } 
      } 

      @Override 
      public void onFailure(Call<Model> call, Throwable t) { 
       //showErrorMessage(); 
       Log.d("testtest", t.toString() + "loadUserName"); 
       // Toast.makeText(getActivity(), t.toString(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
} 

}

09-07 15:35:30.993 6238-6238/com.journaldev.navigationdrawer D/testtest: start load names 
09-07 15:35:30.993 6238-6238/com.journaldev.navigationdrawer D/test: loaded names 1 
09-07 15:35:30.993 6238-6238/com.journaldev.navigationdrawer D/test: loaded names 2 
09-07 15:35:30.993 6238-6238/com.journaldev.navigationdrawer D/test: loaded names 4 
09-07 15:35:30.993 6238-6238/com.journaldev.navigationdrawer D/test: loading names 
09-07 15:35:30.993 6238-6238/com.journaldev.navigationdrawer D/testtest: after for 1 
09-07 15:35:31.053 6238-6238/com.journaldev.navigationdrawer D/testtest: after for 2 
09-07 15:35:31.063 6238-6238/com.journaldev.navigationdrawer D/testtest: after for 4 
09-07 15:35:31.103 6238-6238/com.journaldev.navigationdrawer D/testtest: loaded names 

回答

0

代碼改造請求後,很快開始。它首先不是從服務器的響應速度來 解決方案 - 想想調用方法的結構(得到充分的響應 - >啓動下一個方法)

0

names變量從未被賦予我們還沒有創建的列表中的一個實例。如果你試圖添加任何東西到目前爲空的列表將導致NullPointerException。我會建議初始化列表爲

private List<String> names=new ArrayList<>(); 
相關問題