Почему эта ошибка появляется в моем приложении Flutter для Android?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Почему эта ошибка появляется в моем приложении Flutter для Android?

Сообщение Anonymous »

Я разрабатываю приложение, включающее искусственный интеллект. После того, как я добавил его, приложение не запускается и вылетает.
Я использую студию Android в качестве IDE. У меня установлена ​​Java 11. Я возился с несколькими файлами настроек в своем проекте, но не думаю, что это вызывает сбои, поскольку я всегда делал это с осторожностью.
ЖУРНАЛ ОШИБОК:

Код: Выделить всё

Launching lib\main.dart on 22111317PG in debug mode...
Running Gradle task 'assembleDebug'...
√ Built build\app\outputs\flutter-apk\app-debug.apk
E/AndroidRuntime(31832): FATAL EXCEPTION: main
E/AndroidRuntime(31832): Process: com.example.style_ai_demo, PID: 31832
E/AndroidRuntime(31832): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.style_ai_demo/com.example.myapp.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.myapp.MainActivity" on path: DexPathList[[zip file "/data/app/~~wgtxWxcNPkXk2gF2NAzX5g==/com.example.style_ai_demo-DSNTGPTEropC3oZV8dIXMw==/base.apk"],nativeLibraryDirectories=[/data/app/~~wgtxWxcNPkXk2gF2NAzX5g==/com.example.style_ai_demo-DSNTGPTEropC3oZV8dIXMw==/lib/arm64, /data/app/~~wgtxWxcNPkXk2gF2NAzX5g==/com.example.style_ai_demo-DSNTGPTEropC3oZV8dIXMw==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
E/AndroidRuntime(31832):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3898)
E/AndroidRuntime(31832):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4144)
E/AndroidRuntime(31832):    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
E/AndroidRuntime(31832):    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
E/AndroidRuntime(31832):    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:99)
E/AndroidRuntime(31832):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2589)
E/AndroidRuntime(31832):    at android.os.Handler.dispatchMessage(Handler.java:106)
E/AndroidRuntime(31832):    at android.os.Looper.loopOnce(Looper.java:224)
E/AndroidRuntime(31832):    at android.os.Looper.loop(Looper.java:318)
E/AndroidRuntime(31832):    at android.app.ActivityThread.main(ActivityThread.java:8780)
E/AndroidRuntime(31832):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(31832):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:561)
E/AndroidRuntime(31832):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
E/AndroidRuntime(31832): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.myapp.MainActivity" on path: DexPathList[[zip file "/data/app/~~wgtxWxcNPkXk2gF2NAzX5g==/com.example.style_ai_demo-DSNTGPTEropC3oZV8dIXMw==/base.apk"],nativeLibraryDirectories=[/data/app/~~wgtxWxcNPkXk2gF2NAzX5g==/com.example.style_ai_demo-DSNTGPTEropC3oZV8dIXMw==/lib/arm64, /data/app/~~wgtxWxcNPkXk2gF2NAzX5g==/com.example.style_ai_demo-DSNTGPTEropC3oZV8dIXMw==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
E/AndroidRuntime(31832):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
E/AndroidRuntime(31832):    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
E/AndroidRuntime(31832):    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
E/AndroidRuntime(31832):    at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95)
E/AndroidRuntime(31832):    at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:44)
E/AndroidRuntime(31832):    at android.app.Instrumentation.newActivity(Instrumentation.java:1390)
E/AndroidRuntime(31832):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3882)
E/AndroidRuntime(31832):    ...  12 more
Также здесь находятся все мои файлы
main.dart

Код: Выделить всё

import 'package:flutter/material.dart';
import 'pages/face_analysis_page.dart';
import 'pages/choose_style_page.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'AI Style Assistant',
theme: ThemeData(primarySwatch: Colors.purple),
initialRoute: '/',
routes: {
'/': (context) => FaceAnalysisPage(),
'/chooseStyle': (context) => FaceAnalysisPage(),
},
);
}
}
pages\face_anaанализ_page.dart[/b]

Код: Выделить всё

import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:http/http.dart' as http;

class FaceAnalysisPage extends StatefulWidget {
@override
_FaceAnalysisPageState createState() => _FaceAnalysisPageState();
}

class _FaceAnalysisPageState extends State {
File? _imageFile;
final ImagePicker _picker = ImagePicker();
String _analysisResult = "";

// Function to pick an image from the gallery
Future _pickImage() async {
final pickedFile = await _picker.pickImage(source: ImageSource.gallery);

if (pickedFile != null) {
setState(() {
_imageFile = File(pickedFile.path);
});
await _analyzeImage(_imageFile!);
}
}

// Function to analyze image using Google Vision API
Future _analyzeImage(File imageFile) async {
final String apiKey = "AIzaSyAaYpd3twtEXKbAsUX2ZOJGfz2ErBqHEng";
final String url =
"https://vision.googleapis.com/v1/images:annotate?key=$apiKey";

// Convert image to base64
final imageBytes = await imageFile.readAsBytes();
final base64Image = base64Encode(imageBytes);

// Prepare API request payload
final Map requestPayload = {
"requests": [
{
"image": {"content": base64Image},
"features": [
{"type": "FACE_DETECTION"},
{"type": "LABEL_DETECTION"}
]
}
]
};

try {
final response = await http.post(
Uri.parse(url),
headers: {
"Content-Type": "application/json",
},
body: jsonEncode(requestPayload),
);

if (response.statusCode == 200) {
final Map jsonResponse = json.decode(response.body);
setState(() {
_analysisResult = _parseAnalysisResult(jsonResponse);
});
} else {
setState(() {
_analysisResult = "Error: ${response.statusCode} - ${response.reasonPhrase}";
});
}
} catch (e) {
setState(() {
_analysisResult = "Error: $e";
});
}
}

// Function to parse analysis result
String _parseAnalysisResult(Map  result) {
final faceAnnotations = result["responses"][0]["faceAnnotations"];
if (faceAnnotations == null || faceAnnotations.isEmpty) {
return "No faces detected.";
}

final firstFace = faceAnnotations[0];
final emotions = {
"Joy": firstFace["joyLikelihood"],
"Sorrow": firstFace["sorrowLikelihood"],
"Anger": firstFace["angerLikelihood"],
"Surprise": firstFace["surpriseLikelihood"],
};

String emotionSummary = "Detected Emotions:\n";
emotions.forEach((key, value) {
emotionSummary += "$key: $value\n";
});

return """
Face Analysis:
$emotionSummary
""";
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('AI Face Analysis'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
if (_imageFile != null)
Image.file(
_imageFile!,
height: 200,
fit: BoxFit.cover,
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: _pickImage,
child: Text('Pick an Image for Analysis'),
),
const SizedBox(height: 16),
Text(
_analysisResult,
style: TextStyle(fontSize: 16),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {
Navigator.pushNamed(context, '/chooseStyle');
},
child: Text('Next: Choose Style'),
),
],
),
),
);
}
}
pages\first_page.dart

Код: Выделить всё

import 'package:flutter/material.dart';

class FirstPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Start Your Scan'),
),
body: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Padding(
padding: const EdgeInsets.all(16.0),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.0),
child: Image.asset(
'assets/begin_scan.jpeg', // Replace with your actual image asset
fit: BoxFit.cover,
height: 500.0, // Adjust the height for proper scaling
),
),
),
SizedBox(height: 16.0), // Add spacing between image and button
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: ElevatedButton(
onPressed: () {
Navigator.pushNamed(context, '/takePicture');
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.purple,
padding: EdgeInsets.symmetric(vertical: 16.0), // Adjust button size
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.0),
),
),
child: Text(
'BEGIN YOUR SCAN HERE',
style: TextStyle(
color: Colors.black,
fontSize: 18.0,
fontWeight: FontWeight.bold,
),
),
),
),
],
),
),
);
}
}
pages\take_video_page.dart

Код: Выделить всё

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:video_player/video_player.dart';
import 'dart:io';

import 'choose_style_page.dart';
import 'face_analysis_page.dart'; // Import the new page

class TakeVideoPage extends StatefulWidget {
@override
_TakeVideoPageState createState() => _TakeVideoPageState();
}

class _TakeVideoPageState extends State  {
final ImagePicker _picker = ImagePicker();
File? _recordedVideo;
VideoPlayerController? _videoPlayerController;
bool _videoTaken = false;

// Function to record a video using the camera
Future _recordVideo() async {
final pickedFile = await _picker.pickVideo(source: ImageSource.camera);
if (pickedFile != null) {
setState(() {
_recordedVideo = File(pickedFile.path);
_videoTaken = true;
_initializeVideoPlayer(); // Initialize the video player when a video is recorded
});
}
}

// Function to initialize the video player
void _initializeVideoPlayer() {
if (_recordedVideo != null) {
_videoPlayerController = VideoPlayerController.file(_recordedVideo!)
..initialize().then((_) {
setState(() {}); // Update UI after initialization
});
}
}

@override
void dispose() {
_videoPlayerController?.dispose(); // Dispose of the controller to free resources
super.dispose();
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Take a Video'),
),
body: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Padding(
padding: const EdgeInsets.all(16.0),
child: ClipRRect(
borderRadius: BorderRadius.circular(8.0),
child: _videoTaken && _videoPlayerController != null
? AspectRatio(
aspectRatio: _videoPlayerController!.value.aspectRatio,
child: VideoPlayer(_videoPlayerController!),
)
: Image.asset(
'assets/take_video.jpeg', // Replace with your actual placeholder image
fit: BoxFit.cover,
height: 500.0,
),
),
),
const SizedBox(height: 16.0),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: ElevatedButton(
onPressed: _recordVideo, // Trigger video recording
style: ElevatedButton.styleFrom(
backgroundColor: _videoTaken ? Colors.green : Colors.purple,
padding: EdgeInsets.symmetric(vertical: 16.0),
),
child: Text(
_videoTaken
? 'Video Taken Successfully!'
: 'Take a Video of Your Body',
style: TextStyle(color: Colors.white, fontSize: 18.0),
),
),
),
if (_videoTaken)
Padding(
padding: const EdgeInsets.all(16.0),
child: ElevatedButton(
onPressed: () {
if (_videoPlayerController != null) {
setState(() {
_videoPlayerController!.value.isPlaying
? _videoPlayerController!.pause()
: _videoPlayerController!.play();
});
}
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.green,
),
child: Text(
_videoPlayerController != null &&
_videoPlayerController!.value.isPlaying
? 'Pause Video'
: 'Play Video',
style: TextStyle(fontSize: 18.0),
),
),
),
if (_videoTaken)
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: ElevatedButton(
onPressed: () {
// Navigate to the ChooseClothingPage
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>  FaceAnalysisPage(),
),
);
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.purple,
padding: EdgeInsets.symmetric(vertical: 16.0),
),
child: Text(
'Continue to Clothing Options',
style: TextStyle(color: Colors.white, fontSize: 18.0),
),
),
),
],
),
),
);
}
}
pages\choose_style_page.dart

Код: Выделить всё

import 'package:flutter/material.dart';
import 'dart:math';

class ChooseStylePage extends StatefulWidget {
@override
_ChooseStylePageState createState() => _ChooseStylePageState();
}

class _ChooseStylePageState extends State {
String? _selectedStyle;
final List _styles = ["Elegant", "Casual", "Stylish", "Surprise Me"];

void _chooseRandomStyle() {
final random = Random();
setState(() {
_selectedStyle = _styles[random.nextInt(_styles.length - 1)];
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Choose Your Style'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
DropdownButton(
isExpanded: true,
value: _selectedStyle,
items: _styles.map((style) {
return DropdownMenuItem(
value: style,
child: Text(style),
);
}).toList(),
onChanged: (value) {
if (value == "Surprise Me") {
_chooseRandomStyle();
} else {
setState(() {
_selectedStyle = value;
});
}
},
hint: Text("Select your style"),
),
const SizedBox(height: 16),
Text(
"Selected Style: ${_selectedStyle ?? "None"}",
style: TextStyle(fontSize: 18),
),
],
),
),
);
}
}
Любая помощь приветствуется

Подробнее здесь: https://stackoverflow.com/questions/792 ... lutter-app
Ответить

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

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

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

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

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