2014-12-11 4 views
0

В моем приложении у меня есть JSONArray, который содержит некоторую информацию о значках. Я получаю эти данные и добавляю в Object (Batalha) и генерирую List<Batalha>, которые содержат всю информацию. Теперь мне нужно отфильтровать этот список, чтобы подсчитать, сколько значков у игрока. Ссылка на значок - ID_Arena. Проблема в том, что я не знаю, почему дублирует информацию в ListAdapter.Фильтрация списка с помощью объекта?

Как я могу это сделать?

здесь.

JSON

"retorno": { 
     "batalhas": { 
      "aberto": [ 
       { 
        "ID": "17", 
        "player1": "[email protected]", 
        "player2": "[email protected]", 
        "data_inicio": "2014-12-05 16:32:03", 
        "data_fim": null, 
        "status": "1", 
        "ID_arena": "1", 
        "vez_player": "[email protected]", 
        "player_vencedor": null, 
        "adversario": [ 
         { 
          "ID": "9", 
          "nome": "Joao Paulo", 
          "email": "[email protected]", 
          "foto": "e8357f1a1d05334f08c84d2de0049234.png", 
          "status": "1", 
          "online": "0", 
          "pontuacao": "1260", 
          "graduacao": "Ministro" 
         } 
        ], 

        "badges": [ 
         { 
          "ID": "41", 
          "email": "[email protected]", 
          "ID_batalha": "17", 
          "ID_arena": "1", 
          "status": "0" 
         }, 
         { 
          "ID": "45", 
          "email": "[email protected]", 
          "ID_batalha": "17", 
          "ID_arena": "1", 
          "status": "0" 
         }, 
         { 
          "ID": "51", 
          "email": "[email protected]", 
          "ID_batalha": "17", 
          "ID_arena": "1", 
          "status": "0" 
         }, 
         { 
          "ID": "52", 
          "email": "[email protected]", 
          "ID_batalha": "17", 
          "ID_arena": "1", 
          "status": "0" 
         }, 
         { 
          "ID": "53", 
          "email": "[email protected]", 
          "ID_batalha": "17", 
          "ID_arena": "4", 
          "status": "0" 
         }, 
         { 
          "ID": "54", 
          "email": "[email protected]", 
          "ID_batalha": "17", 
          "ID_arena": "4", 
          "status": "0" 
         } 
        ] 
       }, 

Получение и подготовка JSON

/** get a List<Batalha> that contain batalha informations/opponent/badges */ 
    public ApplicationController getAllBattles(final BatalhaAdapter listener){ 
    ApplicationController apc = new ApplicationController(urlGet.toString(), 
                    null, 
                    new Response.Listener<JSONObject>() { 
                     @Override 
                     public void onResponse(JSONObject obj) { 
                      //define batalha 
                      try { 
                       JSONObject objRetorno = obj.getJSONObject("retorno"); 

                       /** abertas */ 
                       JSONObject objBatalhas = objRetorno.getJSONObject("batalhas");                                      
                       Gson gson = new Gson(); 

                       JSONArray arrayAberto = objBatalhas.getJSONArray("aberto"); 
                       List<Batalha> listBatalhaAberta = new ArrayList<Batalha>(); 

                       //batalha aberta 
                       for(int x = 0; x < arrayAberto.length(); x++){ 
                        JSONObject jsObj = arrayAberto.getJSONObject(x);          
                        Batalha batalha = gson.fromJson(jsObj.toString(), Batalha.class); 

                        //adversario 
                        JSONArray arrayAdversario = jsObj.getJSONArray("adversario"); 
                        for(int i = 0; i < arrayAdversario.length(); i++){ 
                         JSONObject jsAdvers = arrayAdversario.getJSONObject(i); 
                         Usuario usuario = gson.fromJson(jsAdvers.toString(), Usuario.class); 
                         batalha.addAdversario(usuario); 
                        } 

                        //badges 
                        JSONArray arrayBadges = jsObj.getJSONArray("badges"); 
                        for(int i = 0; i < arrayBadges.length(); i++){ 
                         Log.i("BATALHA_ID_GETALLBATTLES->", batalha.getId() + ""); 
                         JSONObject jsBadge = arrayBadges.getJSONObject(i); 
                         BadgesGanha badge = gson.fromJson(jsBadge.toString(), BadgesGanha.class); 
                         batalha.addBadgesGanha(badge);                     
                        } 
                        //// 
                        listBatalhaAberta.add(batalha); 
                       } 
    listener.getAllBattlesOpened(listBatalhaAberta); 

Определение ListAdapter

private void getAllBattles(){ 
      ApplicationController app = new BatalhaDAO().getAllBattles(new BatalhaAdapter(){ 
       @Override 
       public void getAllBattlesOpened(List<Batalha> list) { 
        if(!list.isEmpty()){ 
         listBatalhaAberto = list; 
         if(jogosListAdapterAndamento == null){ 
          jogosListAdapterAndamento = new JogosListAdapter(getView().getContext(), listBatalhaAberto); 
          lvJogosAndamento.setAdapter(jogosListAdapterAndamento); 
         }else{ 
          jogosListAdapterAndamento.changeList(listBatalhaAberto); 
         } 
        } 
       } 

ListAdapter

public class JogosListAdapter extends BaseAdapter { 
    private List<Batalha> lista; 
    private Context context;  

    public JogosListAdapter(Context context, List<Batalha> list){ 
     this.context = context; 
     this.lista = list; 
    } 

    @Override 
    public int getCount() { 
     return lista.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return lista.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    public void changeList(List<Batalha> lista){ 
     this.lista = lista; 
     notifyDataSetChanged();  
    } 

    @Override 
    public View getView(int position, View view, ViewGroup parent) { 
     Batalha batalha = lista.get(position); 
     View layout; 
     if (view == null){ 
      LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      layout = inflater.inflate(R.layout.jogos_list_adapter, parent, false); 
     }else{ 
      layout = view; 
     } 

     //get and count badges of usuario 
     //badges 
     int bgP1 = 0; 
     int bgP2 = 0; 
     if(!batalha.getBadges().isEmpty()){ 
      for(BadgesGanha bg : batalha.getBadges()){ 
       if(Long.parseLong(String.valueOf(bg.getID_batalha())) == batalha.getId()){ 
        if(bg.getEmail().equals("[email protected]")){ 
         bgP1++; 
        }else{ 
         bgP2++; 
        } 
       } 
      } 
     } 

    tvValorJogador.setText(String.valueOf(bgP1)); 
      tvRivalJogador.setText(String.valueOf(bgP2)); 

Баталья Bean

public class Batalha implements Serializable{ 
    private static final long serialVersionUID = 1L; 

    @SerializedName("ID") 
    private Long id; 

    private String player1; 
    private String player2; 
    private String data_inicio; 
    private String data_fim; 
    private int status; 
    private int ID_arena; 
    private String vez_player; 
    private String player_vencedor; 

    private List<Usuario> adversarios = new ArrayList<Usuario>(); 
    private List<BadgesGanha> badges = new ArrayList<BadgesGanha>(); 

ответ

0

Я решил проблему.

Проблема была в моем методе getAllBattles, который дублирует мой список. Я меняю его и теперь работаю.

Смежные вопросы