2016-03-07 7 views
0

Я пытаюсь получить данные, которые я положил в консоль Backendless, и показать их в приложении для Android, но данные не отображаются. Он просто показывает пустое действие/экран. Это тоже не сбой. Честно говоря, я был бы более доволен, если бы это было так. Любая помощь будет принята с благодарностью!Данные из backend не отображаются в recyclerview

Heres мой код:

private List<Cake> list; 
private Context context; 

public CakeAdapter(Context context, List<Cake> list) { 
    this.context = context; 
    this.list = list; 
} 

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

@Override 
public void onBindViewHolder(CakeHolder holder, int position) { 

    final Cake cake = list.get(position); 
    holder.type.setText(cake.getType()); 
    holder.description.setText(cake.getDescription()); 

    // holder.type.setText("I dont know."); 
    // holder.description.setText("Just some random text. I am in the mood for pizza."); 
} 

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

public class CakeHolder extends RecyclerView.ViewHolder { 
    //Setup Views 
    CardView card; 
    TextView type; 
    TextView description; 

    public CakeHolder(View itemView) { 
     super(itemView); 

     //Assign views by ID 
     card = (CardView) itemView.findViewById(R.id.cakecard); 
     type = (TextView) itemView.findViewById(R.id.type); 
     description = (TextView) itemView.findViewById(R.id.description); 
    } 
} 

}

общественный класс CakeActivity расширяет BaseActivity реализует SwipeRefreshLayout.OnRefreshListener, FloatingActionButton.OnClickListener {

//Setup Views 
private Toolbar toolbar; 
private SwipeRefreshLayout swipe; 
private FloatingActionButton fab; 
private RecyclerView recycler; 

//Setup adapter 
private CakeAdapter adapter; 

//Setup Cake 
private List<Cake> Cake = new ArrayList<>(); 

//Setup backend call 
private BackendlessCollection<Cake> cakes; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_Cake); 

    //Setup toolbar 
    toolbar = (Toolbar) findViewById(R.id.bar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setHomeButtonEnabled(true); 

    //Setup SwipeView 
    swipe = (SwipeRefreshLayout) findViewById(R.id.swipe); 
    swipe.setOnRefreshListener(this); 
    swipe.setColorSchemeResources(R.color.colorPrimaryDark, 
      R.color.blade, 
      android.R.color.holo_orange_light, 
      R.color.fruit); 

    //Setup Recyclerview 
    recycler = (RecyclerView) findViewById(R.id.recycler); 
    recycler.setItemAnimator(new DefaultItemAnimator()); 
    recycler.setLayoutManager(new LinearLayoutManager(this)); 
    recycler.setHasFixedSize(true); 
    adapter = new CakeAdapter(this, cake); 
    recycler.setAdapter(adapter); 

    //Setup FAB and attach to recycler 
    fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.attachToRecyclerView(recycler); 
    fab.setOnClickListener(this); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      supportFinishAfterTransition(); 
      return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onClick(View v) { 
    //do something later 
} 

@Override 
public void onRefresh() { 
    refreshCakes(); 
    if (swipe.isRefreshing()) { 
     swipe.setRefreshing(false); 
    } 
} 

private void refreshCakes() { 
    QueryOptions query = new QueryOptions(); 
    query.setPageSize(20); 

    BackendlessDataQuery queries = new BackendlessDataQuery(query); 

    Backendless.Data.of(Cake.class).find(queries, new AsyncCallback<BackendlessCollection<Cake>>() { 
     @Override 
     public void handleResponse(BackendlessCollection<Cake> cakeBackendlessCollection) { 
      cakes = cakeBackendlessCollection; 
      addMore(cakeBackendlessCollection); 
     } 

     @Override 
     public void handleFault(BackendlessFault backendlessFault) { 
      Log.d("Cake", "Error: " + backendlessFault.getMessage()); 
     } 
    }); 

} 

private void addMore(BackendlessCollection<Cake> next) { 
    cake.addAll(next.getCurrentPage()); 
    adapter.notifyDataSetChanged(); 
} 

}

+0

Не могли бы вы отладить этот код и проверить, есть ли у вас ответ от Backendless с данными? – Scadge

+0

Я получаю ответ от Backendless, и он показывает, что я сделал звонок, но данные в recyclerview не показывают его. Какие-либо предложения? –

+0

Просто убедитесь, что он работает; добавьте 'notifydatasetchanged' в метод' onRefresh' после вызова 'refreshCakes'. – oxyt

ответ

1

Ну, я m будет дублировать ответ с e support topic: имя таблицы на Backendless должно соответствовать точно название вашего класса.

Или иначе, вы должны позвонить Backendless.Data.mapTableToClass("YourTableName", YourClassName.class) где-нибудь в начале вашей программы.