2016-12-11 2 views
0

Ich habe Firebaase Recyclerview verwendet und es mit einem JSON hochgeladen. Ich habe die Artikel geordnet in der JSON-Datei und möchte sie in der gleichen Reihenfolge erhalten. Jedoch jedes Mal, wenn ich es in meiner App durcheinander gebracht habe. Wie löst man das?Wie bekomme ich eine bestellte JSON-Datei von Firebase

public class NoticesFragment extends Fragment { 

    private RecyclerView mNoticesList; 
    private DatabaseReference mDatabase; 
// private ProgressDialog vProgress; 
    private View rootview; 
    private FirebaseRecyclerAdapter<Notices,NoticeViewHolder> firebaseRecyclerAdapter; 


    public NoticesFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     rootview = inflater.inflate(R.layout.fragment_notices, container, false); 
     Toast.makeText(getActivity(),"Please Wait While Load , It May Take Some Time ...", Toast.LENGTH_SHORT).show(); 

     mDatabase = FirebaseDatabase.getInstance().getReference().child("notice"); 

     mNoticesList = (RecyclerView) rootview.findViewById(R.id.notices_list); 

     mNoticesList.setLayoutManager(new LinearLayoutManager( getActivity())); 

     mNoticesList.setHasFixedSize(true); 

     return rootview; 
    } 


    @Override 
    public void onStart() { 
     super.onStart(); 

     firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Notices, NoticeViewHolder>(

       Notices.class, 
       R.layout.list_view_row, 
       NoticeViewHolder.class, 
       mDatabase 

     ) { 
      @Override 
      protected void populateViewHolder(NoticeViewHolder viewHolder, Notices model, int position) { 
        viewHolder.setRefertext(model.getRefer()); 
        viewHolder.setDatetext(model.getDate()); 
        viewHolder.setLink(model.getLink()); 
      } 
     }; 



     mNoticesList.setAdapter(firebaseRecyclerAdapter); 

    } 

    public static class NoticeViewHolder extends RecyclerView.ViewHolder{ 

     final View mView; 
     private String link; 
     private Intent myIntent; 
     public NoticeViewHolder(View itemView) { 
      super(itemView); 

      mView = itemView; 
      mView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        try { 
         Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(link)); 
         mView.getContext().startActivity(myIntent); 
        } catch (ActivityNotFoundException e) { 
         Toast.makeText(mView.getContext(),"No Activity found to handle the request ",Toast.LENGTH_LONG).show(); 
         e.printStackTrace(); 
        } 
       } 
      }); 

     } 
     public void setRefertext(String refertext){ 
      TextView referText = (TextView) mView.findViewById(R.id.refer_text); 
      referText.setText(refertext); 
     } 

     public void setDatetext (String datetext){ 
      TextView dateText = (TextView) mView.findViewById(R.id.date_text); 
      dateText.setText(datetext); 

     } 

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

     } 

    } 







} 

Was soll ich tun, damit die bestellte JSON, die ich auf Firebase hochgeladen habe? Ich möchte die Gegenstände in der gleichen Reihenfolge zurückbekommen.

Antwort

1

JSON ist per Definition ungeordnet. Die Art, in der die Elemente in der JSON-Datei enthalten sind, die Sie hochladen, geht verloren, da sie in der Datenbank beibehalten wird.

Um Daten zu bestellen, verwenden Sie Firebases orderBy... Methoden beim Abrufen der Daten. Zum Beispiel, wenn Ihr bemerkt einen Zeitstempel Eigenschaft haben, könnten Sie erhalten sie mit in den Recycler Ansicht bestellt:

firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Notices, NoticeViewHolder>(

    Notices.class, 
    R.layout.list_view_row, 
    NoticeViewHolder.class, 
    mDatabase.orderByChild("timestamp") 

) { 

ich in der Firebase documentation einige Zeit empfehlen die Ausgaben, insbesondere der section on ordering and filtering.

Verwandte Themen