demitri kozlov
demitri kozlov

Reputation: 317

java.lang.RuntimeException: Unable to instantiate activity in Flutter

Flutter newly created app gives error when using fire base.

How should i fix this problem as it is asking flutter app main activity cannot be cast to android app activity.

04-05 21:16:07.570 27391-27391/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.firestoreflutterchat, PID: 27391
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.firestoreflutterchat/com.example.firestoreflutterchat.MainActivity}: java.lang.ClassCastException: com.example.firestoreflutterchat.MainActivity cannot be cast to android.app.Activity
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2124)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
        at android.app.ActivityThread.access$800(ActivityThread.java:139)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5097)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.ClassCastException: com.example.firestoreflutterchat.MainActivity cannot be cast to android.app.Activity
        at android.app.Instrumentation.newActivity(Instrumentation.java:1084)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2115)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257) 
        at android.app.ActivityThread.access$800(ActivityThread.java:139) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:136) 
        at android.app.ActivityThread.main(ActivityThread.java:5097) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
        at dalvik.system.NativeStart.main(Native Method) 

This is main dart file , no changes are made here.

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

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(

        primarySwatch: Colors.blue,

        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);



  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {

      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(

        title: Text(widget.title),
      ),
      body: Center(

        child: Column(

          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), 
    );
  }
}

This is android src Main activity kotlin :

package com.example.firestoreflutterchat

import android.content.Context
//import androidx.multidex.MultiDex
import io.flutter.app.FlutterApplication
import io.flutter.embedding.android.FlutterActivity

class MainActivity : FlutterApplication() {


    }

I only opened a new flutter project and followed the fire base steps to add dependencies and google-services.json file to project.

It later was giving firebase in it error so i added multidex.

In the main dart file of flutter application and android module Main activity no changes were made.

Is it some thing i did wrong , i am new to flutter so i am not understanding.

Upvotes: 27

Views: 32114

Answers (10)

edn
edn

Reputation: 2193

Correcting the default package name with the actual one in the file android/app/src/main/kotlin/com/example/options_app/MainActivity.kt solved the problem for me.

Upvotes: 1

HoRiz
HoRiz

Reputation: 798

2023:

I had the same issue. For me, it was because I had the Kotlin file (main activity) who had the wrong package name.The name was com.example.myapp instead of com.company.myapp. I have changed the name later, because I have to upload app to Play Store.

Solution:

Change the package name using this package - here (change_app_package_name)

This will change the package name of all places. It worked for me.

Upvotes: 1

mathems32
mathems32

Reputation: 365

Thank you to everyone who has contributed an answer. I came across this error after overwriting files within cloud functions, later to discover that I had two of a certain folder and that I needed to delete the extra since it was there where Flutter was trying to run (incorrectly) ... Paying attention to Aadn's response, I also wanted to fix details within the three AndroidManifest files (there's one within android/app/src/debug, another within android/app/src/main, and another within android/app/src/profile) ... Whilst doing this I noticed that there's a folder that the MainActivity.kt file must refer to -- the package mentioned in MainActivity.kt must match this folder, like it is where things are going on ... To see the folder notice project_name/android/app/src/main/kotlin ... The folder there is the package that the MainActivity.kt file must mention, and it's the same package that the AndroidManifest.xml files should mention too ... For me, deleting the extra folder and then ensuring the correct package name would be called, solved this issue ... My apology for the lengthiness, but I hope it helps you to understand and to move forwards : )

Upvotes: 0

Ibrahim Alqayyas
Ibrahim Alqayyas

Reputation: 195

One of the problems is bad V2 embedding. No need to change your package name. Try this in the manifest.xml in <activity> attribute

android:name="io.flutter.embedding.android.FlutterActivity"

and in the <application> attribute

android:name="${applicationName}"

Upvotes: 3

Amazed
Amazed

Reputation: 79

In my case command flutter clean and flutter pub get works for me

Try it out.

Upvotes: 3

Bruno Alves
Bruno Alves

Reputation: 11

<application android:allowBackup="false" android:name="${applicationName}">

In the AndroidManisfest.xml update the tag application with the property android:name with "${applicationName}" like the code above. For me this issue was solved with this.

Upvotes: 1

Camilo Ramos
Camilo Ramos

Reputation: 36

Update the folders containing your MainActivity.kt with the package name in the MainActivity.kt enter image description here

Upvotes: 1

Raj A
Raj A

Reputation: 592

The error occurs when you change the package name. It doesn't sync with Kotlin

Steps:

  • Go to android>app>src>main>kotlin>MainActivity
  • Change the package name to the respective package name.

Upvotes: 24

Jon
Jon

Reputation: 571

In order to solve this error, I had to update the package name in the MainActivity file in the Kotlin folder of my flutter app. From the output of the console I knew that somewhere the default name still existed somewhere in my app, and that this was causing an error. Updating the package name in the MainActivity file solved this.

Upvotes: 56

Sanjay Sharma
Sanjay Sharma

Reputation: 4035

Because your MainActivity is child of FlutterApplication not FlutterActivity. Modify the MainActivity as following

import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() {
}

Upvotes: 6

Related Questions