2017-06-23 9 views
0

firebaseデータベースからタイムスタンプを取得しようとしていて、それをrecyclerview内のtextviewに表示しようとしています。生成されるタイムスタンプは人間が判読可能な形式ではありません。 {timestamp = {。sv = timestamp}}のように表示されます。Android:人間が読めるタイムスタンプがrecyclerview内で生成されない

GetterおよびSetter:データベースの

private DatabaseReference mDatabase; 
    HashMap<String,Object> timestampCreated; 
    public Blog(String title,String desp,HashMap<String,Object>timestampCreated) { 
      this.title = title; 
      this.desp=desp; 
      //this.timestam=ServerValue.TIMESTAMP; 
      HashMap<String,Object> ts=new HashMap<>(); 
      ts.put("timestamp", ServerValue.TIMESTAMP); 
    } 

    public HashMap<String,Object>getTimestampCreated(){ 

      if(timestampCreated!=null) 
      return timestampCreated; 

      HashMap<String,Object> timestampCreatedObj=new HashMap<String,Object>(); 
      timestampCreatedObj.put("timestamp",ServerValue.TIMESTAMP); 
      return timestampCreatedObj; 
     } 

     public void setTimestampCreated(HashMap<String,Object> timestamp){ 
      this.timestampCreated=timestamp; 
     } 

     @Exclude 
     public long getTimestampCreatedLong(){ 
      long value=(long)timestampCreated.get("timestamp"); 
      convertTime(value); 
      return value; 
     } 

    public String convertTime(Long unixtime){ 
      Date dateObject=new Date(unixtime); 
      SimpleDateFormat dateFormat=new SimpleDateFormat("dd-mm-yyyy hh:mm:ss"); 
      return dateFormat.format(dateObject); 
     } 

    @Override 
     protected void onCreate(Bundle SavedInstanceState) { 
      super.onCreate(SavedInstanceState); 
    mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog"); 
      mDatabase.keepSynced(true); 

ViewHolder: 



    public void setTimestampCreated(HashMap<String, Object> timestamp) { 
       TextView show_ts = (TextView) mview.findViewById(blog_timestamp); 
       show_ts.setText(String.valueOf(timestamp)); 


      } 

Adapter: 



    FirebaseRecyclerAdapter<Blog, BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Blog, BlogViewHolder>(
         Blog.class, 
         R.layout.blog_row, 
         BlogViewHolder.class, mDatabase 

       ) { 
        @Override 
        protected void populateViewHolder(final BlogViewHolder viewHolder,final Blog model, int position) { 

         viewHolder.setTimestampCreated(model.getTimestampCreated()); 


        } 
       }; 
       mbloglist.setAdapter(firebaseRecyclerAdapter); 

画像:Androidのパッケージでdatabase image

答えて

1

使用DateFormat utilのクラス。

String humanReadableTime = DateFormat.format("dd MMM yyyy, HH:mm", timestamp); 
0

データを正しい方法でTIMESTAMPに設定しています。覚えておいて、TIMESTAMPを設定するときはMapに設定しますが、取得するときはLongとして取得します。ですから、この方法を使用することをお勧めします。

public static String getTimeDate(long timeStamp){ 
    try{ 
     DateFormat dateFormat = getDateTimeInstance(); 
     Date netDate = (new Date(timeStamp)); 
     return dateFormat.format(netDate); 
    } catch(Exception e) { 
     return "date"; 
    } 
} 

希望すると助かります。

+0

コードのどこかで呼び出すか、それを定義するだけで十分ですか? –

+0

必要なクラス/アクティビティでこのメソッドを定義することも、別のクラスのヘルパークラスで定義することもできます。データベースから取得する 'Long'値を引数として呼び出すだけで十分です。 –

+0

getTimeDate(value)を使ってgettimestampcreatedlong()の内部で呼びました。まだ問題は残っています。 –

関連する問題