GVKun编程网logo

android – com.google.firebase.database.DatabaseException:必须在FirebaseDatabase实例的任何其他用法之前调用setPersis

11

如果您想了解android–com.google.firebase.database.DatabaseException:必须在FirebaseDatabase实例的任何其他用法之前调用setPers

如果您想了解android – com.google.firebase.database.DatabaseException:必须在FirebaseDatabase实例的任何其他用法之前调用setPersis的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于73.You are managing an Oracle Database 11g database. You configured the database to run in ARCHIVELO、Android getReadableDatabase() 和 getWritableDatabase()分析对比、android – database.DatabaseException:无法将java.lang.String类型的对象转换为类型、android – firebase.database.DatabaseException:无法将java.lang.Long类型的值转换为String的有价值的信息。

本文目录一览:

android – com.google.firebase.database.DatabaseException:必须在FirebaseDatabase实例的任何其他用法之前调用setPersis

android – com.google.firebase.database.DatabaseException:必须在FirebaseDatabase实例的任何其他用法之前调用setPersis

当我尝试在fIREBASE中设置持久性时遇到问题,有人可以解释一下如何去做,

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_meal_details);

        if (mDatabase == null) {
            mDatabase = FirebaseDatabase.getInstance().getReference();
            FirebaseDatabase.getInstance().setPersistenceEnabled(true);
            // ...
        }


       // FirebaseDatabase.getInstance().setPersistenceEnabled(true);
        mDatabase = FirebaseDatabase.getInstance().getReference();

解决方法:

像这样的东西(iirc):

 if (mDatabase == null) {
     FirebaseDatabase database = FirebaseDatabase.getInstance();
     database.setPersistenceEnabled(true);
     mDatabase = database.getReference();
     // ...
 }

73.You are managing an Oracle Database 11g database. You configured the database to run in ARCHIVELO

73.You are managing an Oracle Database 11g database. You configured the database to run in ARCHIVELO

73.You are managing an Oracle Database 11g database. You configured the database to run in ARCHIVELOG mode. Which two statements are true in this scenario? (Choose two.) A.You must shut down the database instance to perform the backups. B.You must configure the Flash Recovery Area (FRA) for the database. C.You can perform complete database backups without closing the database. D.All the prevIoUs closed database backups including control files become invalid after you configure the database to ARCHIVELOG mode. 答案:CD 解析: A.归档模式后,备份不需要关闭数据库,属于热备,因此A是错误的,当然也可以关闭进行一致性备份,但不是必须关闭数据库 B.fra默认路径为$ORACLE_BASE/fast_recovery_area,不需要费的配置,因此B也是错误的 C.正确,备份的时候,是备份了一个点,然后通过归档日志执行前滚实现了完全备份 D.正确,当打开归档后 sql> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 77 Next log sequence to archive 77 Current log sequence 79 这里的Current log sequence将会被重置为1,也就是之前的都变成了invalid

Android getReadableDatabase() 和 getWritableDatabase()分析对比

Android getReadableDatabase() 和 getWritableDatabase()分析对比

Android getReadableDatabase() 和 getWritableDatabase()分析对比

Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的sqliteDatabase实例。(getReadableDatabase()方法中会调用getWritableDatabase()方法)

其中getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错。

getReadableDatabase()方法则是先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。如果该问题成功解决,则只读数据库对象就会关闭,然后返回一个可读写的数据库对象。

源码如下:

/** 
   * Create and/or open a database that will be used for reading and writing. 
   * Once opened successfully,the database is cached,so you can call this 
   * method every time you need to write to the database. Make sure to call 
   * {@link #close} when you no longer need it. 
   * 
   * <p>Errors such as bad permissions or a full disk may cause this operation 
   * to fail,but future attempts may succeed if the problem is fixed.</p> 
   * 
   * @throws sqliteException if the database cannot be opened for writing 
   * @return a read/write database object valid until {@link #close} is called 
   */ 
  public synchronized sqliteDatabase getWritableDatabase() { 
    if (mDatabase != null && mDatabase.isopen() && !mDatabase.isReadOnly()) { 
      return mDatabase; // The database is already open for business 
    } 
 
    if (mIsInitializing) { 
      throw new IllegalStateException("getWritableDatabase called recursively"); 
    } 
 
    // If we have a read-only database open,someone Could be using it 
    // (though they shouldn't),which would cause a lock to be held on 
    // the file,and our attempts to open the database read-write would 
    // fail waiting for the file lock. To prevent that,we acquire the 
    // lock on the read-only database,which shuts out other users. 
 
    boolean success = false; 
    sqliteDatabase db = null; 
    if (mDatabase != null) mDatabase.lock(); 
    try { 
      mIsInitializing = true; 
      if (mName == null) { 
        db = sqliteDatabase.create(null); 
      } else { 
        db = mContext.openorCreateDatabase(mName,mFactory); 
      } 
 
      int version = db.getVersion(); 
      if (version != mNewVersion) { 
        db.beginTransaction(); 
        try { 
          if (version == 0) { 
            onCreate(db); 
          } else { 
            onUpgrade(db,version,mNewVersion); 
          } 
          db.setVersion(mNewVersion); 
          db.setTransactionSuccessful(); 
        } finally { 
          db.endTransaction(); 
        } 
      } 
 
      onopen(db); 
      success = true; 
      return db; 
    } finally { 
      mIsInitializing = false; 
      if (success) { 
        if (mDatabase != null) { 
          try { mDatabase.close(); } catch (Exception e) { } 
          mDatabase.unlock(); 
        } 
        mDatabase = db; 
      } else { 
        if (mDatabase != null) mDatabase.unlock(); 
        if (db != null) db.close(); 
      } 
    } 
  } 
 
  /** 
   * Create and/or open a database. This will be the same object returned by 
   * {@link #getWritableDatabase} unless some problem,such as a full disk,* requires the database to be opened read-only. In that case,a read-only 
   * database object will be returned. If the problem is fixed,a future call 
   * to {@link #getWritableDatabase} may succeed,in which case the read-only 
   * database object will be closed and the read/write object will be returned 
   * in the future. 
   * 
   * @throws sqliteException if the database cannot be opened 
   * @return a database object valid until {@link #getWritableDatabase} 
   *   or {@link #close} is called. 
   */ 
  public synchronized sqliteDatabase getReadableDatabase() { 
    if (mDatabase != null && mDatabase.isopen()) { 
      return mDatabase; // The database is already open for business 
    } 
 
    if (mIsInitializing) { 
      throw new IllegalStateException("getReadableDatabase called recursively"); 
    } 
 
    try { 
      return getWritableDatabase(); 
    } catch (sqliteException e) { 
      if (mName == null) throw e; // Can't open a temp database read-only! 
      Log.e(TAG,"Couldn't open " + mName + " for writing (will try read-only):",e); 
    } 
 
    sqliteDatabase db = null; 
    try { 
      mIsInitializing = true; 
      String path = mContext.getDatabasePath(mName).getPath(); 
      db = sqliteDatabase.openDatabase(path,mFactory,sqliteDatabase.OPEN_READONLY); 
      if (db.getVersion() != mNewVersion) { 
        throw new sqliteException("Can't upgrade read-only database from version " + 
            db.getVersion() + " to " + mNewVersion + ": " + path); 
      } 
 
      onopen(db); 
      Log.w(TAG,"Opened " + mName + " in read-only mode"); 
      mDatabase = db; 
      return mDatabase; 
    } finally { 
      mIsInitializing = false; 
      if (db != null && db != mDatabase) db.close(); 
    } 
  } 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

android – database.DatabaseException:无法将java.lang.String类型的对象转换为类型

android – database.DatabaseException:无法将java.lang.String类型的对象转换为类型

我的问题

      08-10 04:23:28.820 21501-21501/my.org.medicare.medicareapp E/AndroidRuntime: FATAL EXCEPTION: main                                              Process: my.org.medicare.medicareapp, PID: 21501                                             com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type my.org.medicare.medicareapp.protest
at com.google.android.gms.internal.zzaln.zzd(UnkNown Source)
at com.google.android.gms.internal.zzaln.zzb(UnkNown Source)
at com.google.android.gms.internal.zzaln.zza(UnkNown Source)
at com.google.firebase.database.DataSnapshot.getValue(UnkNown Source)
at my.org.medicare.medicareapp.FirebaseHelper.fetchData(FirebaseHelper.java:50)
at my.org.medicare.medicareapp.FirebaseHelper.access$000(FirebaseHelper.java:14)            atmy.org.medicare.medicareapp.FirebaseHelper$1.onChildAdded(FirebaseHelper.java60)at com.google.android.gms.internal.zzahe.zza(UnkNown Source)                                      at com.google.android.gms.internal.zzaje.zzcta(UnkNown Source)                          at com.google.android.gms.internal.zzajh$1.run(UnkNown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

我的主要活动代码:

 rv = (RecyclerView) findViewById(R.id.rv);
        rv.setLayoutManager(new linearlayoutmanager(this));
        //INITIALIZE FIREBASE DB
        db = FirebaseDatabase.getInstance().getReference().child("Pro");;

        helper = new FirebaseHelper(db);
        //ADAPTER
        adapter = new MyAdapter(this, helper.retrieve());
        rv.setAdapter(adapter);

还有我的FirebaseHelper:

public class FirebaseHelper {
    DatabaseReference db;
    Boolean saved=null;
    ArrayList<protest> spacecrafts=new ArrayList<>();

    public FirebaseHelper(DatabaseReference db) {
        this.db = db;
    }
    //WRITE IF NOT NULL
    public Boolean save(protest spacecraft)
    {
        if(spacecraft==null)
        {
            saved=false;
        }else
        {
            try
            {
                db.child("Pro").push().setValue(spacecraft);
                saved=true;
            }catch (DatabaseException e)
            {
                e.printstacktrace();
                saved=false;
            }
        }
        return saved;
    }

    //IMPLEMENT FETCH DATA AND FILL ARRAYLIST
    private void fetchData(DataSnapshot dataSnapshot)
    {
        spacecrafts.clear();
        //dataSnapshot.getChildren()
        for (DataSnapshot ds : dataSnapshot.getChildren())
        {
            protest spacecraft=ds.getValue(protest.class);
            spacecrafts.add(spacecraft);
        }
    }

    //READ THEN RETURN ARRAYLIST
    public ArrayList<protest> retrieve() {
        db.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                fetchData(dataSnapshot);
            }
            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                fetchData(dataSnapshot);
            }
            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
            }
            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
        return spacecrafts;
    }
}

我认为持有人

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    TextView nameTxt,propTxt,descTxt;
    ItemClickListener itemClickListener;

    public MyViewHolder(View itemView) {
        super(itemView);
        nameTxt= (TextView) itemView.findViewById(R.id.nameTxt);
        propTxt= (TextView) itemView.findViewById(R.id.propellantTxt);
        descTxt= (TextView) itemView.findViewById(R.id.descTxt);
        itemView.setonClickListener(this);
    }

    public void setItemClickListener(ItemClickListener itemClickListener)
    {
        this.itemClickListener=itemClickListener;
    }
    @Override
    public void onClick(View view) {
        this.itemClickListener.onItemClick(this.getLayoutPosition());
    }

下面是我的数据结构,我试着读“Pro”

Data Structure

我的抗议结构:

public class protest {
    private String name;
    private String contact;
    private String centre;

    public protest(){};

    public String getName(){return name;}
    public String getContact(){return contact;}
    public String getCentre(){return centre;}
    public void setName(String name) {
        this.name = name;
    }
    public void setContact(String contact) {
        this.contact = contact;
    }
    public void setCentre(String centre) {
        this.centre = centre;
    }
}

我可以知道这是什么问题吗?我是firebase的新手,我需要你的帮助.我在这里读了一些类似的问题,但我仍然无法解决我的问题.这里有专家可以帮助我吗?

更新:
用打印再次测试..
当Datasnapshot转到

  public ArrayList<protest> retrieve() {
        db.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                System.out.println(dataSnapshot.getValue());
                fetchData(dataSnapshot);
            }

08-10 06:26:47.548 26700-26700 / my.org.medicare.medicareapp I / System.out: {name = lee,contact = 123456,center = jalan ipoh}

但是当Datasnapshot去的时候

 private void fetchData(DataSnapshot dataSnapshot)
    {
        spacecrafts.clear();
        //dataSnapshot.getChildren()
        for (DataSnapshot ds : dataSnapshot.getChildren())
        {
            System.out.println(ds.getValue());
            protest spacecraft=ds.getValue(protest.class);
            spacecrafts.add(spacecraft);
        }
    }

08-10 06:26:47.548 26700-26700 / my.org.medicare.medicareapp I / System.out:jalan ipoh

问题是什么?

解决方法:

您的fetchData函数已经将DataSnapshot作为子节点接收,但即使在这里,您仍然会遍历子节点,这些子节点将有效地循环通过各个键(名称,联系人,中心).
你应该简单地在DataSnaphot上调用getValue而不需要循环:

private void fetchData(DataSnapshot dataSnapshot)
    {
        spacecrafts.clear();        
        protest spacecraft=dataSnapshot.getValue(protest.class);
        spacecrafts.add(spacecraft);        
    }

我希望这有帮助.

android – firebase.database.DatabaseException:无法将java.lang.Long类型的值转换为String

android – firebase.database.DatabaseException:无法将java.lang.Long类型的值转换为String

[]

firebase.database.DatabaseException: Failed to convert value of type java.lang.Long to String

我正在尝试将此数据添加到FirebaserecyclerAdapter并收到此错误

这是数据库参考

databaseReference = FirebaseDatabase.getInstance().getReference().child("questions");

这就是我使用RecyclerViewAdapter的方法

FirebaseRecyclerAdapter<History,HistoryViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<History,HistoryViewHolder>(
            History.class,R.layout.history_list_item,HistoryViewHolder.class,databaseReference) {
        @Override
        protected void populateViewHolder(HistoryViewHolder viewHolder,History model,int position) {
            viewHolder.setMyanswer(model.getMyAnswer());
            viewHolder.setCorrentAnswer(model.getCorrectAnswer());
            viewHolder.setimageUrl(getApplicationContext(),model.getimageUrl());

        }
    };
    recyclerView.setAdapter(firebaseRecyclerAdapter);

解决方法

数据库中的两个节点确实存在数据类型不匹配的情况:

myAnswer : "21"
myAnswer : 11

如果你想让它成为一个String,它应该是:

myAnswer : "21"
myAnswer : "11"

或者,让他们长:

myAnswer : 21
myAnswer : 11

确保在添加数据时注意一致性

今天关于android – com.google.firebase.database.DatabaseException:必须在FirebaseDatabase实例的任何其他用法之前调用setPersis的分享就到这里,希望大家有所收获,若想了解更多关于73.You are managing an Oracle Database 11g database. You configured the database to run in ARCHIVELO、Android getReadableDatabase() 和 getWritableDatabase()分析对比、android – database.DatabaseException:无法将java.lang.String类型的对象转换为类型、android – firebase.database.DatabaseException:无法将java.lang.Long类型的值转换为String等相关知识,可以在本站进行查询。

本文标签: