Почему Флаттер говорит «не может привязать к обслуживанию», когда он, кажется, подключается к Интернету просто отлично?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему Флаттер говорит «не может привязать к обслуживанию», когда он, кажется, подключается к Интернету просто отлично?

Сообщение Anonymous »

Я делаю приложение Geography Trivia с Flutter, которое использует Cloud Firestore для хранения пользовательских викторинов. Я получаю много ошибок, когда бы мое приложение существует на главном экране. Эта же ошибка печатается неоднократно, около раз в секунду. Якобы приложение пытается подключиться к чему -то, но терпит неудачу. Тем не менее, аспекты подключения к Интернету, по -видимому, работают довольно хорошо (я проверил Firestore, и все значения обновляются, когда они должны быть). Эти ошибки имеют значение? И если нет, есть ли способ остановить их от засорения моей отладки?E/AndroidRuntime(13222): FATAL EXCEPTION: main
E/AndroidRuntime(13222): Process: com.google.android.gms.persistent, PID: 13222
E/AndroidRuntime(13222): java.lang.RuntimeException: Unable to bind to service com.google.android.gms.gcm.PushMessagingRegistrarProxy@6771f8e with Intent { act=com.google.android.c2dm.intent.REGISTER pkg=com.google.android.gms }: java.lang.IllegalArgumentException: NetworkCapability 37 out of range
E/AndroidRuntime(13222): at android.app.ActivityThread.handleBindService(ActivityThread.java:5021)
E/AndroidRuntime(13222): at android.app.ActivityThread.-$$Nest$mhandleBindService(Unknown Source:0)
E/AndroidRuntime(13222): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2451)
E/AndroidRuntime(13222): at android.os.Handler.dispatchMessage(Handler.java:107)
E/AndroidRuntime(13222): at android.os.Looper.loopOnce(Looper.java:232)
E/AndroidRuntime(13222): at android.os.Looper.loop(Looper.java:317)
E/AndroidRuntime(13222): at android.app.ActivityThread.main(ActivityThread.java:8699)
E/AndroidRuntime(13222): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(13222): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
E/AndroidRuntime(13222): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
E/AndroidRuntime(13222): Caused by: java.lang.IllegalArgumentException: NetworkCapability 37 out of range
E/AndroidRuntime(13222): at android.net.NetworkCapabilities.checkValidCapability(NetworkCapabilities.java:2637)
E/AndroidRuntime(13222): at android.net.NetworkCapabilities.removeCapability(NetworkCapabilities.java:881)
E/AndroidRuntime(13222): at android.net.NetworkRequest$Builder.removeCapability(NetworkRequest.java:360)
E/AndroidRuntime(13222): at bjni.get(:com.google.android.gms@250832038@25.08.32 (260800-731361394):96)
E/AndroidRuntime(13222): at dagger.internal.DoubleCheck.c(:com.google.android.gms@250832038@25.08.32 (260800-731361394):10)
E/AndroidRuntime(13222): at dagger.internal.DoubleCheck.get(:com.google.android.gms@250832038@25.08.32 (260800-731361394):7)
E/AndroidRuntime(13222): at bjgg.get(:com.google.android.gms@250832038@25.08.32 (260800-731361394):11)
E/AndroidRuntime(13222): at dagger.internal.DoubleCheck.c(:com.google.android.gms@250832038@25.08.32 (260800-731361394):10)
E/AndroidRuntime(13222): at dagger.internal.DoubleCheck.get(:com.google.android.gms@250832038@25.08.32 (260800-731361394):7)
E/AndroidRuntime(13222): at bjii.get(:com.google.android.gms@250832038@25.08.32 (260800-731361394):35)
E/AndroidRuntime(13222): at dagger.internal.DoubleCheck.c(:com.google.android.gms@250832038@25.08.32 (260800-731361394):10)
E/AndroidRuntime(13222): at dagger.internal.DoubleCheck.get(:com.google.android.gms@250832038@25.08.32 (260800-731361394):7)
E/AndroidRuntime(13222): at dagger.internal.DelegateFactory.get(:com.google.android.gms@250832038@25.08.32 (260800-731361394):5)
E/AndroidRuntime(13222): at bjbr.get(:com.google.android.gms@250832038@25.08.32 (260800-731361394):41)
E/AndroidRuntime(13222): at dagger.internal.DoubleCheck.c(:com.google.android.gms@250832038@25.08.32 (260800-731361394):10)
E/AndroidRuntime(13222): at dagger.internal.DoubleCheck.get(:com.google.android.gms@250832038@25.08.32 (260800-731361394):7)
E/AndroidRuntime(13222): at bjbp.b(:com.google.android.gms@250832038@25.08.32 (260800-731361394):70)
E/AndroidRuntime(13222): at com.google.android.gms.gcm.registration.PushMessagingRegistrarChimeraProxy.onBind(:com.google.android.gms@250832038@25.08.32 (260800-731361394):13)
E/AndroidRuntime(13222): at aolo.onBind(:com.google.android.gms@250832038@25.08.32 (260800-731361394):39)
E/AndroidRuntime(13222): at android.app.ActivityThread.handleBindService(ActivityThread.java:5006)
E/AndroidRuntime(13222): ... 9 more
< /code>
Вот мой основной экран: < /p>
import 'package:flutter/material.dart';
import 'package:geography_trivia_app/screens/welcome/home_screen.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:geography_trivia_app/screens/welcome/initial_authentication_screen.dart';
import 'package:get/get.dart';
import 'controllers/player_data_controller.dart';
import 'firebase_options.dart';

bool currentDeviceExists = false;

void main() async {
WidgetsFlutterBinding.ensureInitialized();

await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);

PlayerDataController playerDataController = Get.put(PlayerDataController()) ?? Get.find
();
await playerDataController.findDeviceID();
currentDeviceExists = await playerDataController.deviceExists();
//make a public leaderboardSize variable?
await playerDataController.findTopPlayers(10);

runApp(const MyApp());
}

class MyApp extends StatelessWidget {
const MyApp({super.key});

@override
Widget build(BuildContext context) {
var size = MediaQuery.of(context).size;
double width = size.width;
double height = size.height;

return GetMaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(scaffoldBackgroundColor: const Color.fromRGBO(255, 255, 248, 1)),
home: const HomeController(),
);
}
}

class HomeController extends StatelessWidget {
const HomeController({super.key});

@override
Widget build(BuildContext context) {
return currentDeviceExists ? HomeScreen() : NameScreen();
}
}
< /code>
Вот главный экран (мне не нужно нажимать на кнопки, чтобы бросить ошибку), поэтому ни один из других экранов имеет значение): < /p>
import 'package:flutter/material.dart';
import 'package:geography_trivia_app/screens/leaderboard_screen.dart';
import 'package:geography_trivia_app/screens/settings_screen.dart';
import 'package:geography_trivia_app/screens/welcome/category_selection_screen.dart';
import 'package:get/get.dart';
import 'package:geography_trivia_app/controllers/ui_components.dart';

double dividerHeight = 35;

class HomeScreen extends StatelessWidget {
const HomeScreen({super.key});

@override
Widget build(BuildContext context) {
//local variables go here i thinks
var size = MediaQuery.of(context).size;
double width = size.width;
double height = size.height;

return Scaffold(
body: Padding(
padding: EdgeInsets.fromLTRB(width * 0.07, height * 0.1, width * 0.07, 0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Center(
child: headerText(context, 'International IQ', 45.0)
),
Center(
child: Padding(
padding: EdgeInsets.fromLTRB(0, height * 0.05, 0, height * 0.05),
child: Transform(
//transform measures things in radians for some godforsaken reason
transform: Matrix4.rotationZ(-3.1415926535897932 / 8),
alignment: FractionalOffset.center,
child: const CircleAvatar(
backgroundImage: AssetImage('assets/originalAssets/globe.png'),
radius: 120.0,
))),
),
Center(
child: SizedBox(
width: width * 0.8,
height: height * 0.35,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
longButton(context, 'PLAY', () {
print(height);
Get.to(() => CategorySelectionScreen());
}),
longButton(context, 'SETTINGS', () {
Get.to(() => SettingsScreen());
}),
longButton(context, 'LEADERBOARD', () {
Get.to(() => LeaderboardScreen());
}),
],
),
),
),
],
),
),
);
}
}
< /code>
И, наконец, вот контроллер данных игрока. < /p>
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'dart:io';
import 'package:get_storage/get_storage.dart';

class PlayerDataController extends GetxController with GetSingleTickerProviderStateMixin {
FirebaseFirestore playerDatabase = FirebaseFirestore.instance;
String? deviceID;
String? playerName;
String? playerRegion;
RxInt playerScoreTotal = 0.obs;
List topPlayersList = [];

@override
void onInit() {
if(GetStorage().hasData("totalScore")) {
playerScoreTotal = GetStorage().read("totalScore");
}

ever(playerScoreTotal, (_) {
GetStorage().write('totalScore', playerScoreTotal.value);
});

super.onInit();
}

Future addUser() async {
// Create a new user with a first and last name
var user = {
"Name": playerName ?? "no name detected",
"Region": playerRegion ?? "no region detected",
"Score": playerScoreTotal.value,
"DeviceID": await findDeviceID(),
};

playerDatabase.collection("users").doc("$deviceID").set(user);
}

Future findDeviceID() async {
final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
try {
if (Platform.isAndroid) {
var build = await deviceInfoPlugin.androidInfo;
deviceID = build.id;
return build.id; //UUID for Android
} else if (Platform.isIOS) {
var data = await deviceInfoPlugin.iosInfo;
deviceID = data.identifierForVendor.toString();
return data.identifierForVendor.toString(); //UUID for iOS
}
} catch (e) {
}
return "no ID detected";
}

Future deviceExists() async {
bool exists = false;
var doc = await playerDatabase.collection("users").doc(deviceID).get();
exists = doc.exists;
if (exists) {
Map data = doc.data()!;

playerName = data["Name"];
playerScoreTotal.value = data["Score"];
playerRegion = data["Region"];
}
return exists;
}

void setPlayerName(String name) {
playerName = name;
}

void setPlayerRegion(String region) {
playerRegion = region;
}

Future addToPlayerScore(int score) async {
playerScoreTotal += score;
final data = {"Score": playerScoreTotal.value};
playerDatabase.collection("users").doc(deviceID).set(data, SetOptions(merge: true));
}

void resetScore() {
playerScoreTotal = 0.obs;
GetStorage().write('totalScore', 0);
final data = {"Score": 0};
playerDatabase.collection("users").doc(deviceID).set(data, SetOptions(merge: true));
}

Future findTopPlayers(int numOfPlayers) async {
final docRef = playerDatabase.collection("users");
await docRef.orderBy("Score", descending: true).limit(numOfPlayers).get().then(
(querySnapshot) {
topPlayersList.clear();
for (var docSnapshot in querySnapshot.docs) {
//.data() is a map of data
topPlayersList.add(docSnapshot.data());
}
}
);
}
}
< /code>
Честно говоря, я в основном обеспокоен тем, что за кулисами я даже не знаю. Но хм, большое спасибо заранее.


Подробнее здесь: https://stackoverflow.com/questions/795 ... connecting
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»