2016-10-13 3 views
0

Я попытался следить за тем, как создать recyclerview для моего проекта класса, но по какой-то причине я не могу этого сделать. Я не уверен, чего не хватает. Идеи?Не удается заполнить RecylcerView Android

EDIT: Я пошел вперед и добавил больше кода на reuqest

Код, который имеет отношение:

String selectedVenue; 
String id; 
String currentuser; 
String venueType; 
boolean canComment; 
ArrayList<Comments> commentList = new ArrayList<>(); 

ParseGeoPoint venueLocation; 
ParseGeoPoint userLocation; 

Button commentButton; 
RecyclerView commentRecView; 
SwipeRefreshLayout mySwipeRefreshLayout; 

CommentDetailAlt commentDetailAdapter; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    setContentView(R.layout.activity_user_feed_alt); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    try{ 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
    catch (Exception e){ 
     e.printStackTrace(); 
    } 
    currentuser = ParseUser.getCurrentUser().getUsername(); 


    mySwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swiperefreshAlt); 
    mySwipeRefreshLayout.setOnRefreshListener(
      new SwipeRefreshLayout.OnRefreshListener() { 
       @Override 
       public void onRefresh() { 
        mySwipeRefreshLayout.setRefreshing(true); 
        commentList.clear(); 
        GetFeed download = new GetFeed(); 
        download.execute(); 
       } 
      } 

    ); 

    commentRecView = (RecyclerView) findViewById(R.id.comment_list); 
    commentRecView.setLayoutManager(new LinearLayoutManager(this)); 
    commentDetailAdapter = new CommentDetailAlt(commentList, this); 
    commentRecView.setAdapter(commentDetailAdapter); 

    UserFeedAlt.GetFeed download = new GetFeed(); 
    download.execute(); 

} 




public class GetFeed extends AsyncTask<String, Void, Void> { 
    ArrayList<Comments> temp = new ArrayList<>(); 

    @Override 
    protected Void doInBackground(String... strings) { 

     ParseQuery<ParseObject> contentFeed = new ParseQuery<>("UserCommentary"); 
     ParseQuery<ParseObject> drinks = new ParseQuery<>("venueDrinks"); 
     if(venueType.equals("House Parties")){ 
      //Query for Bars 
      drinks.whereEqualTo("venueName",selectedVenue); 
      drinks.whereEqualTo("venueID",id); 
      drinks.addDescendingOrder("createdAt"); 
      drinks.setLimit(2); 
      try{ 
       List<ParseObject>qReply = drinks.find(); 
       if(qReply.size()>0){ 
        for(ParseObject item : qReply){ 
         String drinkName = item.getString("venueDrinkName"); 
         float drinkPrice = (float) item.getInt("venuePriceDrink"); 
         boolean isImage = item.getBoolean("isImage"); 
         Bitmap bmp; 
         Comments drink = new Comments(String.valueOf(drinkPrice),selectedVenue,id,drinkName,0,true); 
         if(isImage){ 
          ParseFile dataPhoto = item.getParseFile("imgFile"); 
          byte[] data = dataPhoto.getData(); 
          bmp = BitmapFactory.decodeByteArray(data, 0 ,data.length); 
          drink.photoFile = bmp; 
         } 
         temp.add(drink); 
        } 
       } 
       else{ 
        String comment = "Nothing Here"; 
        String owner = "Mr. Smith"; 
        int count = 0; 
        String id = "Test"; 
        String venueName = "Smith's Mayback's"; 
        Comments newComment = new Comments(comment,venueName,id,owner,count,false); 
        temp.add(newComment); 
       } 
      } 
      catch (Exception e){ 
       e.printStackTrace(); 
      } 


      contentFeed.whereEqualTo("venueName",selectedVenue); 
      contentFeed.whereEqualTo("venueID",id); 
      contentFeed.addDescendingOrder("createdAt"); 
      try{ 
       List<ParseObject>qReply = contentFeed.find(); 
       if(qReply.size()>0){ 
        for(ParseObject item : qReply){ 
         String commentOwner = item.getString("owner"); 
         String commentContent = item.getString("comment"); 
         boolean isImage = item.getBoolean("image"); 
         Bitmap bmp; 
         Comments comment = new Comments(commentContent,selectedVenue,id,commentOwner,0,false); 
         if(isImage){ 
          ParseFile dataPhoto = item.getParseFile("imgFile"); 
          byte[] data = dataPhoto.getData(); 
          bmp = BitmapFactory.decodeByteArray(data, 0 ,data.length); 
          comment.photoFile = bmp; 
         } 
         temp.add(comment); 
        } 
       } 
      } 
      catch (Exception e){ 
       e.printStackTrace(); 
      } 


     } 
     else if(venueType.equals("Bars")){ 
      //Query for HouseParties 
      contentFeed.whereWithinMiles("Location",userLocation,0.00284091); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
     commentList = temp; 
     Log.i("AppInfo", String.valueOf(commentList.size())); 
     commentDetailAdapter.notifyDataSetChanged(); 
     mySwipeRefreshLayout.setRefreshing(false); 



    } 


} 
+1

Где вы настройки адаптера для RecyclerView? И проверьте, что вы добавили какой-либо LayoutManager с RecyclerView. – ajantha

+0

Ах да, я установил это в методе onCreate как 'commentRecView = (RecyclerView) findViewById (R.id.comment_list); commentRecView.setLayoutManager (новый LinearLayoutManager (это)); commentDetailAdapter = new CommentDetailAlt (commentList, this); commentRecView.setAdapter (комментарийDetailAdapter); ' –

+0

Вам также нужно будет уведомить адаптер после завершения AsyncTask –

ответ

0

добавить функцию onPostExecute к AsyncTask и уведомить адаптер

protected void onPostExecute(String result) { 
    commentDetailAdapter.notifyDataSetChanged(); 
} 

onPostExecute вызовы после завершения фонового процесса (до этого может быть пуст coz), а onPostExecute может получить доступ к основному потоку.

+0

Я добавил код, по какой-то причине это тоже не исправило. –

+0

сделал U убедиться, что массив данных не пуст –

+0

Yeap его нет. Я проверил с сервером синтаксического анализа и размером массива после метода post post. 2 элемента должны существовать –

0

Оригинал:

commentDetailAdapter = new CommentDetailAlt(commentList, this); 
commentRecView.setAdapter(commentDetailAdapter); 

UserFeedAlt.GetFeed download = new GetFeed(); 
download.execute(); 

Изменить что

UserFeedAlt.GetFeed download = new GetFeed(); 
download.execute(); 

commentDetailAdapter = new CommentDetailAlt(commentList, this); 
commentRecView.setAdapter(commentDetailAdapter); 
+0

Спасибо за ваш ответ, оказывается, я уверен, что пользовательский объект 'Комментарии' на самом деле является источником проблемы. В настоящее время я пытаюсь исправить это. –

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