Получена ошибка SQL при получении данных из базы данных Firebase Realtime. - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь получить данные из базы данных firebase в реальном времени в режиме ресайклера с помощью FirebaseRecyclerAdapter. Однако каждый раз, когда я пытался, я получал такую ​​ошибку:

E / SQLiteDatabase: Ошибка при вставке android .database.sqlite.SQLiteConstraintException: ограничение UNIQUE не удалось: pending_ops.tag, pending_ops.target_class, pending_ops.target_package, pending_ops.user_id (код 2067) в android .database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId (собственный метод) в android .database.sqlite.SQLiteConnection.executeForLastId2: *. 1028 * .database.sqlite.SQLiteSession.executeForLastInsertedRowId (SQLiteSession. java: 788) в android .database.sqlite.SQLiteStatement.executeInsert (SQLiteStatement. java: 86) в SQL android .database.sqlite.SQL .insertWithOnConflict (SQLiteDatabase. java: 1473) в android .database.sqlite.SQLiteDatabase.insert (SQLiteDatabase. java: 1341) в aose.a (: com.google. android. gms@201817013@20.18.17 ( 020700-311416286): 78) на aort.b (: com.google. android. gms@201817013@20.18.17 (020700-311416286): 11) на aort.a (: com.google. android. gms@201817013@20.18.17 ( 020700-311416286): 100) а t aooq.run (: com.google. android. gms@201817013@20.18.17 (020700-311416286): 11) в rxf.b (: com.google. android. gms@201817013@20.18.17 (020700-311416286): 12) в rxf.run (: com.google. android. gms@201817013@20.18.17 (020700-311416286): 7) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1112) в java .util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 587) в scz.run (: com.google. android. gms@201817013@20.18.17 (020700-311416286): 0) в java .lang .Thread.run (Thread. java: 818)

Это мой класс модели:

    int date;
    int value;

    public datapoint() {

    }

    public datapoint(int date, int value) {
        this.date = date;
        this.value = value;
    }

    public int getDate() {
        return date;
    }

    public int getValue() {
        return value;
    }
} 

это мой класс адаптера для представления ресайклера:

    private List<datapoint> datapointList;

    public MyAdapter(List<datapoint> datapointList){
        this.datapointList = datapointList;
    }

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

    @Override
    public void onBindViewHolder(@NonNull MyAdapter.ViewHolder holder, int position) {
            datapoint dp = datapointList.get ( position );
            holder.txtdate.setText ( dp.getDate () );
            holder.txtvalue.setText ( dp.getValue () );

    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        private TextView txtdate,txtvalue;

        public ViewHolder(@NonNull View itemView) {
            super ( itemView );
            txtdate = (TextView) itemView.findViewById ( R.id.datetxt );
            txtvalue = (TextView) itemView.findViewById ( R.id.valuetxt );
        }
    }
}

и вот как я получаю данные из firebase:

    private List<datapoint> datapointList;
    private RecyclerView rv;
    private MyAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate ( savedInstanceState );
        setContentView ( R.layout.activity_main2 );
        rv = (RecyclerView)findViewById ( R.id.myRecyclerview);
        rv.setHasFixedSize ( true );
        rv.setLayoutManager ( new LinearLayoutManager ( this ) );
        datapointList= new ArrayList<> ();

        final DatabaseReference nm = FirebaseDatabase.getInstance ().getReference().child ("fieldX").child ( "temperature" );
        nm.addListenerForSingleValueEvent ( new ValueEventListener () {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists ()){
                    for(DataSnapshot npsnapshot : dataSnapshot.getChildren ()){
                        datapoint d = npsnapshot.getValue (datapoint.class);
                        datapointList.add ( d );
                    }
                    adapter = new MyAdapter ( datapointList );
                    rv.setAdapter ( adapter );
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        } );
    }
}

Я новичок в этом, почему я получил ошибку SQL? Я даже не пользовался. Что-то не так с моим кодом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...