2017-09-07 3 views
0

Je fais une requête dans les noms d'utilisateurs loadFriends() avec la méthode loadUserName() Mais rien ne se passe et la deuxième requête (loadUserName()) est déclenchée uniquement pour la première ligne. J'ai des journaux et le code de ce fragment Aussi, AS dites-moi, que Liste "noms" is never assigned, mais je ne le remplis pas dans la méthode loadUserNames()? Et est-ce lié à ma question (ne pas appeler onResponse et onFailure?) D'autres méthodes et demandes fonctionnent bienretofit2 n'appelle pas onResponse ou 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 

Répondre

0

code après des demandes de mise à niveau commence très rapidement. Il démarre plus rapidement que la réponse du serveur est Solution - pensez à la structure de l'appel de méthodes (obtenir une réponse complète -> start méthode suivante)

0

La variable names n'est jamais attribué que nous n'avons pas créé une instance de la liste .Et si vous essayez d'ajouter quelque chose à la liste qui est actuellement nulle se traduira par un NullPointerException. Je recommanderais d'initialiser la liste comme

private List<String> names=new ArrayList<>();