Java lang runtimeexception как исправить на телефоне

I'm new to android. I built an application in which there is a Button which starts an Activity and there are two more Buttons in that Activity which will open two seperate activities. One of that

I’m new to android. I built an application in which there is a Button which starts an Activity and there are two more Buttons in that Activity which will open two seperate activities. One of that Activity contains Google map named as nearby search. When I start the nearby search the app is crashing while this Activity was running perfectly before integrating the map.

Here is the log cat

04-02 02:32:40.354: E/AndroidRuntime(22037): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jamaat_times/com.example.jamaattiming.NearbySearch}: java.lang.NullPointerException
04-02 02:32:40.354: E/AndroidRuntime(22037):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at android.app.ActivityThread.access$600(ActivityThread.java:162)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at android.os.Handler.dispatchMessage(Handler.java:107)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at android.os.Looper.loop(Looper.java:194)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at android.app.ActivityThread.main(ActivityThread.java:5371)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at java.lang.reflect.Method.invokeNative(Native Method)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at java.lang.reflect.Method.invoke(Method.java:525)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at dalvik.system.NativeStart.main(Native Method)
04-02 02:32:40.354: E/AndroidRuntime(22037): Caused by: java.lang.NullPointerException
04-02 02:32:40.354: E/AndroidRuntime(22037):    at com.example.jamaattiming.NearbySearch.onCreate(NearbySearch.java:36)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at android.app.Activity.performCreate(Activity.java:5122)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
04-02 02:32:40.354: E/AndroidRuntime(22037):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
04-02 02:32:40.354: E/AndroidRuntime(22037):    ... 11 more

here is the java file:

    public class NearbySearch extends Activity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nearby_search);
        GoogleMapOptions mapOptions = new GoogleMapOptions();
         GoogleMap maps=(((MapFragment) getFragmentManager().findFragmentById(R.id.map2)).getMap());

         mapOptions.mapType(GoogleMap.MAP_TYPE_HYBRID);
         //maps.setMapType(GoogleMap.MAP_TYPE_HYBRID);
         maps.setMyLocationEnabled(true);
         maps.addMarker(new MarkerOptions()
            .position(new LatLng(24.9967 , 66.1234))
            .title("Hello world"));
    }

}

here is the xml file:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:background="#808080">

    <fragment
        android:id="@+id/map2"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

and here is the manifest:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.jamaat_times"
    android:versionCode="1"
    android:versionName="1.0" >

  <uses-sdk
      android:minSdkVersion="8"
      android:targetSdkVersion="16" />

    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="info.androidhive.googlemapsv2.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />


    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_jamaat"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.jamaattiming.Splash"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.jamaattiming.MainPage"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="com.example.CLEARSCREEN" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.jamaattiming.Qibla"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="com.example.COMPASS" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <activity
            android:name="com.example.jamaattiming.JamaatFinder"
            android:label="@string/title_activity_jamaat_finder" >
        </activity>

        <activity
            android:name="com.example.jamaattiming.QiblaFinder"
            android:label="@string/title_activity_qibla_finder" >
        </activity>

        <activity
            android:name="com.example.jamaattiming.TagYourself"
            android:label="@string/title_activity_tag_yourself" >
        </activity>

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="my key" />
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <activity
            android:name="com.example.jamaattiming.NearbySearch"
            android:label="@string/title_activity_nearby_search" >
        </activity>


        <activity
            android:name="com.example.jamaattiming.ManualSearch"
            android:label="@string/title_activity_manual_search" >
        </activity>
    </application>

</manifest>

I was trying to run a sample code
While launching the application in the android 1.5 emulator , I got these errors….
Any one have some hint..?

ERROR from LogCat:

01-13 02:28:08.392: ERROR/AndroidRuntime(2888): FATAL EXCEPTION: main
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.s.android.test/com.s.android.test.MainActivity}: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1544)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Looper.loop(Looper.java:123)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.main(ActivityThread.java:3647)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invokeNative(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invoke(Method.java:507)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.NativeStart.main(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): Caused by: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1536)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     ... 11 more
01-13 02:28:08.407: WARN/ActivityManager(112):   Force finishing activity com.s.android.test/.MainActivity

Edit
This error happens to most of the beginners, the thing is that you have to add all your activities in the Manifest file.

Braiam's user avatar

asked Jan 14, 2011 at 5:37

rahul's user avatar

4

It is a problem of your Intent.

Please add your Activity in your AndroidManifest.xml.

When you want to make a new activity, you should register it in your AndroidManifest.xml.

Mohsen Kamrani's user avatar

answered Jan 14, 2011 at 6:45

Tanmay Mandal's user avatar

Tanmay MandalTanmay Mandal

39.6k12 gold badges51 silver badges48 bronze badges

5

You may be trying to find the view before onCreate() which is incorrect.

public class MainActivity extends Activity {

  ImageView mainImage = (ImageView) findViewById(R.id.imageViewMain); //incorrect

  @Override
  protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
  ...
}

answered Nov 18, 2013 at 13:50

SMUsamaShah's user avatar

SMUsamaShahSMUsamaShah

7,49722 gold badges88 silver badges129 bronze badges

3

There is another way to get an java.lang.RuntimeException: Unable to instantiate activity ComponentInfo exception and that is the activity that you are trying to start is abstract. I made this stupid mistake once and its very easy to overlook.

answered Dec 6, 2011 at 15:38

Kevin's user avatar

KevinKevin

1,68613 silver badges16 bronze badges

4

In my case I forgot to add the google maps library

<application>
    ....

    <uses-library android:name="com.google.android.maps" />
</application>

Also, check that you’re not missing the preceding dot before the activity path

<activity android:name=".activities.MainActivity"/>

answered Apr 29, 2011 at 10:43

Maragues's user avatar

MaraguesMaragues

37.5k14 gold badges94 silver badges96 bronze badges

1

Image

It also happens because of this issue. I unchecked the jars that needed be exported to the apk and this same thing happened. Please tick the jars that your app Needs to run.

answered Jul 2, 2013 at 11:35

meowmeowbeans's user avatar

1

This might not be relevant to the actual question, but in my instance, I tried to implement Kotlin and left out apply plugin: 'kotlin-android'. The error happened because it could not recognize the MainActivity in as a .kt file.

Hope it helps someone.

answered Dec 13, 2016 at 18:08

Muz's user avatar

MuzMuz

5,7873 gold badges47 silver badges64 bronze badges

2

I encountered this problem too, but in a slightly different way. Here was my scenario:

App detail:

  • Using ActionBarSherlock as a library
  • Using android-support-v4-r7-googlemaps.jar in the ActionBarSherlock library so I could use a «map fragment» in my primary project
  • Added the jar to the build path of my primary project
  • Included the <uses-library android:name="com.google.android.maps" /> in the manifests of both the library project and my primary project (this may not be necessary in the library?)
  • The manifest in the primary project had the proper activity definition and all of the appropriate properties
  • I didn’t have an abstract activity or any of the other gotchas I’ve seen on Stack Overflow pertaining to this problem.

However, I still encountered the error described in the original post and could not get it to go away. The problem though, was slightly different in one regard:

  • It only affected a fresh install of the application to my device. Any time the app installed for the first time, I would get the error preceded by several «warnings» of: Unable to resolve superclass of FragmentActivity
  • Those warnings traced back to the ActionBarSherlock library
  • The app would force close and crash.
  • If I immediately rebuilt and redeployed the app, it worked fine.
  • The only time it crashed was on a totally fresh install. If I uninstalled the app, built and deployed again from Eclipse, it would crash. Build/deploy a second time, it would work fine.

How I fixed it:

  • In the ActionBarSherlock library project, I added the android-support-v4-r7-googlemaps.jar to the build path
  • This step alone did not fix the problem

  • Once the jar was added to the build path, I had change the order on the Java Build Path > Order and Export tab — I set the JAR to the first item in the list (it was the last after the /src and /gen items).

  • I then rebuilt and redeployed the app to my device — it worked as expected on a fresh install. Just to be certain, I uninstalled it again 2-3 times and reinstalled — still worked as expected.

This may be a total rookie mistake, but I spent quite a while digging through posts and my code to figure it out, so hopefully it can be helpful to someone else. May not fix all situations, but in this particular case, that ended up being the solution to my problem.

answered Oct 12, 2012 at 12:29

Kyle's user avatar

KyleKyle

6065 silver badges16 bronze badges

1

This error can also be the ultimate sign of a dumb mistake (like when I — I mean, cough, like when a friend of mine who showed me their code once) where they try to execute code outside of a method like trying to do this:

SQLiteDatabase db = openOrCreateDatabase("DB", MODE_PRIVATE, null); //trying to perform function where you can only set up objects, primitives, etc

@Override
public void onCreate(Bundle savedInstanceState) {
....
}

rather than this:

SQLiteDatabase db;

@Override
public void onCreate(Bundle savedInstanceState) {
db = openOrCreateDatabase("DB", MODE_PRIVATE, null);
....
}

answered Oct 29, 2013 at 20:15

Chris Klingler's user avatar

Chris KlinglerChris Klingler

5,2282 gold badges37 silver badges43 bronze badges

1

For me, my package string in AndroidManifest.xml was incorrect (copied from a tutorial).
Make sure the package string in this file is the same as where your main activity is, e.g.

 package="com.example.app"

An easy way to do this is to open the AndroidManifest.xml file in the «Manifest» tab, and type it in the text box next to Package, or use the Browse button.

Also, the package string for my activity was wrong, e.g.

<activity android:name="com.example.app.MainActivity" android:label="@string/app_name">

I (stupidly) got the same error weeks later when I renamed my package name. If you do this, make sure you update the AndroidManifest.xml file too.

Jared Burrows's user avatar

Jared Burrows

53.9k23 gold badges151 silver badges185 bronze badges

answered Aug 27, 2012 at 8:36

satyrFrost's user avatar

satyrFrostsatyrFrost

3938 silver badges17 bronze badges

1

I got rid of this problem by deleting the Bin and Gen folder from project(which automatically come back when the project will build) and then cleaning the project from ->Menu -> Project -> clean.

Thanks.

answered Apr 6, 2013 at 10:07

Jagdeep Singh's user avatar

Jagdeep SinghJagdeep Singh

1,1901 gold badge16 silver badges34 bronze badges

Simply Clean your working project or restart eclipse. Then run your project. it will work.

answered Jul 16, 2014 at 6:01

Emran Hamza's user avatar

Emran HamzaEmran Hamza

3,8091 gold badge24 silver badges20 bronze badges

1

In my case I haven’t set the setContentView(R.layout.main);

If you create a new class do not foget to set this in on onCreate(Bundle savedInstanceState) method.

I have done this stupid mistake several times.

answered Jan 25, 2012 at 6:59

saji159's user avatar

saji159saji159

3287 silver badges14 bronze badges

For me it was different from any of the above,

The activity was declared as abstract, That is why giving the error.
Once it removed it worked.

Earlier

     public abstract class SampleActivity extends AppcompatActivity{
     }

After removal

     public class SampleActivity extends AppcompatActivity{
     }

answered Jan 9, 2020 at 12:30

Thriveni's user avatar

ThriveniThriveni

7328 silver badges11 bronze badges

0

Ok, I am fairly experienced on the iPhone but new to android. I got this issue when I had:

Button infoButton = (Button)findViewById(R.id.InfoButton);

this line of code above:

@Override
public void onCreate (Bundle savedInstanceState) {
}

May be I am sleep deprived :P

answered Jun 19, 2012 at 15:09

iSee's user avatar

iSeeiSee

6041 gold badge14 silver badges31 bronze badges

1

In my case, I was trying to initialize the components(UI) even before the onCreate is called for the Activity.

Make sure your UI components are initialized/linked in the onCreate method after setContentView

NB: This is my first mistake while learning Android programming.

answered Apr 12, 2019 at 16:20

Anup H's user avatar

Anup HAnup H

5197 silver badges10 bronze badges

1

I recently encountered this with fresh re-install of Eclipse. Turns out my Compiler compliance level was set to Java 1.7 and project required 1.6.

In Eclipse:
Project -> Properties -> Java Compiler -> JDK Compliance

answered Oct 24, 2012 at 7:24

J.G.Sebring's user avatar

J.G.SebringJ.G.Sebring

5,8841 gold badge30 silver badges42 bronze badges

Whow are there lots of ways to get this error!.

I will add another given none of the others either applied or were the cause.

I forgot the ‘public‘ in the declaration of my activity class! It was package private.

I had been writing so much Bluetooth code that habit caused me to create an activity class that was package private.

Says something about the obscurity of this error message.

answered Jul 25, 2020 at 0:40

Brian Reinhold's user avatar

Brian ReinholdBrian Reinhold

2,3113 gold badges25 silver badges44 bronze badges

Make sure MainActivity is not «abstract».

abstract class MainActivity : AppCompatActivity()

just remove the abstract

class MainActivity : AppCompatActivity() {

answered Sep 29, 2021 at 11:54

Amit Singh's user avatar

Amit SinghAmit Singh

5094 silver badges6 bronze badges

Got this problem, and fixed it by setting the «launch mode» property of the activity.

answered Apr 6, 2012 at 13:28

Zorglube's user avatar

Another reason of this problem may be a missing library.

Go to Properties -> Android and check that you add the libraries correctly

answered Mar 7, 2013 at 10:39

ayalcinkaya's user avatar

ayalcinkayaayalcinkaya

3,24328 silver badges25 bronze badges

1

I had the same problem, but I had my activity declared in the Manifest file, with the correct name.

My problem was that I didn’t have to imported a third party libraries in a «libs» folder, and I needed reference them in my proyect (Right-click, properties, Java Build Path, Libraries, Add Jar…).

answered Jun 11, 2013 at 16:49

Maria Mercedes Wyss Alvarez's user avatar

This can happen if your activity class is inside a default package. I fixed it by moving the activity class to a new package. and changing the manifest.xml

before

activity android:name=".MainActivity" 

after

activity android:name="new_package.MainActivity"

Rohit5k2's user avatar

Rohit5k2

17.8k8 gold badges46 silver badges57 bronze badges

answered Jun 7, 2014 at 18:02

Satthy's user avatar

SatthySatthy

1091 gold badge3 silver badges10 bronze badges

1

As suggested by djjeck in comment in this answer I missed to put public modifier for my class.

It should be

public class MyActivity extends AppCompatActivity {

It may help some like me.

answered Nov 13, 2017 at 12:36

Shailendra Madda's user avatar

Shailendra MaddaShailendra Madda

20.1k15 gold badges95 silver badges137 bronze badges

This happens to me fairly frequently when using the NDK. I found that it is necessary for me to do a «Clean» in Eclipse after every time I do a ndk-build. Hope it helps anyone :)

answered Jan 23, 2012 at 17:04

kizzx2's user avatar

kizzx2kizzx2

18.6k14 gold badges75 silver badges82 bronze badges

This error also occurs when you use of ActionBarActivity but assigned a non AppCompat style.

To fix this just set your apps style parent to an Theme.AppCompat one like this.:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>

answered Dec 5, 2013 at 9:14

Ostkontentitan's user avatar

OstkontentitanOstkontentitan

6,8605 gold badges52 silver badges71 bronze badges

1

Right click on project > properties > android > and try with different version of the android earlier i was doing with android 4.4 then i changed to android 4.3 and it worked !

answered Mar 9, 2014 at 10:51

nikhilgotan's user avatar

I had the same issue (Unable to instantiate Activity) :

FIRST reason :

I was accessing

Camera mCamera;
Camera.Parameters params = mCamera.getParameters();

before

mCamera = Camera.open();

So right way of doing is, open the camera first and then access parameters.

SECOND reason : Declare your activity in the manifest file

<activity android:name=".activities.MainActivity"/>

THIRD reason :
Declare Camera permission in your manifest file.

<uses-feature android:name="android.hardware.Camera"></uses-feature>
<uses-permission android:name="android.permission.CAMERA" />

Hope this helps

answered May 11, 2016 at 20:17

Sdembla's user avatar

SdemblaSdembla

1,60913 silver badges13 bronze badges

In my case, I was trying to embed the Facebook SDK and I was having the wrong Application ID; thus the error was popping up. In your manifest file, you should have the proper meta data:

<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />

answered Jul 9, 2016 at 14:52

Menelaos Kotsollaris's user avatar

0

If you have Android Studio 2.3.3 and Android Studio 3.0.0 installed, then switching between the two programs for development will cause this error. This is because there exist situations where classes supported in one program is not supported by the other and vice versa. It is important to maintain consistency in which version of Android Studio is being used to develop a project.

answered Oct 7, 2017 at 14:15

hexicle's user avatar

hexiclehexicle

2,0432 gold badges23 silver badges31 bronze badges

I have tried all above solution but nothing work for me. after I have just add extend activity instead of AppCompatActivity and working fine.

used

public class MainActivity extends Activity  

instead of

public class MainActivity extends AppCompatActivity 

i dont know what real issue was that.

answered Feb 15, 2018 at 18:13

Sagar Jethva's user avatar

I was trying to run a sample code
While launching the application in the android 1.5 emulator , I got these errors….
Any one have some hint..?

ERROR from LogCat:

01-13 02:28:08.392: ERROR/AndroidRuntime(2888): FATAL EXCEPTION: main
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.s.android.test/com.s.android.test.MainActivity}: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1544)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Looper.loop(Looper.java:123)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.main(ActivityThread.java:3647)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invokeNative(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invoke(Method.java:507)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.NativeStart.main(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): Caused by: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1536)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     ... 11 more
01-13 02:28:08.407: WARN/ActivityManager(112):   Force finishing activity com.s.android.test/.MainActivity

Edit
This error happens to most of the beginners, the thing is that you have to add all your activities in the Manifest file.

Braiam's user avatar

asked Jan 14, 2011 at 5:37

rahul's user avatar

4

It is a problem of your Intent.

Please add your Activity in your AndroidManifest.xml.

When you want to make a new activity, you should register it in your AndroidManifest.xml.

Mohsen Kamrani's user avatar

answered Jan 14, 2011 at 6:45

Tanmay Mandal's user avatar

Tanmay MandalTanmay Mandal

39.6k12 gold badges51 silver badges48 bronze badges

5

You may be trying to find the view before onCreate() which is incorrect.

public class MainActivity extends Activity {

  ImageView mainImage = (ImageView) findViewById(R.id.imageViewMain); //incorrect

  @Override
  protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
  ...
}

answered Nov 18, 2013 at 13:50

SMUsamaShah's user avatar

SMUsamaShahSMUsamaShah

7,49722 gold badges88 silver badges129 bronze badges

3

There is another way to get an java.lang.RuntimeException: Unable to instantiate activity ComponentInfo exception and that is the activity that you are trying to start is abstract. I made this stupid mistake once and its very easy to overlook.

answered Dec 6, 2011 at 15:38

Kevin's user avatar

KevinKevin

1,68613 silver badges16 bronze badges

4

In my case I forgot to add the google maps library

<application>
    ....

    <uses-library android:name="com.google.android.maps" />
</application>

Also, check that you’re not missing the preceding dot before the activity path

<activity android:name=".activities.MainActivity"/>

answered Apr 29, 2011 at 10:43

Maragues's user avatar

MaraguesMaragues

37.5k14 gold badges94 silver badges96 bronze badges

1

Image

It also happens because of this issue. I unchecked the jars that needed be exported to the apk and this same thing happened. Please tick the jars that your app Needs to run.

answered Jul 2, 2013 at 11:35

meowmeowbeans's user avatar

1

This might not be relevant to the actual question, but in my instance, I tried to implement Kotlin and left out apply plugin: 'kotlin-android'. The error happened because it could not recognize the MainActivity in as a .kt file.

Hope it helps someone.

answered Dec 13, 2016 at 18:08

Muz's user avatar

MuzMuz

5,7873 gold badges47 silver badges64 bronze badges

2

I encountered this problem too, but in a slightly different way. Here was my scenario:

App detail:

  • Using ActionBarSherlock as a library
  • Using android-support-v4-r7-googlemaps.jar in the ActionBarSherlock library so I could use a «map fragment» in my primary project
  • Added the jar to the build path of my primary project
  • Included the <uses-library android:name="com.google.android.maps" /> in the manifests of both the library project and my primary project (this may not be necessary in the library?)
  • The manifest in the primary project had the proper activity definition and all of the appropriate properties
  • I didn’t have an abstract activity or any of the other gotchas I’ve seen on Stack Overflow pertaining to this problem.

However, I still encountered the error described in the original post and could not get it to go away. The problem though, was slightly different in one regard:

  • It only affected a fresh install of the application to my device. Any time the app installed for the first time, I would get the error preceded by several «warnings» of: Unable to resolve superclass of FragmentActivity
  • Those warnings traced back to the ActionBarSherlock library
  • The app would force close and crash.
  • If I immediately rebuilt and redeployed the app, it worked fine.
  • The only time it crashed was on a totally fresh install. If I uninstalled the app, built and deployed again from Eclipse, it would crash. Build/deploy a second time, it would work fine.

How I fixed it:

  • In the ActionBarSherlock library project, I added the android-support-v4-r7-googlemaps.jar to the build path
  • This step alone did not fix the problem

  • Once the jar was added to the build path, I had change the order on the Java Build Path > Order and Export tab — I set the JAR to the first item in the list (it was the last after the /src and /gen items).

  • I then rebuilt and redeployed the app to my device — it worked as expected on a fresh install. Just to be certain, I uninstalled it again 2-3 times and reinstalled — still worked as expected.

This may be a total rookie mistake, but I spent quite a while digging through posts and my code to figure it out, so hopefully it can be helpful to someone else. May not fix all situations, but in this particular case, that ended up being the solution to my problem.

answered Oct 12, 2012 at 12:29

Kyle's user avatar

KyleKyle

6065 silver badges16 bronze badges

1

This error can also be the ultimate sign of a dumb mistake (like when I — I mean, cough, like when a friend of mine who showed me their code once) where they try to execute code outside of a method like trying to do this:

SQLiteDatabase db = openOrCreateDatabase("DB", MODE_PRIVATE, null); //trying to perform function where you can only set up objects, primitives, etc

@Override
public void onCreate(Bundle savedInstanceState) {
....
}

rather than this:

SQLiteDatabase db;

@Override
public void onCreate(Bundle savedInstanceState) {
db = openOrCreateDatabase("DB", MODE_PRIVATE, null);
....
}

answered Oct 29, 2013 at 20:15

Chris Klingler's user avatar

Chris KlinglerChris Klingler

5,2282 gold badges37 silver badges43 bronze badges

1

For me, my package string in AndroidManifest.xml was incorrect (copied from a tutorial).
Make sure the package string in this file is the same as where your main activity is, e.g.

 package="com.example.app"

An easy way to do this is to open the AndroidManifest.xml file in the «Manifest» tab, and type it in the text box next to Package, or use the Browse button.

Also, the package string for my activity was wrong, e.g.

<activity android:name="com.example.app.MainActivity" android:label="@string/app_name">

I (stupidly) got the same error weeks later when I renamed my package name. If you do this, make sure you update the AndroidManifest.xml file too.

Jared Burrows's user avatar

Jared Burrows

53.9k23 gold badges151 silver badges185 bronze badges

answered Aug 27, 2012 at 8:36

satyrFrost's user avatar

satyrFrostsatyrFrost

3938 silver badges17 bronze badges

1

I got rid of this problem by deleting the Bin and Gen folder from project(which automatically come back when the project will build) and then cleaning the project from ->Menu -> Project -> clean.

Thanks.

answered Apr 6, 2013 at 10:07

Jagdeep Singh's user avatar

Jagdeep SinghJagdeep Singh

1,1901 gold badge16 silver badges34 bronze badges

Simply Clean your working project or restart eclipse. Then run your project. it will work.

answered Jul 16, 2014 at 6:01

Emran Hamza's user avatar

Emran HamzaEmran Hamza

3,8091 gold badge24 silver badges20 bronze badges

1

In my case I haven’t set the setContentView(R.layout.main);

If you create a new class do not foget to set this in on onCreate(Bundle savedInstanceState) method.

I have done this stupid mistake several times.

answered Jan 25, 2012 at 6:59

saji159's user avatar

saji159saji159

3287 silver badges14 bronze badges

For me it was different from any of the above,

The activity was declared as abstract, That is why giving the error.
Once it removed it worked.

Earlier

     public abstract class SampleActivity extends AppcompatActivity{
     }

After removal

     public class SampleActivity extends AppcompatActivity{
     }

answered Jan 9, 2020 at 12:30

Thriveni's user avatar

ThriveniThriveni

7328 silver badges11 bronze badges

0

Ok, I am fairly experienced on the iPhone but new to android. I got this issue when I had:

Button infoButton = (Button)findViewById(R.id.InfoButton);

this line of code above:

@Override
public void onCreate (Bundle savedInstanceState) {
}

May be I am sleep deprived :P

answered Jun 19, 2012 at 15:09

iSee's user avatar

iSeeiSee

6041 gold badge14 silver badges31 bronze badges

1

In my case, I was trying to initialize the components(UI) even before the onCreate is called for the Activity.

Make sure your UI components are initialized/linked in the onCreate method after setContentView

NB: This is my first mistake while learning Android programming.

answered Apr 12, 2019 at 16:20

Anup H's user avatar

Anup HAnup H

5197 silver badges10 bronze badges

1

I recently encountered this with fresh re-install of Eclipse. Turns out my Compiler compliance level was set to Java 1.7 and project required 1.6.

In Eclipse:
Project -> Properties -> Java Compiler -> JDK Compliance

answered Oct 24, 2012 at 7:24

J.G.Sebring's user avatar

J.G.SebringJ.G.Sebring

5,8841 gold badge30 silver badges42 bronze badges

Whow are there lots of ways to get this error!.

I will add another given none of the others either applied or were the cause.

I forgot the ‘public‘ in the declaration of my activity class! It was package private.

I had been writing so much Bluetooth code that habit caused me to create an activity class that was package private.

Says something about the obscurity of this error message.

answered Jul 25, 2020 at 0:40

Brian Reinhold's user avatar

Brian ReinholdBrian Reinhold

2,3113 gold badges25 silver badges44 bronze badges

Make sure MainActivity is not «abstract».

abstract class MainActivity : AppCompatActivity()

just remove the abstract

class MainActivity : AppCompatActivity() {

answered Sep 29, 2021 at 11:54

Amit Singh's user avatar

Amit SinghAmit Singh

5094 silver badges6 bronze badges

Got this problem, and fixed it by setting the «launch mode» property of the activity.

answered Apr 6, 2012 at 13:28

Zorglube's user avatar

Another reason of this problem may be a missing library.

Go to Properties -> Android and check that you add the libraries correctly

answered Mar 7, 2013 at 10:39

ayalcinkaya's user avatar

ayalcinkayaayalcinkaya

3,24328 silver badges25 bronze badges

1

I had the same problem, but I had my activity declared in the Manifest file, with the correct name.

My problem was that I didn’t have to imported a third party libraries in a «libs» folder, and I needed reference them in my proyect (Right-click, properties, Java Build Path, Libraries, Add Jar…).

answered Jun 11, 2013 at 16:49

Maria Mercedes Wyss Alvarez's user avatar

This can happen if your activity class is inside a default package. I fixed it by moving the activity class to a new package. and changing the manifest.xml

before

activity android:name=".MainActivity" 

after

activity android:name="new_package.MainActivity"

Rohit5k2's user avatar

Rohit5k2

17.8k8 gold badges46 silver badges57 bronze badges

answered Jun 7, 2014 at 18:02

Satthy's user avatar

SatthySatthy

1091 gold badge3 silver badges10 bronze badges

1

As suggested by djjeck in comment in this answer I missed to put public modifier for my class.

It should be

public class MyActivity extends AppCompatActivity {

It may help some like me.

answered Nov 13, 2017 at 12:36

Shailendra Madda's user avatar

Shailendra MaddaShailendra Madda

20.1k15 gold badges95 silver badges137 bronze badges

This happens to me fairly frequently when using the NDK. I found that it is necessary for me to do a «Clean» in Eclipse after every time I do a ndk-build. Hope it helps anyone :)

answered Jan 23, 2012 at 17:04

kizzx2's user avatar

kizzx2kizzx2

18.6k14 gold badges75 silver badges82 bronze badges

This error also occurs when you use of ActionBarActivity but assigned a non AppCompat style.

To fix this just set your apps style parent to an Theme.AppCompat one like this.:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>

answered Dec 5, 2013 at 9:14

Ostkontentitan's user avatar

OstkontentitanOstkontentitan

6,8605 gold badges52 silver badges71 bronze badges

1

Right click on project > properties > android > and try with different version of the android earlier i was doing with android 4.4 then i changed to android 4.3 and it worked !

answered Mar 9, 2014 at 10:51

nikhilgotan's user avatar

I had the same issue (Unable to instantiate Activity) :

FIRST reason :

I was accessing

Camera mCamera;
Camera.Parameters params = mCamera.getParameters();

before

mCamera = Camera.open();

So right way of doing is, open the camera first and then access parameters.

SECOND reason : Declare your activity in the manifest file

<activity android:name=".activities.MainActivity"/>

THIRD reason :
Declare Camera permission in your manifest file.

<uses-feature android:name="android.hardware.Camera"></uses-feature>
<uses-permission android:name="android.permission.CAMERA" />

Hope this helps

answered May 11, 2016 at 20:17

Sdembla's user avatar

SdemblaSdembla

1,60913 silver badges13 bronze badges

In my case, I was trying to embed the Facebook SDK and I was having the wrong Application ID; thus the error was popping up. In your manifest file, you should have the proper meta data:

<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />

answered Jul 9, 2016 at 14:52

Menelaos Kotsollaris's user avatar

0

If you have Android Studio 2.3.3 and Android Studio 3.0.0 installed, then switching between the two programs for development will cause this error. This is because there exist situations where classes supported in one program is not supported by the other and vice versa. It is important to maintain consistency in which version of Android Studio is being used to develop a project.

answered Oct 7, 2017 at 14:15

hexicle's user avatar

hexiclehexicle

2,0432 gold badges23 silver badges31 bronze badges

I have tried all above solution but nothing work for me. after I have just add extend activity instead of AppCompatActivity and working fine.

used

public class MainActivity extends Activity  

instead of

public class MainActivity extends AppCompatActivity 

i dont know what real issue was that.

answered Feb 15, 2018 at 18:13

Sagar Jethva's user avatar

AcceptPendingException Unchecked exception thrown when an attempt is made to initiate an accept
operation on a channel and a previous accept operation has not completed. 

AccessControlException

This exception is thrown by the AccessController to indicate
that a requested access (to a critical system resource such as the
file system or the network) is denied. 

AlreadyBoundException Unchecked exception thrown when an attempt is made to bind the socket a
network oriented channel that is already bound. 

AlreadyConnectedException Unchecked exception thrown when an attempt is made to connect a SocketChannel that is already connected. 

ArrayIndexOutOfBoundsException Thrown to indicate that an array has been accessed with an illegal index. 

AuthenticationRequiredException Specialization of SecurityException that is thrown when authentication is needed from the
end user before viewing the content. 

BackendBusyException Indicates a transient error that prevented a key operation from being created. 

BackgroundServiceStartNotAllowedException Exception thrown when an app tries to start a background Service when it’s not allowed to
do so. 

BadParcelableException Exception thrown when a Parcelable is malformed or otherwise invalid. 

CancellationException Exception indicating that the result of a value-producing task,
such as a FutureTask, cannot be retrieved because the task
was cancelled. 

CancelledKeyException Unchecked exception thrown when an attempt is made to use
a selection key that is no longer valid. 

ClosedDirectoryStreamException Unchecked exception thrown when an attempt is made to invoke an operation on
a directory stream that is closed. 

ClosedFileSystemException Unchecked exception thrown when an attempt is made to invoke an operation on
a file and the file system is closed. 

ClosedSelectorException Unchecked exception thrown when an attempt is made to invoke an I/O
operation upon a closed selector. 

ClosedWatchServiceException Unchecked exception thrown when an attempt is made to invoke an operation on
a watch service that is closed. 

ConnectionPendingException Unchecked exception thrown when an attempt is made to connect a SocketChannel for which a non-blocking connection operation is already in
progress. 

CursorIndexOutOfBoundsException An exception indicating that a cursor is out of bounds. 

DateTimeParseException An exception thrown when an error occurs during parsing. 

DirectoryIteratorException Runtime exception thrown if an I/O error is encountered when iterating over
the entries in a directory. 

DuplicateFormatFlagsException Unchecked exception thrown when duplicate flags are provided in the format
specifier. 

ForegroundServiceStartNotAllowedException Exception thrown when an app tries to start a foreground Service when it’s not allowed to
do so. 

ForegroundServiceTypeException Base exception thrown when an app tries to start a foreground Service
without a valid type. 

FormatFlagsConversionMismatchException Unchecked exception thrown when a conversion and flag are incompatible. 

FormatterClosedException Unchecked exception thrown when the formatter has been closed. 

Fragment.InstantiationException
This class was deprecated
in API level 28.
Use Fragment.InstantiationException
 

IllegalBlockingModeException Unchecked exception thrown when a blocking-mode-specific operation
is invoked upon a channel in the incorrect blocking mode. 

IllegalChannelGroupException Unchecked exception thrown when an attempt is made to open a channel
in a group that was not created by the same provider. 

IllegalCharsetNameException Unchecked exception thrown when a string that is not a
legal charset name is used as such. 

IllegalFormatCodePointException Unchecked exception thrown when a character with an invalid Unicode code
point as defined by Character#isValidCodePoint is passed to the
Formatter

IllegalFormatConversionException Unchecked exception thrown when the argument corresponding to the format
specifier is of an incompatible type. 

IllegalFormatException Unchecked exception thrown when a format string contains an illegal syntax
or a format specifier that is incompatible with the given arguments. 

IllegalFormatFlagsException Unchecked exception thrown when an illegal combination flags is given. 

IllegalFormatPrecisionException Unchecked exception thrown when the precision is a negative value other than
-1, the conversion does not support a precision, or the value is
otherwise unsupported. 

IllegalFormatWidthException Unchecked exception thrown when the format width is a negative value other
than -1 or is otherwise unsupported. 

IllegalSelectorException Unchecked exception thrown when an attempt is made to register a channel
with a selector that was not created by the provider that created the
channel. 

IllegalThreadStateException Thrown to indicate that a thread is not in an appropriate state
for the requested operation. 

InputMismatchException Thrown by a Scanner to indicate that the token
retrieved does not match the pattern for the expected type, or
that the token is out of range for the expected type. 

InvalidForegroundServiceTypeException Exception thrown when an app tries to start a foreground Service with an invalid type. 

InvalidMarkException Unchecked exception thrown when an attempt is made to reset a buffer
when its mark is not defined. 

InvalidParameterException This exception, designed for use by the JCA/JCE engine classes,
is thrown when an invalid parameter is passed
to a method. 

InvalidPathException Unchecked exception thrown when path string cannot be converted into a
Path because the path string contains invalid characters, or
the path string is invalid for other file system specific reasons. 

KeyCharacterMap.UnavailableException Thrown by KeyCharacterMap#load when a key character map could not be loaded. 

LimitExceededException Indicates that the app has exceeded a limit set by the System. 

MediaCasStateException Base class for MediaCas runtime exceptions 

MediaCodec.CodecException Thrown when an internal codec error occurs. 

MediaDrm.MediaDrmStateException Thrown when a general failure occurs during a MediaDrm operation. 

MediaDrmResetException This exception is thrown when the MediaDrm instance has become unusable
due to a restart of the mediaserver process. 

MissingForegroundServiceTypeException Exception thrown when an app tries to start a foreground Service without a type. 

MissingFormatArgumentException Unchecked exception thrown when there is a format specifier which does not
have a corresponding argument or if an argument index refers to an argument
that does not exist. 

MissingFormatWidthException Unchecked exception thrown when the format width is required. 

NoConnectionPendingException Unchecked exception thrown when the finishConnect method of a SocketChannel is invoked without first
successfully invoking its connect method. 

NonReadableChannelException Unchecked exception thrown when an attempt is made to read
from a channel that was not originally opened for reading. 

NonWritableChannelException Unchecked exception thrown when an attempt is made to write
to a channel that was not originally opened for writing. 

NotYetBoundException Unchecked exception thrown when an attempt is made to invoke an I/O
operation upon a server socket channel that is not yet bound. 

NotYetConnectedException Unchecked exception thrown when an attempt is made to invoke an I/O
operation upon a socket channel that is not yet connected. 

NumberFormatException Thrown to indicate that the application has attempted to convert
a string to one of the numeric types, but that the string does not
have the appropriate format. 

OverlappingFileLockException Unchecked exception thrown when an attempt is made to acquire a lock on a
region of a file that overlaps a region already locked by the same Java
virtual machine, or when another thread is already waiting to lock an
overlapping region of the same file. 

PatternSyntaxException Unchecked exception thrown to indicate a syntax error in a
regular-expression pattern. 

ProviderMismatchException Unchecked exception thrown when an attempt is made to invoke a method on an
object created by one file system provider with a parameter created by a
different file system provider. 

RSDriverException
This class was deprecated
in API level 31.
Renderscript has been deprecated in API level 31. Please refer to the migration
guide for the proposed alternatives.
 

RSIllegalArgumentException
This class was deprecated
in API level 31.
Renderscript has been deprecated in API level 31. Please refer to the migration
guide for the proposed alternatives.
 

RSInvalidStateException
This class was deprecated
in API level 31.
Renderscript has been deprecated in API level 31. Please refer to the migration
guide for the proposed alternatives.
 

ReadOnlyBufferException Unchecked exception thrown when a content-mutation method such as
put or compact is invoked upon a read-only buffer. 

ReadOnlyFileSystemException Unchecked exception thrown when an attempt is made to update an object
associated with a read-only FileSystem

ReadPendingException Unchecked exception thrown when an attempt is made to read from an
asynchronous socket channel and a previous read has not completed. 

ReceiverCallNotAllowedException This exception is thrown from Context#registerReceiver and
Context#bindService when these methods are being used from
an BroadcastReceiver component. 

RecoverableSecurityException Specialization of SecurityException that contains additional
information about how to involve the end user to recover from the exception. 

SQLiteAbortException An exception that indicates that the SQLite program was aborted. 

SQLiteAccessPermException This exception class is used when sqlite can’t access the database file
due to lack of permissions on the file. 

SQLiteBindOrColumnIndexOutOfRangeException Thrown if the the bind or column parameter index is out of range 

SQLiteBlobTooBigException  

SQLiteCantOpenDatabaseException  

SQLiteConstraintException An exception that indicates that an integrity constraint was violated. 

SQLiteDatabaseCorruptException An exception that indicates that the SQLite database file is corrupt. 

SQLiteDatabaseLockedException Thrown if the database engine was unable to acquire the
database locks it needs to do its job. 

SQLiteDatatypeMismatchException  

SQLiteDiskIOException An exception that indicates that an IO error occured while accessing the
SQLite database file. 

SQLiteDoneException An exception that indicates that the SQLite program is done. 

SQLiteException A SQLite exception that indicates there was an error with SQL parsing or execution. 

SQLiteFullException An exception that indicates that the SQLite database is full. 

SQLiteMisuseException This error can occur if the application creates a SQLiteStatement object and allows multiple
threads in the application use it at the same time. 

SQLiteOutOfMemoryException  

SQLiteReadOnlyDatabaseException  

SQLiteTableLockedException  

SecureKeyImportUnavailableException Indicates that the Keystore does not support securely importing wrapped keys. 

ServiceStartNotAllowedException Exception thrown when an app tries to start a Service when it’s not allowed to do so. 

ShutdownChannelGroupException Unchecked exception thrown when an attempt is made to construct a channel in
a group that is shutdown or the completion handler for an I/O operation
cannot be invoked because the channel group has terminated. 

StringIndexOutOfBoundsException Thrown by String methods to indicate that an index is either negative
or greater than the size of the string. 

StrongBoxUnavailableException Indicates that an operation could not be performed because the requested security hardware
is not available. 

SystemUpdatePolicy.ValidationFailedException An exception class that represents various validation errors thrown from
SystemUpdatePolicy#setFreezePeriods and
DevicePolicyManager#setSystemUpdatePolicy 

UnknownFormatConversionException Unchecked exception thrown when an unknown conversion is given. 

UnknownFormatFlagsException Unchecked exception thrown when an unknown flag is given. 

UnresolvedAddressException Unchecked exception thrown when an attempt is made to invoke a network
operation upon an unresolved socket address. 

UnsafeStateException Exception thrown when a DevicePolicyManager operation failed because it
was not safe to be executed at that moment. 

UnsupportedAddressTypeException Unchecked exception thrown when an attempt is made to bind or connect
to a socket address of a type that is not supported. 

UnsupportedCharsetException Unchecked exception thrown when no support is available
for a requested charset. 

UnsupportedTemporalTypeException UnsupportedTemporalTypeException indicates that a ChronoField or ChronoUnit is
not supported for a Temporal class. 

WritePendingException Unchecked exception thrown when an attempt is made to write to an
asynchronous socket channel and a previous write has not completed. 

ZoneRulesException Thrown to indicate a problem with time-zone configuration. 

Resolve Java.Lang.RuntimeException: Unable to Instantiate Activity ComponentInfo

Today, we will learn about another runtime exception that says Unable to instantiate activity ComponentInfo.

We will explore different possible reasons that result in java.lang.RuntimeException: Unable to instantiate activity ComponentInfo. Finally, we will have a solution to eradicate it.

Resolve the java.lang.RuntimeException: Unable to instantiate activity ComponentInfo Error

Example Code for Error Demonstration (MainActivity.java file):

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
  //write your remaining code here
}

Example Code (AndroidManifest.xml file):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.app">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.App"
        tools:targetApi="31">

        <activity
            android:name="MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

When we try to run this while launching an application in the android emulator, we get the error saying java.lang.RuntimeException: Unable to instantiate activity ComponentInfo.

There are a few possible causes that we must consider to resolve this. All of them are listed below.

  • Make sure that your Activity is added to the AndroidManifest.xml file. Why is it necessary?

    It is because whenever we want to make a new Activity, we must register in our AndroidManifest.xml file. Also, verify all the access modifiers.

  • We also get this error when we try to view before onCreate(), which is incorrect and results in an error stating unable to instantiate activity component info error.

  • Another reason for getting java.lang.RuntimeException: Unable to instantiate activity ComponentInfo is that we have added our Activity in AndroidManifest.xml, which is declared as abstract. In other words, we can say that the Activity we are trying to access is declared abstract.

  • Make sure that we are not missing a preceding dot before an activity path (this thing is causing an error in the example code given above).

  • We also have to face this error if we did not declare our MainActivity.java file as public. Also, check if your file is in the right package or not.

Now, we know all the possible reasons. How can we fix it?

See the following solution.

Example Code for Solution (MainActivity.java file):

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
  //write your remaining code here
}

Example Code (AndroidManifest.xml file):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.app">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.App"
        tools:targetApi="31">

        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

We have added a preceding dot before an activity path. We also confirm that our MainActivity.java file is declared as public, and we are not trying to access an Activity declared as abstract.

Be careful of all the points given as causes because those points are actual solutions if we consider them.

Ежикмой

0 / 0 / 0

Регистрация: 18.09.2016

Сообщений: 7

1

23.08.2018, 14:26. Показов 2747. Ответов 2

Метки android, camera (Все метки)


Подскажите почему у меня возникает ошибка на некоторых устройствах java.lang.RuntimeException: getParameters failed (empty parameters)?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import android.content.Context;
import android.hardware.Camera;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.WindowManager;
import android.widget.Toast;
 
import java.io.IOException;
 
public class CameraPreview extends SurfaceView implements
        Callback {
 
    private static final String TAG = "CameraPreview";
    SurfaceHolder mHolder;
    Camera mCamera;
    Context mContext;
 
    @SuppressWarnings("deprecation")
    public CameraPreview(Context context, Camera camera) {
        super(context);
        mContext = context;
        mCamera = camera;
        mHolder = getHolder();
        mHolder.addCallback(this);
 
        // deprecated setting, but required on Android versions prior to 3.0
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }
 
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
 
        if (mHolder.getSurface() == null)
            return;
 
        mCamera.stopPreview();
 
        setCameraDisplayOrientation();
 
        try {
            mCamera.setPreviewDisplay(mHolder);
            mCamera.startPreview();
        } catch (IOException e) {
            Toast.makeText(mContext, "Camera preview2 failed", Toast.LENGTH_LONG).show();
        }
    }
 
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        try {
            mCamera.setPreviewDisplay(holder);
            mCamera.startPreview();
        } catch (IOException e) {
            Toast.makeText(mContext, "Camera preview3 failed", Toast.LENGTH_LONG).show();
        }
    }
 
    public void setCameraDisplayOrientation()
    {
        if (mCamera == null)
            return;
 
 
        Camera.CameraInfo info = new Camera.CameraInfo();
        Camera.getCameraInfo(0, info);
        Camera.Parameters parameters = mCamera.getParameters();
 
        WindowManager winManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
        int rotation = winManager.getDefaultDisplay().getRotation();
 
        int degrees = 0;
 
        switch (rotation) {
            case Surface.ROTATION_0: degrees = 0; break;
            case Surface.ROTATION_90: degrees = 90; break;
            case Surface.ROTATION_180: degrees = 180; break;
            case Surface.ROTATION_270: degrees = 270; break;
        }
 
        int result;
        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT)
        {
            result = (info.orientation + degrees) % 360;
            result = (360 - result) % 360;  // + зеркало
        } else {
            result = (info.orientation - degrees + 360) % 360;
        }
 
        mCamera.setDisplayOrientation(result);
 
        int rotate = (degrees + 270) % 360;
        parameters.setRotation(rotate);
        mCamera.setParameters(parameters);
    }
 
 
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        //this.getHolder().removeCallback(this);
//        mCamera.stopPreview();
 
 
        // Surface will be destroyed when we return, so stop the preview.
        if (mCamera != null) {
            // Call stopPreview() to stop updating the preview surface.
            mCamera.stopPreview();
        }
 
    }
 
}

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



1560 / 1161 / 423

Регистрация: 08.05.2012

Сообщений: 5,207

23.08.2018, 16:44

2

Лучший ответ Сообщение было отмечено Ежикмой как решение

Решение

Потому, что камера недоступна или занята другим приложением.



0



Ежикмой

0 / 0 / 0

Регистрация: 18.09.2016

Сообщений: 7

23.08.2018, 17:11

 [ТС]

3

Полный текст ошибки

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
08-23 14:30:01.792 3716-3844/? E/CameraService: setCompanionDisableSysFs : cc.disable property set to 0
08-23 14:30:01.795 3716-3844/? E/SecCameraCoreManager: initialize1
08-23 14:30:01.795 3716-3844/? E/ExynosCamera: Build Date is (__DATE__) (__TIME__)
08-23 14:30:01.803 3716-3844/? E/SecCameraCoreManager: initialize2
08-23 14:30:01.878 3716-3716/? E/SecCameraCoreManager: checkTemperature (0)
08-23 14:30:01.888 3716-4891/? E/ExynosCameraBufferManager: [CAM_ID(0)][SCP_BUF]-ERR(m_alloc[1945]):m_reqBufCount(12)
08-23 14:30:02.259 3716-5047/? E/ExynosCameraNode: [CAM_ID(0)][3AA_OUTPUT]-ERR(m_dqBuf):exynos_v4l2_dqbuf(fd:72) fail (-1)
08-23 14:30:02.259 3716-5047/? E/ExynosCameraMCPipe: [CAM_ID(0)][PIPE_3AA]-ERR(m_getBuffer[1942]):node(3AA_OUTPUT)->getBuffer() fail, index(-2), frameCount(0), ret(-1)
08-23 14:30:02.259 3716-5047/? E/ExynosCameraNode: [CAM_ID(0)][SCP_PREVIEW]-ERR(m_polling):poll[74], pollRet(1) event(0x8), cnt(-1)
    [CAM_ID(0)][SCP_PREVIEW]-ERR(polling):m_polling fail
08-23 14:30:02.259 3716-5047/? E/ExynosCameraMCPipe: [CAM_ID(0)][PIPE_3AA]-ERR(m_checkPolling[3653]):polling fail, ret(-38)
    [CAM_ID(0)][PIPE_3AA]-ERR(m_getBuffer[2062]):m_checkPolling fail, frameCount(0), ret(-1001)
08-23 14:30:02.259 3716-5047/? E/ExynosCameraNode: [CAM_ID(0)][SCP_PREVIEW]-ERR(getBuffer[1004]):m_nodeState = [4] is not valid
08-23 14:30:02.259 3716-5047/? E/ExynosCameraMCPipe: [CAM_ID(0)][PIPE_3AA]-ERR(m_getBuffer[2074]):node(SCP_PREVIEW)->getBuffer() fail, index(-2), frameCount(0), ret(-38)
08-23 14:30:02.260 3716-5047/? E/ExynosCameraNode: [CAM_ID(0)][3AA_CAPTURE]-ERR(getBuffer[1004]):m_nodeState = [4] is not valid
08-23 14:30:02.260 3716-5047/? E/ExynosCameraMCPipe: [CAM_ID(0)][PIPE_3AA]-ERR(m_getBuffer[2074]):node(3AA_CAPTURE)->getBuffer() fail, index(-2), frameCount(0), ret(-38)
    [CAM_ID(0)][PIPE_3AA]-ERR(m_getBuffer[2196]):frameCount(0)                    : captureNodeCount == 0 || checkRet(-1) != NO_ERROR.                    so, setFrameState(FRAME_STATE_SKIPPED)
08-23 14:30:02.303 3716-3844/? E/SecCameraCoreManager: checkTemperature (0)
08-23 14:30:02.308 3716-5064/? E/ExynosCameraBufferManager: [CAM_ID(0)][SCP_BUF]-ERR(m_alloc[1945]):m_reqBufCount(12)
08-23 14:30:02.375 3716-3716/? E/CameraClient: attempt to use a camera after disconnect() (pid 4549)
08-23 14:30:02.385 3716-4557/? E/CameraClient: attempt to use a camera after disconnect() (pid 4549)
08-23 14:30:02.386 3716-3716/? E/CameraClient: attempt to use a camera after disconnect() (pid 4549)
08-23 14:30:02.512 3716-5134/? E/ExynosCamera: [CAM_ID(0)][]-ERR(m_frameFactoryInitThreadFunc[2624]):wait and pop fail, ret(-110)
08-23 14:30:02.560 4549-4549/com.yauheni.kebab E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.yauheni.kebab, PID: 4549
    java.lang.RuntimeException: getParameters failed (empty parameters)
        at android.hardware.Camera.native_getParameters(Native Method)
        at android.hardware.Camera.getParameters(Camera.java:1952)
        at com.yauheni.kebab.camera.CameraPreview.setCameraDisplayOrientation(CameraPreview.java:71)
        at com.yauheni.kebab.camera.CameraPreview.surfaceChanged(CameraPreview.java:43)
        at android.view.SurfaceView.updateWindow(SurfaceView.java:668)
        at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:172)
        at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1013)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2542)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1537)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:959)
        at android.view.Choreographer.doCallbacks(Choreographer.java:734)
        at android.view.Choreographer.doFrame(Choreographer.java:670)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:945)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6776)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)



0



Привет, Хабр! Представляю вашему вниманию перевод статьи Fixing 7 Common Java Exception Handling Mistakes автора Thorben Janssen.

Обработка исключения является одной из наиболее распространенных, но не обязательно одной из самых простых задач. Это все еще одна из часто обсуждаемых тем в опытных командах, и есть несколько передовых методов и распространенных ошибок, о которых вы должны знать.

Вот несколько вещей, которые следует избегать при обработке исключений в вашем приложении.

Ошибка 1: объявление java.lang.Exception или java.lang.Throwable

Как вы уже знаете, вам нужно либо объявить, либо обработать проверяемое исключение. Но проверяемые исключения — это не единственные, которые вы можете указать. Вы можете использовать любой подкласс java.lang.Throwable в предложении throws. Таким образом, вместо указания двух разных исключений, которые выбрасывает следующий фрагмент кода, вы можете просто использовать исключение java.lang.Exception в предложении throws.

public void doNotSpecifyException() throws Exception {
doSomething();
}
public void doSomething() throws NumberFormatException, IllegalArgumentException {
// do something
}

Но это не значит, что вы должны это сделать. Указание Exeption или Throwable делает почти невозможным правильное обращение с ними при вызове вашего метода.Единственная информация, которую получает вызывающий вами метод, заключается в том, что что-то может пойти не так. Но вы не делитесь какой-либо информацией о каких-либо исключительных событиях, которые могут произойти. Вы скрываете эту информацию за обобщенными причинами выброса исключений.Становится еще хуже, когда ваше приложение меняется со временем. Выброс обобщенных исключений скрывает все изменения исключений, которые вызывающий должен ожидать и обрабатывать. Это может привести к нескольким непредвиденным ошибкам, которые необходимо найти в тестовом примере вместо ошибки компилятора.

Используйте конкретные классы

Гораздо лучше указать наиболее конкретные классы исключений, даже если вам приходится использовать несколько из них. Это сообщает вызывающему устройству, какие исключительные событий нужно обрабатывать. Это также позволяет вам обновить предложение throw, когда ваш метод выдает дополнительное исключение. Таким образом, ваши клиенты знают об изменениях и даже получают ошибку, если вы изменяете выбрасываемые исключения. Такое исключение намного проще найти и обработать, чем исключение, которое появляется только при запуске конкретного тестового примера.

public void specifySpecificExceptions() throws NumberFormatException, IllegalArgumentException {
doSomething();
}

Ошибка 2: перехват обобщенных исключений

Серьезность этой ошибки зависит от того, какой программный компонент вы реализуете, и где вы обнаруживаете исключение. Возможно, было бы хорошо поймать java.lang.Exception в основном методе вашего приложения Java SE. Но вы должны предпочесть поймать определенные исключения, если вы реализуете библиотеку или работаете над более глубокими слоями вашего приложения.

Это дает несколько преимуществ. Такой подход позволяет обрабатывать каждый класс исключений по-разному и не позволяет вам перехватывать исключения, которых вы не ожидали.

Но имейте в виду, что первый блок catch, который обрабатывает класс исключения или один из его супер-классов, поймает его. Поэтому сначала обязательно поймайте наиболее специфический класс. В противном случае ваши IDE покажут сообщение об ошибке или предупреждении о недостижимом блоке кода.

try {
doSomething();
} catch (NumberFormatException e) {
// handle the NumberFormatException
log.error(e);
} catch (IllegalArgumentException e) {
// handle the IllegalArgumentException
log.error(e);
}

Ошибка 3: Логирование и проброс исключений

Это одна из самых популярных ошибок при обработке исключений Java. Может показаться логичным регистрировать исключение там, где оно было брошено, а затем пробросить его вызывающему объекту, который может реализовать конкретную обработку для конкретного случая использования. Но вы не должны делать это по трем причинам:

1. У вас недостаточно информации о прецеденте, который хочет реализовать вызывающий объект вашего метода. Исключение может быть частью ожидаемого поведения и обрабатываться клиентом. В этом случае нет необходимости регистрировать его. Это добавит ложное сообщение об ошибке в файл журнала, который должен быть отфильтрован вашей операционной группой.

2. Сообщение журнала не предоставляет никакой информации, которая еще не является частью самого исключения. Его трассировка и трассировка стека должны содержать всю необходимую информацию об исключительном событии. Сообщение описывает это, а трассировка стека содержит подробную информацию о классе, методе и строке, в которой она произошла.

3. Вы можете регистрировать одно и то же исключение несколько раз, когда вы регистрируете его в каждом блоке catch, который его ловит. Это испортит статистику в вашем инструменте мониторинга и затрудняет чтение файла журнала для ваших операций и команды разработчиков.

Регистрируйте исключение там, где вы его обрабатываете

Таким образом, лучше всего регистрировать исключение тогда, когда вы его обрабатываете. Как в следующем фрагменте кода. Метод doSomething генерирует исключение. Метод doMore просто указывает его, потому что у разработчика недостаточно информации для его обработки. Затем он обрабатывается в методе doEvenMore, который также записывает сообщение журнала.

public void doEvenMore() {
try {
doMore();
} catch (NumberFormatException e) {
// handle the NumberFormatException
} catch (IllegalArgumentException e) {
// handle the IllegalArgumentException
}
}
public void doMore() throws NumberFormatException, IllegalArgumentException {
doSomething();
}
public void doSomething() throws NumberFormatException, IllegalArgumentException {
// do something
}

Ошибка 4: использование исключений для управления потоком

Использование исключений для управления потоком вашего приложения считается анти-шаблоном по двум основным причинам:

Они в основном работают как оператор Go To, потому что они отменяют выполнение блока кода и переходят к первому блоку catch, который обрабатывает исключение. Это делает код очень трудным для чтения.

Они не так эффективны, как общие структуры управления Java. Как видно из названия, вы должны использовать их только для исключительных событий, а JVM не оптимизирует их так же, как и другой код.Таким образом, лучше использовать правильные условия, чтобы разбить свои циклы или инструкции if-else, чтобы решить, какие блоки кода должны быть выполнены.

Ошибка 5: удалить причину возникновения исключения

Иногда вам может понадобиться обернуть одно исключение в другое. Возможно, ваша команда решила использовать специальное исключение для бизнеса с кодами ошибок и единой обработкой. Нет ничего плохого в этом подходе, если вы не устраните причину.

Когда вы создаете новое исключение, вы всегда должны устанавливать первоначальное исключение в качестве причины. В противном случае вы потеряете трассировку сообщения и стека, которые описывают исключительное событие, вызвавшее ваше исключение. Класс Exception и все его подклассы предоставляют несколько методов-конструкторов, которые принимают исходное исключение в качестве параметра и задают его как причину.

try {
doSomething();
} catch (NumberFormatException e) {
throw new MyBusinessException(e, ErrorCode.CONFIGURATION_ERROR);
} catch (IllegalArgumentException e) {
throw new MyBusinessException(e, ErrorCode.UNEXPECTED);
}

Ошибка 6: Обобщение исключений

Когда вы обобщаете исключение, вы ловите конкретный, например, NumberFormatException, и вместо этого генерируете неспецифическое java.lang.Exception. Это похоже, но даже хуже, чем первая ошибка, которую я описал в этой статье. Он не только скрывает информацию о конкретном случае ошибки на вашем API, но также затрудняет доступ.

public void doNotGeneralizeException() throws Exception {
try {
doSomething();
} catch (NumberFormatException e) {
throw new Exception(e);
} catch (IllegalArgumentException e) {
throw new Exception(e);
}
}

Как вы можете видеть в следующем фрагменте кода, даже если вы знаете, какие исключения может вызвать метод, вы не можете просто их поймать. Вам нужно поймать общий класс Exception и затем проверить тип его причины. Этот код не только громоздкий для реализации, но его также трудно читать. Становится еще хуже, если вы сочетаете этот подход с ошибкой 5. Это удаляет всю информацию об исключительном событии.

try {
doNotGeneralizeException();
} catch (Exception e) {
if (e.getCause() instanceof NumberFormatException) {
log.error("NumberFormatException: " + e);
} else if (e.getCause() instanceof IllegalArgumentException) {
log.error("IllegalArgumentException: " + e);
} else {
log.error("Unexpected exception: " + e);
}
}

Итак, какой подход лучший?

Будьте конкретны и сохраняйте причину возникновения исключения.

Исключения, которые вы бросаете, должны всегда быть максимально конкретными. И если вы оборачиваете исключение, вы также должны установить исходный исключение в качестве причины, чтобы не потерять трассировку стека и другую информацию, описывающую исключительное событие.

try {
doSomething();
} catch (NumberFormatException e) {
throw new MyBusinessException(e, ErrorCode.CONFIGURATION_ERROR);
} catch (IllegalArgumentException e) {
throw new MyBusinessException(e, ErrorCode.UNEXPECTED);
}

Ошибка 7: добавление ненужных преобразований исключений

Как я уже объяснял ранее, может быть полезно обернуть исключения в пользовательские, если вы установите исходное исключение в качестве причины. Но некоторые архитекторы переусердствуют и вводят специальный класс исключений для каждого архитектурного уровня. Таким образом, они улавливают исключение в уровне персистентности и переносят его в MyPersistenceException. Бизнес-уровень ловит и обертывает его в MyBusinessException, и это продолжается до тех пор, пока оно не достигнет уровня API или не будет обработано.

public void persistCustomer(Customer c) throws MyPersistenceException {
// persist a Customer
}
public void manageCustomer(Customer c) throws MyBusinessException {
// manage a Customer
try {
persistCustomer(c);
} catch (MyPersistenceException e) {
throw new MyBusinessException(e, e.getCode()); 
}
}
public void createCustomer(Customer c) throws MyApiException {
// create a Customer
try {
manageCustomer(c);
} catch (MyBusinessException e) {
throw new MyApiException(e, e.getCode()); 
}
}

Легко видеть, что эти дополнительные классы исключений не дают никаких преимуществ. Они просто вводят дополнительные слои, которые оборачивают исключение. И хотя было бы забавно обернуть подарок во множестве красочной бумаги, это не очень хороший подход к разработке программного обеспечения.

Обязательно добавьте информацию

Просто подумайте о коде, который должен обрабатывать исключение или о самом себе, когда вам нужно найти проблему, вызвавшую исключение. Сначала вам нужно прорваться через несколько уровней исключений, чтобы найти исходную причину. И до сегодняшнего дня я никогда не видел приложение, которое использовало этот подход, и добавляло полезную информацию с каждым слоем исключения. Они либо обобщают сообщение об ошибке и код, либо предоставляют избыточную информацию.

Поэтому будьте осторожны с количеством настраиваемых классов исключений, которые вы вводите. Вы всегда должны спрашивать себя, дает ли новый класс исключений дополнительную информацию или другие преимущества. В большинстве случаев для достижения этого вам не требуется более одного уровня пользовательских исключений.

public void persistCustomer(Customer c) {
// persist a Customer
}
public void manageCustomer(Customer c) throws MyBusinessException {
// manage a Customer
throw new MyBusinessException(e, e.getCode()); 
}
public void createCustomer(Customer c) throws MyBusinessException {
// create a Customer
manageCustomer(c);
}

в настоящее время я работаю над включением/выключением фонарика. Я получаю эту ошибку java.lang.RuntimeException: Fail to connect to camera service Я не знаю, почему эта ошибка возникает. Я ссылался на многие решения, но моя проблема все еще не была решена. Когда фонарик включен, ошибка не возникает, но когда фонарик выключен, то возникает ошибка.

Код Основной Код.

мое явное разрешение:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus"/>

12 ответов


попробуйте это…

 static Camera camera = null;

объявить его сверху.

 try{ 
   if(clickOn == true) {
       clickOn = false;
       camera = Camera.open();
       Parameters parameters = camera.getParameters();
       parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
       camera.setParameters(parameters);
       camera.startPreview();

       remoteViews.setViewVisibility(R.id.button1, View.GONE);
       remoteViews.setViewVisibility(R.id.button2, View.VISIBLE);
       localAppWidgetManager.updateAppWidget(componentName, remoteViews);
   } else {
       clickOn = true;
       camera.stopPreview();
       camera.release();
       camera = null;

       remoteViews.setViewVisibility(R.id.button1, View.VISIBLE);
       remoteViews.setViewVisibility(R.id.button2, View.GONE);
       localAppWidgetManager.updateAppWidget(componentName, remoteViews);
   }    
} catch(Exception e) {
   Log.e("Error", ""+e);
}

У меня была та же проблема, что ни один из ответов здесь не решен, поэтому после ее решения я добавляю свой способ ее решения. Это относится к новым версиям android, которые поддерживают настройку разрешений для каждого приложения (начиная с Marshmallow, 6.0). Разрешение для камеры может быть отключено и должно быть включено в настройках приложения.
Настройки — > Приложения — > [Ваше Приложение] — > Разрешения

подробнее об этом здесь: http://developer.android.com/training/permissions/requesting.html


Я также видел эту ошибку:

java.ленг.RuntimeException: не удается подключиться к службе камеры

экспериментируя с фонариком. Оказывается, я был немного небрежен с моими разрешениями и скопировал их в тело блока приложения в манифесте.XML-файл. Поэтому вам действительно нужно подчиняться синтаксису, как описано в:

http://developer.android.com/guide/topics/manifest/manifest-element.html

в противном случае приложение не будет работать с сбоем подключения службы на камере.открытый призыв. Это должно выглядеть так, основываясь на ваших разрешениях в вопросе:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus"/>

<application

убедитесь, что ваши разрешения и список функций содержатся только в разделе манифеста, а не похоронены в разделе приложения!


эта проблема может возникнуть в Android 6.0 если вы не включили разрешение камеры для вашего приложения. Начиная с Android 6.0 вы можете обрабатывать разрешение приложения Погода вы дадите или не конкретное разрешение для приложения.

Итак, вам нужно включить разрешение settings->apps->your_app->enable camera permission если он еще не включен.


Если ваша версия ОС 6.0 или более поздней версии попробуйте это, надеюсь, это поможет.

public class RequestUserPermission {

private Activity activity;
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.CAMERA
};

public RequestUserPermission(Activity activity) {
    this.activity = activity;
}

public  void verifyStoragePermissions() {
    // Check if we have write permission
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) {
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}
}


**//CALL FROM YOUR ACTIVITY**
 RequestUserPermission requestUserPermission = new RequestUserPermission(this);
    requestUserPermission.verifyStoragePermissions();

если вы попытаетесь открыть камеру с помощью cameraID, который не существует, вы получите ту же ошибку (java.ленг.RuntimeException: не удается подключиться к службе камеры)

посмотреть код в этом блоке

camera.setParameters(parameters);
camera.stopPreview();
camera.release();
camera = null;

вызов release() чтобы освободить камеры для использования другими приложениями. Приложения должны немедленно освободить камеру в onPause() (и повторно открыть () его в onResume().

в приведенном выше коде сразу после выпуска вы помещаете null в камера


2

автор: Bharadwaja Bapatla


простой ответ, который я могу найти на эту проблему, заключается в том, что я не просил разрешения камеры для пользователя, и поэтому по умолчанию разрешение камеры не было доступно для моего приложения на устройствах Marshmallow. Я просто добавил проверку разрешений для камеры перед запуском камеры, и все работает нормально.


попробуйте использовать эту строку, когда вы выходите из приложения:

System.exit(0);

Я только что получил код приложения фонарик откуда-то. Он использовал System.exit(0) закрыть приложение. Я убрал его, зная, что это не лучшая практика. Затем я начал получать эти ошибки. Я попробовал решение принятого ответа, но затем я начал получать некоторые другие ошибки. Поэтому, вместо того, чтобы решать их, я просто положил это System.exit(0) линия спины. И он начал работать нормально. Я знаю, что это не очень хороший способ, но для небольшого приложения для фонарика вы можете попробовать это быстрое решение.


Если весь ваш код в порядке, вы должны проверить, есть ли какое-либо другое приложение с помощью камеры. Затем вы должны закрыть другое приложение, которое в настоящее время использует вашу камеру.


вам нужно stopPreview() и release() Как только вы вернулись с камеры,
так что другое приложение может получить к нему доступ. Сделайте класс» Camera » статическим и назовите его null на onPause(). Это решает мою проблему.

попробуйте:

 public class CameraPhotoCapture extends Activity{
    static Camera mcamera = null;
    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        if (mcamera != null) {
            mcamera.stopPreview();
            mcamera.release();
            mcamera = null;
            Log.d(DEBUG_TAG, "releaseCamera -- done");
        }
        super.onPause();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        if (mcamera != null) {

            Camera.open();
            Log.d(DEBUG_TAG, "openCamera -- done");
        }
        super.onResume();
    }
}

в моем Android peoject имеет ту же проблему. Это моя ошибка Logcat


03-29 19:26:04.194 224-608/? V / EmulatedCamera_BaseCamera:
getCameraInfo 03-29 19:26: 04.196 224-224/? I / CameraService:
CameraService:: подключение вызова (PID -1 «com.proitzen.staffapp», ID камеры
1) для версии по умолчанию HAL и версии API камеры 1 03-29 19: 26:04.196
224-224/? W / ServiceManager: ошибка разрешения:
андроид.разрешение.Камера от uid=10067 pid=1776 03-29 19: 26: 04.196
224-224/? E / CameraService: отказ в разрешении: невозможно использовать камеру
pid=1776, uid=10067 03-29 19:26:04.196 1776-1776/com.proitzen.staffapp
W / CameraBase: произошла ошибка при подключении к камере 1: сервис
недоступно 03-29 19: 26: 04.200 1776-1776 / com.proitzen.staffapp
D / AndroidRuntime: завершение работы VM


никакие вышеуказанные решения не работали для меня. Мое приложение для android работало на физических устройствах android и давало вышеуказанную ошибку только в Как Genymotion.

решение: запустите эмулятор Genumotion
Настройки — > приложения — — — > выберите приложение — > разрешения — > включить камеру и микрофон и хранение.


Понравилась статья? Поделить с друзьями:
  • Java lang runtimeexception keypair generation error
  • Java lang runtimeexception error initializing quantumrenderer no suitable pipeline found
  • Java lang runtimeexception an error occurred while executing doinbackground at android os asynctask
  • Java lang reflect invocationtargetexception ошибка причина
  • Java lang reflect invocationtargetexception null как исправить