2016-09-01 73 views
0

我有,我POST请求到服务器,如果数据库是空的,我添加项目到数据库中,如果在数据库中的一些项目,只是使它们在适配器的方法。没有显示物品recyclerView

private void getContacts() { 
     database = SugarRecord.listAll(ContactORM.class); 

     if(database.isEmpty()) { 
      showProgressDialog(); 
      FactoryAPI.getContacts().getContacts(user.getToken()).enqueue(new Callback<ContactsResponse>() { 
       @Override 
       public void onResponse(Call<ContactsResponse> call, Response<ContactsResponse> response) { 
        if (response.isSuccessful()) { 
         contactList = response.body().getContactsList(); 
         if (database.isEmpty()) { 
          for (int i = 0; i < contactList.size(); i++) { 
           ContactORM contact = new ContactORM(); 
           contact.setId(contactList.get(i).getId()); 
           contact.setName(contactList.get(i).getName()); 
           contact.setLastname(contactList.get(i).getLastname()); 
           contact.setEmail(contactList.get(i).getEmail()); 
           contact.setPhoto(contactList.get(i).getPhoto()); 
           contact.save(); 
           database.add(contact); 
          } 
         } 
         progressDialog.dismiss(); 
         setRecyclerView(); 
        } 
       } 

       @Override 
       public void onFailure(Call<ContactsResponse> call, Throwable t) { 
        Toast.makeText(getContext(), "failure", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } 
     //set recycler view 
     recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
     mAdapter = new ContactsAdapter(getContext(), database); 
     recyclerView.setAdapter(mAdapter); 

    } 

setRecyclerView方法:

database = SugarRecord.listAll(ContactORM.class); 
recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
mAdapter = new ContactsAdapter(getContext(), database); recyclerView.setAdapter(mAdapter); 

适配器:

class ContactsAdapter extends RecyclerView.Adapter<ContactsAdapter.ViewHolder> { 

    List<ContactORM> database; 
    Context mContext; 

    public ContactsAdapter(Context context, List<ContactORM> contacts) { 
     this.mContext = context; 
     this.database = contacts; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int type) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item_contact, parent, false); 
     return new ViewHolder(view); 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder { 
     @BindView(R.id.avatar) CircleImageView avatar; 
     @BindView(R.id.name) TextView name; 

     public ViewHolder(View rowView) { 
      super(rowView); 
      ButterKnife.bind(this, rowView); 
     } 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, final int position) { 
     ContactORM contact = database.get(position); 
     if ((contact.getLastname() != null)) { 
      holder.name.setText(contact.getName() + " " + contact.getLastname()); 
     } else { 
      holder.name.setText(contact.getName()); 
     } 
     //if photo is not null, load image 
     if (!(contact.getPhoto() == null)) { 
      Picasso.with(mContext).load(contact.getPhoto()).resize(100, 100).into(holder.avatar); 
     } 
    } 

    @Override 
    public int getItemCount() { 
     return database.size(); 
    } 
} 

如果我将项目添加到数据库中,项目将显示 - 这是好的,但如果数据库是不是空的,它显示了什么都没有,我如何显示在我的适配器中的项目?

+0

这个代码不正确,修复第一... – BruceStackOverFlow

+0

@BruceStackOverFlow:不要简单地说,不正确或一些东西 说,一些使用全这样他就可以解决问题。 ... 如果不正确,至少识别并告诉他。 –

+0

@兰姆好。我打算调用一个不存在的函数 setRecyclerView。并且很难理解什么是错误的... – BruceStackOverFlow

回答

0

您应该在获得数据后更新适配器。现在你有一个异步事件,你在完成之前设置recycleview。

+0

方法setRecyclerView()是好的,问题是当我从数据库中获取数据,所以:在数据库中有一些数据。 – Stepan

+0

你能分享一下setRecyclerView()方法吗? – breakline

+0

是的,我编辑我的问题 – Stepan

0

尝试......

..... 
// initialize database here 
private ContactsAdapter mAdapter; 
private RecyclerView mRecyclerView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Initialize recycler view 
    mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
    mRecyclerView.setHasFixedSize(true); 
    mRecyclerView.setAdapter(mAdapter); 

    // database is must not be null here; if null initialize it. 
    mAdapter = new ContactsAdapter(getContext(), database); 
    getContacts(); 
} 

private void getContacts() { 
    database = SugarRecord.listAll(ContactORM.class); 

    if(database.isEmpty()) { 
     showProgressDialog(); 
     FactoryAPI.getContacts().getContacts(user.getToken()).enqueue(new Callback<ContactsResponse>() { 
      @Override 
      public void onResponse(Call<ContactsResponse> call, Response<ContactsResponse> response) { 
       if (response.isSuccessful()) { 
        contactList = response.body().getContactsList(); 
        if (database.isEmpty()) { 
         for (int i = 0; i < contactList.size(); i++) { 
          ContactORM contact = new ContactORM(); 
          contact.setId(contactList.get(i).getId()); 
          contact.setName(contactList.get(i).getName()); 
          contact.setLastname(contactList.get(i).getLastname()); 
          contact.setEmail(contactList.get(i).getEmail()); 
          contact.setPhoto(contactList.get(i).getPhoto()); 
          contact.save(); 
          database.add(contact); 
         } 
        } 
        progressDialog.dismiss(); 
        mAdapter.notifyDataSetChanged(); 
       } 
      } 

      @Override 
      public void onFailure(Call<ContactsResponse> call, Throwable t) { 
       Toast.makeText(getContext(), "failure", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    }else { 
     mAdapter.notifyDataSetChanged(); 
    } 
} 
+0

感谢,但它没有帮助我,但不幸的是它是相同的 - 数据不可见 – Stepan

相关问题