2015-03-31 144 views
0

我正在輸入列表中的對象,並注意到最後添加的這個覆蓋了列表上的所有其他對象,下面的代碼片段。Android:添加到列表中的最後一個對象覆蓋所有其他對象

private List<NoticiaListView> getNoticias() { 
     try { 
      List<Noticia> lNoticiaParseObject = null; 
      List<NoticiaListView> lNoticiaListView = new ArrayList<NoticiaListView>(); 
      NoticiaListView nListView = new NoticiaListView(); 

      ParseQuery<Noticia> query = ParseQuery.getQuery(Noticia.class); 
      query.whereEqualTo("ativo", true); 
      query.include("imagem"); 
      lNoticiaParseObject = query.fromLocalDatastore().find(); 

      if (!lNoticiaParseObject.isEmpty()) { 
       for (Noticia noticia : lNoticiaParseObject) { 
        nListView.setImagem(noticia.getImagemByteArray((Midia) noticia.getParseObject("imagem"))); 
        nListView.setTitulo(noticia.getTitulo()); 
        nListView.setConteudo(noticia.getConteudo()); 
        nListView.setLink(noticia.getLink()); 
        nListView.setCreatedAt(noticia.getCreatedAt().getTime()); 

        lNoticiaListView.add(nListView); 
       } 
       return lNoticiaListView; 
      } 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

CLASSE NoticiaListView:

public class NoticiaListView { 
    private String titulo; 
    private String conteudo; 
    private String link; 
    private long createdAt; 
    private byte[] imagemBytes; 

    public NoticiaListView() { 
     /*this.titulo = titulo; 
     this.conteudo = conteudo; 
     this.link = link; 
     this.createdAt = createdAt; 
     this.imagemBytes = imagemBytes;*/ 
    } 

    //region GETTERS 

    public String getTitulo() { 
     return titulo; 
    } 

    public String getConteudo() { 
     return conteudo; 
    } 

    public String getLink() { 
     return link; 
    } 

    public long getCreatedAt() { 
     return createdAt; 
    } 

    public byte[] getImagem() { 
     return imagemBytes; 
    } 

    //endregion 

    //region SETTERS 

    public void setTitulo(String titulo) { 
     this.titulo = titulo; 
    } 

    public void setConteudo(String conteudo) { 
     this.conteudo = conteudo; 
    } 

    public void setLink(String link) { 
     this.link = link; 
    } 

    public void setCreatedAt(long createdAt) { 
     this.createdAt = createdAt; 
    } 

    public void setImagem(byte[] imagem) { 
     this.imagemBytes = imagem; 
    } 
    //endregion 
} 

類Noticia:

public class Noticia extends ParseObject { 

    public Noticia() { 
     /*deixar vazio*/ 
    } 

    //region GETTERS 
    public ParseACL getParseACL(){ 
     return getParseACL(); 
    } 

    /*public String getObjectId() { 
     return getObjectId(); 
    }*/ 

    /*public Date getCreatedAt() { 
     return getCreatedAt(); 
    }*/ 

/* public Date getUpdatedAt() { 
     return getUpdatedAt(); 
    }*/ 

    public boolean isAtivo() { 
     return getBoolean("ativo"); 
    } 

    public String getConteudo() { 
     return getString("conteudo"); 
    } 

    public String getLink() { 
     return getString("link"); 
    } 

    public String getTitulo() { 
     return getString("titulo"); 
    } 

    public byte[] getImagemByteArray(Midia midia) { 
     byte[] imageData = new byte[0]; 
     try { 
      imageData = midia.getParseFile("arquivo").getData(); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return imageData; 
    } 
    //endregion 

    //region SETTERS 
    public void setACL(ParseACL acl){ 
     put("ACL", acl); 
    } 

    public void setCreatedAt(Date createdAt) { 
     put("createdAt", createdAt); 
    } 

    public void setUpdatedAt(Date updatedAt) { 
     put("updatedAt", updatedAt); 
    } 

    public void setAtivo(boolean ativo) { 
     put("ativo", ativo); 
    } 

    public void setConteudo(String conteudo) { 
     put("conteudo", conteudo); 
    } 

    public void setLink(String link) { 
     put("link", link); 
    } 

    public void setTitulo(String titulo) { 
     put("titulo", titulo); 
    } 

    public void setImagem(ParseRelation<Midia> imagem) { 
     put("imagem", imagem); 
    } 
    //endregion 
} 

如何使用列表解決這個問題?我希望不要因爲某個原因改變收藏。我讀了另一個問題,可能的問題可能是「靜態字段」,但在我的代碼中沒有任何靜態字段。

回答

2

安卓:最後一個對象添加到列表將覆蓋所有其他

創建對象的nListViewNoticiaListView類中for-each循環,在ArrayList中添加新的對象:

for (Noticia noticia : lNoticiaParseObject) { 
    // create object here 
    NoticiaListView nListView = new NoticiaListView(); 
    // ... your code here..  
    lNoticiaListView.add(nListView); 
    } 
1

重新初始化的對象nListView

for (Noticia noticia : lNoticiaParseObject) { 
         nListView.setImagem(noticia.getImagemByteArray((Midia) noticia.getParseObject("imagem"))); 
         nListView.setTitulo(noticia.getTitulo()); 
         nListView.setConteudo(noticia.getConteudo()); 
         nListView.setLink(noticia.getLink()); 
         nListView.setCreatedAt(noticia.getCreatedAt().getTime()); 

         lNoticiaListView.add(nListView); 
         nListView = new NoticiaListView(); 
        } 

希望這可以幫到你..

3

請改變你的代碼如下。因爲你剛剛創建了一個對象,應該根據你的列表大小多次創建它。你應該在for循環中創建對象。

private List<NoticiaListView> getNoticias() { 
    try { 
     List<Noticia> lNoticiaParseObject = null; 
     List<NoticiaListView> lNoticiaListView = new ArrayList<NoticiaListView>(); 


     ParseQuery<Noticia> query = ParseQuery.getQuery(Noticia.class); 
     query.whereEqualTo("ativo", true); 
     query.include("imagem"); 
     lNoticiaParseObject = query.fromLocalDatastore().find(); 

     if (!lNoticiaParseObject.isEmpty()) { 
      for (Noticia noticia : lNoticiaParseObject) { 
       NoticiaListView nListView = new NoticiaListView();/// change here. 
       nListView.setImagem(noticia.getImagemByteArray((Midia) noticia.getParseObject("imagem"))); 
       nListView.setTitulo(noticia.getTitulo()); 
       nListView.setConteudo(noticia.getConteudo()); 
       nListView.setLink(noticia.getLink()); 
       nListView.setCreatedAt(noticia.getCreatedAt().getTime()); 

       lNoticiaListView.add(nListView); 
      } 
      return lNoticiaListView; 
     } 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 
相關問題