当使用该方法获取集合的所有文档时,默认情况下,如果没有互联网连接,它不会抛出异常。相反,它查找缓存并返回缓存的数据。但有时您需要知道集合当前是否实际上为空或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) 根据文档,当我收到此错误时,我应该将两者标记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) 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) 我试着制作一系列按钮:
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)
我在这做错了什么?谢谢 !
这是我的代码:
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)
由于某种原因没有任何事情发生,没有吐司出现.我错过了什么吗?谢谢
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