小编Dre*_*rko的帖子

在使用Firebase和ChildEventListener时,如何在Orientation更改后保留RecyclerView的位置?

我正在开发一个简单的APOD应用程序,它可以实现:

  • RecyclerView
  • CardView
  • Firebase
  • Picasso

该应用程序从中抓取图像和文本,Firebase并将其Firebase Storage显示在a中CardView,并OnClickListener为每个设置View.当用户点击图片时,我打开一个新ActivityIntent.第二个Activity显示原始单击的图像,以及有关它的更多信息.

GridLayoutManager如果用户的手机是VERTICAL,我已经使用1列实现了这一切,如果用户的手机是HORIZONTAL则使用3列.

我遇到的问题是我似乎无法挽救RecyclerView方向改变的立场.我已经尝试了我能找到的每一个选项,但似乎都没有.唯一的结论,我可以想出,是在旋转,我毁坏FirebaseChildEventListener,以避免内存泄漏,一旦定位完成后,Firebase再查询,因为新实例的数据库ChildEventListener.

有什么方法可以挽救我RecyclerView对方向改变的立场吗?我不想要,android:configChanges因为它不会让我改变我的布局,我已经尝试过保存为一个Parcelable,这是不成功的.我确信这很容易让我失踪,但是,嘿,我是新手.我非常感谢您对我的代码的任何帮助或建议.谢谢!

下面是我的课程,我只简化了必要的代码.

主要活动

public class MainActivity extends AppCompatActivity {

private RecyclerAdapter mRecyclerAdapter;
private DatabaseReference mDatabaseReference;
private RecyclerView mRecyclerView;
private Query query;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
    setContentView(R.layout.activity_main);
    getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

    Toolbar toolbar = (Toolbar) …
Run Code Online (Sandbox Code Playgroud)

android firebase firebase-realtime-database

23
推荐指数
2
解决办法
9763
查看次数

活动启动时的android classcastexception

我在android中有一个简单的活动程序.基本上这个类只是扩展Activity.但是当我启动它时,我在我的类的构造函数中得到一个ClassCastException.我甚至没有定义构造函数,所以它必须在超类的构造函数中是Activity.

不幸的是,调试器没有提供有关它正在尝试强制转换的类的任何详细信息.

这是堆栈跟踪:

Thread [<1> main] (Suspended (exception RuntimeException))  
    ActivityThread$PackageInfo.makeApplication(boolean, Instrumentation) line: 649  
    ActivityThread.handleBindApplication(ActivityThread$AppBindData) line: 4232 
    ActivityThread.access$3000(ActivityThread, ActivityThread$AppBindData) line: 125    
    ActivityThread$H.handleMessage(Message) line: 2071  
    ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
    Looper.loop() line: 123 
    ActivityThread.main(String[]) line: 4627    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 521  
    ZygoteInit$MethodAndArgsCaller.run() line: 868  
    ZygoteInit.main(String[]) line: 626 
    NativeStart.main(String[]) line: not available [native method]  
Run Code Online (Sandbox Code Playgroud)

当我查看runtimeexception时,我得到:

detailMessage "Unable to instantiate application com.test.MyApp: java.lang.ClassCastException: com.test.MyApp" (id=830067694464)

唯一的代码是

package com.test;
import android.app.Activity;
public class MyApp extends Activity …
Run Code Online (Sandbox Code Playgroud)

android startup classcastexception android-activity

12
推荐指数
2
解决办法
3万
查看次数

无法通过 Visa 卡将 Firebase 升级为即用即付计划

我来自越南,我想将 firebase 升级到即用即付计划,我使用了用于购买 google play 帐户的 Visa 卡,但我不能。这是为什么?

更新: 在此输入图像描述

所有信息均已正确填写

firebase

5
推荐指数
1
解决办法
3643
查看次数

Android Firebase-.setPersistenceEnabled(true)时启动时间慢

我正在开发一个简单的APOD应用程序,在其中显示RecyclerView用户可以滚动浏览的天文学图片。我启用了FirebaseDatabase.setPersistenceEnabled(true);此功能,以便用户可以离线使用该应用程序并减少连接/下载带宽。问题是,如果我设置FirebaseDatabase.setPersistenceEnabled(true);,我的应用程序启动时间会明显更长(启用6秒与禁用1.5秒)。我了解用户首次启动应用程序时,加载时间应该更长(因为设置了持久性),但是,由于应用程序不查询在线Firebase服务器,因此随后的每次启动应用程序都不应显着缩短吗?

为了避免一次加载很多行,我SingleValueEventListeners逐一触发了两行。第一个加载100行,并使用循环遍历databaseSnapshot AsyncTask,然后显示图像。然后,我调用第二个,SingleValueEventListener并以相同的方式遍历第二个。第二个SingleValueEventListener加载剩余的数据,范围是101-7000。

下面是我的GlobalApp延伸课程Application。这是我启用持久性的地方。接下来的2种方法是我加载数据的位置。

扩展应用程序类别

public class GlobalApp extends Application {

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

    FirebaseDatabase mDatabaseReference = FirebaseDatabase.getInstance();

    mDatabaseReference.setPersistenceEnabled(true);

    }
}
Run Code Online (Sandbox Code Playgroud)

初始负荷

 private void initialLoad() {

    databaseReference.child("apod").orderByChild("date").limitToLast(100).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            new LoadFirebase().execute(dataSnapshot);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}
Run Code Online (Sandbox Code Playgroud)

二次负荷

private void secondLoad() {

   final String secondKey = firebaseKeys.get(firebaseKeys.size() - 1);

    databaseReference.child("apod").orderByChild("date").endAt(secondKey).addListenerForSingleValueEvent(new …
Run Code Online (Sandbox Code Playgroud)

android firebase firebase-realtime-database

2
推荐指数
1
解决办法
861
查看次数