2017-01-17 95 views
0

好的,所以此代码用于工作,直到我的朋友决定更改Firebase结构,而现在它不工作。即使是现在,如果我更改代码com.google.firebase.database.DatabaseException:无法将java.lang.String类型的值转换为双倍

这里的错误代码:

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: mapp.com.sg.notymeclient, PID: 26480 
        com.google.firebase.database.DatabaseException: Failed to convert a value of type java.lang.String to double 
         at com.google.android.gms.internal.zzbqi.zzaB(Unknown Source) 
         at com.google.android.gms.internal.zzbqi.zzc(Unknown Source) 
         at com.google.android.gms.internal.zzbqi.zzb(Unknown Source) 
         at com.google.android.gms.internal.zzbqi.zza(Unknown Source) 
         at com.google.android.gms.internal.zzbqi.zzb(Unknown Source) 
         at com.google.android.gms.internal.zzbqi$zza.zze(Unknown Source) 
         at com.google.android.gms.internal.zzbqi$zza.zzaG(Unknown Source) 
         at com.google.android.gms.internal.zzbqi.zze(Unknown Source) 
         at com.google.android.gms.internal.zzbqi.zzb(Unknown Source) 
         at com.google.android.gms.internal.zzbqi.zza(Unknown Source) 
         at com.google.firebase.database.DataSnapshot.getValue(Unknown Source) 
         at com.firebase.ui.database.FirebaseRecyclerAdapter.parseSnapshot(FirebaseRecyclerAdapter.java:151) 
         at com.firebase.ui.database.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:140) 
         at com.firebase.ui.database.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:183) 
         at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6062) 
         at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6095) 
         at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5277) 
         at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5153) 
         at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2061) 
         at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1445) 
         at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1408) 
         at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:580) 
         at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3374) 
         at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3183) 
         at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3627) 
         at android.view.View.layout(View.java:17945) 
         at android.view.ViewGroup.layout(ViewGroup.java:5812) 
         at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1080) 
         at android.view.View.layout(View.java:17945) 
         at android.view.ViewGroup.layout(ViewGroup.java:5812) 
         at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344) 
         at android.widget.FrameLayout.onLayout(FrameLayout.java:281) 
         at android.view.View.layout(View.java:17945) 
         at android.view.ViewGroup.layout(ViewGroup.java:5812) 
         at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344) 
         at android.widget.FrameLayout.onLayout(FrameLayout.java:281) 
         at android.view.View.layout(View.java:17945) 
         at android.view.ViewGroup.layout(ViewGroup.java:5812) 
         at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1080) 
         at android.view.View.layout(View.java:17945) 
         at android.view.ViewGroup.layout(ViewGroup.java:5812) 
         at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131) 
         at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42) 
         at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1364) 
         at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:846) 
         at android.view.View.layout(View.java:17945) 
         at android.view.ViewGroup.layout(ViewGroup.java:5812) 
         at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1193) 
         at android.view.View.layout(View.java:17945) 
         at android.view.ViewGroup.layout(ViewGroup.java:5812) 
         at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344) 
         at android.widget.FrameLayout.onLayout(FrameLayout.java:281) 
         at android.view.View.layout(View.java:17945) 
         at android.view.ViewGroup.layout(ViewGroup.java:5812) 
         at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1742) 

这是我的主要代码:

mRef = FirebaseDatabase.getInstance().getReference() 
       .child("users") 
       .child(FirebaseAuth.getInstance().getCurrentUser().getUid()) 
       .child("sent"); 


     mRecyclerView = (RecyclerView)view.findViewById(R.id.recycler_view_task); 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
     mAdapter = new TaskAdapter(Task_GSON.class,R.layout.task_list_ui,TaskViewHolder.class,mRef); 
     mRecyclerView.setAdapter(mAdapter); 




     mRef.addValueEventListener(new ValueEventListener() { 
      int index = 0 ; 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
        for (DataSnapshot eachTask : dataSnapshot.getChildren()) { 
        task.add(new Task_GSON()); 
        for(DataSnapshot data : eachTask.getChildren()){ 
         String dataString = data.getValue().toString(); 
         switch (data.getKey()){ 
          case "taskTitle": 
           task.get(index).setTaskTitle(dataString); 
           break; 
          case "taskDescription": 
           task.get(index).setTaskDescription(dataString); 
           break; 
          case "sendBy": 
           task.get(index).setSendBy(dataString); 
           break; 
          case "recieveBy": 
           task.get(index).setRecieveBy(dataString); 
           break; 
          case "locationLong": 
           task.get(index).setLocationLong(Double.parseDouble(dataString)); 
           break; 
          case "locationLat": 
           task.get(index).setLocationLat(Double.parseDouble(dataString)); 
           break; 
          case "locationName": 
           task.get(index).setLocationName(dataString); 
           break; 
          case "status": 
           task.get(index).setStatus(Integer.parseInt(dataString)); 
           break; 
          case "time": 
           task.get(index).setTime(Long.parseLong(dataString)); 
           break; 

         } 
        } 
        index++; 
       } 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 

      } 
     }); 

,这里是我的viewholder代码:

public class TaskViewHolder extends RecyclerView.ViewHolder{ 
    TextView textViewTitle; 
    TextView textViewDescription; 
    TextView textViewTime; 
    TextView textViewTaskAssign; 
    public TaskViewHolder(View itemView) { 
     super(itemView); 
     textViewTitle = (TextView)itemView.findViewById(R.id.text_view_title); 
     textViewDescription = (TextView)itemView.findViewById(R.id.text_view_task_description); 
     textViewTime = (TextView)itemView.findViewById(R.id.text_view_time); 
     textViewTaskAssign = (TextView)itemView.findViewById(R.id.text_view_task_assign); 
    } 
} 

这里是我的适配器代码:

public class TaskAdapter extends FirebaseRecyclerAdapter<Task_GSON,TaskViewHolder> { 
    public TaskAdapter(Class<Task_GSON> modelClass, int modelLayout, Class<TaskViewHolder> viewHolderClass, DatabaseReference ref) { 
     super(modelClass, modelLayout, viewHolderClass, ref); 
    } 

    @Override 
    protected void populateViewHolder(TaskViewHolder viewHolder, Task_GSON model, int position) { 
     if(model != null){ 
      viewHolder.textViewDescription.setText(model.getTaskDescription()); 
      viewHolder.textViewTitle.setText(model.getTaskTitle()); 
      android.text.format.DateFormat df = new android.text.format.DateFormat(); 
      String reminderDate = df.format("dd/MM/yy hh:mm a" , model.getTime()).toString(); 
      viewHolder.textViewTime.setText(reminderDate); 
      viewHolder.textViewTaskAssign.setText("send to:" +model.getRecieveBy()); 
     } 
    } 
} 

,这里是我的数据库结构:

enter image description here

我找不到错误和堆栈跟踪并没有帮助,因为它没有针点的代码搞乱。

------ UPDATE 1 --------

行,所以我很好奇,如果我的代码实际上可以查看数据或不和我做了一些测试,我自己 所以首先,我的试图改变数据库的结构是这样的 enter image description here 和它的工作 ,所以我很好奇,我试过其他数据集,但这次改变parrent 成员用户像这样

change member to user

和它不工作 所以我的假设是,要么不知何故适配器火力恨字用户或我的代码做一些火力适配器恨字用户作为原始父级需要用户

+0

It's难以跟随你的代码中,'Query'用'.child( “发送”)'键是不是你的图片 –

+0

嗨@ Annonymous177,我认为这是不正确的'mRef = FirebaseDatabase.getInstance()。getReference() .child(“users”) .child(FirebaseAuth。 getInstance()。getCurrentUser()。getUid()) .child(“sent”);'在你的图像中,最后一个参数是id和'sent'不存在。那是对的? – Jaco

+0

woops错误的图片对不起,我将编辑它 – Annonymous177

回答

0

我的firebase中的数据是字符串,而不是位于locationLong和locationLat的double,与数据中的2引号相同。

所以故事的寓意这里是检查你的变量

感谢您的评论部分

data structure

0

这里的代码快照我怎么做

 recyclerView= (RecyclerView) findViewById(R.id.my_Recylerivew_); 

     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

     FirebaseDatabase.getInstance().setPersistenceEnabled(true); 
     //DataBase raf 
     final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     myRef = database.getReference(); 
     myRef.keepSynced(true); 


     FirebaseRecyclerAdapter<Student,myViewHolader> adapter = new FirebaseRecyclerAdapter<Student, myViewHolader>(


       Student.class,android.R.layout.two_line_list_item,myViewHolader.class,myRef 
     ) { 
      @Override 
      protected void populateViewHolder(myViewHolader viewHolder, Student model, int position) { 


       viewHolder.myTextView.setText(model.getName()); 

      } 
     }; 

recyclerView.setAdapter(adapter); 
所有帮助

和我的观点。java的

public static class myViewHolader extends RecyclerView.ViewHolder{ 

     public TextView myTextView; 


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

      myTextView= (TextView) itemView.findViewById(android.R.id.text1); 
     } 
} 
如果你想获得完整的代码 here is link我的github

,如果你想video tutorial here是链接到我的频道

+0

我已经找到了解决方案,这是因为我的经度和纬度的firebase数据是字符串格式和我的经纬度数据的firebase适配器类是双重的不是字符串,感谢您的帮助;) – Annonymous177

+0

确定好兄弟 – Hamza

相关问题