小编use*_*856的帖子

Flutter Firestore - 监听数据流时捕获异常

当使用该方法获取集合的所有文档时,默认情况下,如果没有互联网连接,它不会抛出异常。相反,它查找缓存并返回缓存的数据。但有时您需要知道集合当前是否实际上为空Firestoreget()您只是无法连接到数据库。

对于仅获取数据,有一个解决方案:GetOptions可以将参数设置为Source.server。这样,如果无法访问服务器,就会抛出错误。

现在我正在寻找与此选项等效的方法,该snapshots()方法返回 aStream而不仅仅是单个数据。所以我需要流在无法连接到服务器时发出错误。

所以:

await _firestore
        .collection('stuff')
        .where("someBool", isEqualTo: false)
        .get(const GetOptions(source: Source.server));
Run Code Online (Sandbox Code Playgroud)

将抛出一个FirebaseException错误连接,同时:

_firestore
    .collection('stuff')
    .where("someBool", isEqualTo: false)
    .snapshots()
    .listen((snap) { ...  }, onError: (e) {
         //never called...
         debugPrint(e.toString());
     });
Run Code Online (Sandbox Code Playgroud)

在这个例子中我就是找不到。

我得到的最接近的解决方案是检查snap.metadata.isFromCache并在值为 时抛出异常true。但这并不可靠。False 表示保证快照与服务器保持同步。但在某些情况下,true即使它从服务器获得了有效响应也是如此。

编辑:如果我在本地过滤而不是直接在查询中isFromCache过滤,属性将是一个解决方案。someBool

_firestore
    .collection('stuff')
    .where("someBool", isEqualTo: false)
    .snapshots(includeMetadataChanges: true)
    .listen((snap) { 
         //`hasPendingWrites` is false in all these cases:
         //  1. …
Run Code Online (Sandbox Code Playgroud)

firebase flutter google-cloud-firestore

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

Flutter Riverpod - .autoDispose - 参数类型“AutoDisposeProvider”无法分配给参数类型“AlwaysAliveProviderBase”

根据文档,当我收到此错误时,我应该将两者标记Providers.autoDispose

参数类型“AutoDisposeProvider”无法分配给参数类型“AlwaysAliveProviderBase”

为什么我在这个简约的示例中仍然收到错误?

final a = FutureProvider.autoDispose<List<String>>((ref) {
  return Future.value(["test"]);
});

final b = FutureProvider.autoDispose<List<String>>((ref) {
  return ref.watch(a);
});
Run Code Online (Sandbox Code Playgroud)

dart flutter riverpod

4
推荐指数
1
解决办法
3593
查看次数

尝试为facebook登录添加片段时出错

https://developers.facebook.com/docs/android/login-with-facebook/#step1

我想在我的应用程序中登录facebook.我从facebook上关注了这个官方教程.我将"extends Activity"替换为"extends FragmentActivity"并创建了类MainFragment.java,就像在教程中所说的那样.当涉及到更换

setContentView(R.layout.welcome);
Run Code Online (Sandbox Code Playgroud)

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

if (savedInstanceState == null) {
    // Add the fragment on initial activity setup
    mainFragment = new MainFragment();
    getSupportFragmentManager()
    .beginTransaction()
    .add(android.R.id.content, mainFragment)
    .commit();
} else {
    // Or set the fragment from restored state info
    mainFragment = (MainFragment) getSupportFragmentManager()
    .findFragmentById(android.R.id.content);
}
}
Run Code Online (Sandbox Code Playgroud)

我在else语句中的.add和行收到错误:

FragmentTransaction类型中的方法add(int,Fragment)不适用于参数(int,MainFragment)

无法从Fragment转换为MainFragment

此外,我不确定使用android.R.id.content是否正确.我不应该用layout.xml替换内容吗?

谢谢 !

编辑:我的进口:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button; …
Run Code Online (Sandbox Code Playgroud)

java android facebook android-fragments

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

Java中的按钮数组

我试着制作一系列按钮:

Button[] buttonlist = new Button[2];

Button btn1;
Button btn2;
Button btn3;
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
btn3 = (Button) findViewById(R.id.button3);

buttonlist[0] = btn1;
buttonlist[1] = btn2;
buttonlist[2] = btn3;
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?谢谢 !

java arrays android

0
推荐指数
1
解决办法
95
查看次数

未调用OnClick方法

这是我的代码:

public class MainActivity extends Activity implements View.OnClickListener {

    Button b;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b = (Button) findViewById(R.id.button1);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button1:
                Toast.makeText(getApplicationContext(), "onClick method was called", Toast.LENGTH_LONG).show();
                break;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

由于某种原因没有任何事情发生,没有吐司出现.我错过了什么吗?谢谢

java android

0
推荐指数
2
解决办法
859
查看次数

setOnClickListener导致崩溃

Button start_game;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);          
    start_game = (Button) findViewById(R.id.start_game);
    start_game.setOnClickListener(this);
    setContentView(R.layout.welcome);
 }
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但如果我删除setOnClickListener我的应用程序启动的行(当然我的按钮不会做任何事情).Logcat给了我这个:

java.lang.RuntimeException: Unable to start activity ComponentInfo{de.test.testabc/de.test.testabc.Welcome}: java.lang.NullPointerException

android

0
推荐指数
1
解决办法
359
查看次数