How to properly debug Java (Android) using Eclipse? - java

I am having problems with debugging my code. One of my AsyncTasks throws a RuntimeException, but I don't know which line in my code is responsible for this. Since I am new to Eclipse and Java in general, all of this is rather confusing to me.
Eclipse's debugging window shows me that my AsyncTask has been suspended because of a RuntimeException. Below that, there are three lines which point out certain lines of code. However, those lines do not exist in my code which is why I do not know what causes my application to crash. Am I missing something essential about debugging in Java / Android?
These are the three lines which I am given, by the way:
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1086
ThreadPoolExecutor$Worker.run() line: 561
Thread.run() line: 1096
How am I supposed to work with that? Help would be greatly appreciated.

in the ddms you can get the message related to the error, warning or other type of messages into the logcat window if you can't able to find the logcat in the ddms then go to the menu Window->Show View->logcat click on that and you'll be able to see the message now in the same ddms you also get the device window from that select the device for you can able to debug or get the message from that device into the logcat.
now check this way you can find your error detail into this logcat details

You're best using the logcat - this will show the stacktrace and the error raised. I've never had great success stepping through the code in DDMS but with the errrors shown in the logcat it's normally pretty easy to work out why the error was raised.
See Pratik's answer for opening the logcat if it isn't visible within Eclipse.

Rajeev got it right - when you set a breakpoint on an exception, the debugger will break on the line that throws it, not the line that catches it. In this way, you can see what is causing the exception.

Related

My app is freezing when I use a recylcerview [duplicate]

I am developing an application, and everytime I run it, I get the message:
Unfortunately, MyApp has stopped.
What can I do to solve this?
About this question - obviously inspired by What is a stack trace, and how can I use it to debug my application errors?, there are lots of questions stating that their application has crashed, without any further detail. This question aims to instruct novice Android programmers on how to try and fix their problems themselves, or ask the right questions.
This answer describes the process of retrieving the stack trace. Already have the stack trace? Read up on stack traces in "What is a stack trace, and how can I use it to debug my application errors?"
The Problem
Your application quit because an uncaught RuntimeException was thrown.
The most common of these is the NullPointerException.
How to solve it?
Every time an Android application crashes (or any Java application for that matter), a Stack trace is written to the console (in this case, logcat). This stack trace contains vital information for solving your problem.
Android Studio
In the bottom bar of the window, click on the Logcat button. Alternatively, you can press alt+6. Make sure your emulator or device is selected in the Devices panel. Next, try to find the stack trace, which is shown in red. There may be a lot of stuff logged into logcat, so you may need to scroll a bit. An easy way to find the stack trace is to clear the logcat (using the recycle bin on the right), and let the app crash again.
I have found the stack trace, now what?
Yay! You're halfway to solving your problem.
You only need to find out what exactly made your application crash, by analyzing the stack trace.
Read up on stack traces in "What is a stack trace, and how can I use it to debug my application errors?"
I still can't solve my problem!
If you've found your Exception and the line where it occurred, and still cannot figure out how to fix it, don't hesitate to ask a question on StackOverflow.
Try to be as concise as possible: post the stack trace, and the relevant code (e.g. a few lines up to the line which threw the Exception).
You can use Google's ADB tool to get Logcat file to analyze the issue.
adb logcat > logcat.txt
open logcat.txt file and search for your application name. There should be information on why it failed, the line number, Class name, etc.
First, you check which point your app has crashed (Unfortunately, MyApp has stopped.). For this, you can use Log.e("TAG", "Message");, using this line you can see your app log in logcat.
After that, you find which point your app has stopped it's very easy to solve at your side.
Just check the error in log cat.
You get the log cat option from in eclipse:
window->show view->others->Android->Logcat
Log cat contains error.
Other wise you can also check the error by executing an application in debug mode.
Firstly set breakpoint after that by doing:
right click on project->debug as->Android application
Note: This answer is using Android Studio 2.2.2
Note 2: I am considering that your device is successfully connected.
The first thing you do when your application crashes is looking into the LogCat, at the bottom of Android Studio there's a toolbar with a list of menus:
Click on the "Android Monitor" (The one I underlined in the image above. ^)
Now, you'll get something like this:
Change "Verbose" to "Error" Now it will only show you logged errors. Don't worry about all these errors (if you got them) now.
Ok. Now, do what you did to crash your app. After your app crashes, go to your logcat. You should find a new crash log that has a lot of at:x.x.x: and Caused by: TrumpIsPresidentException for example. Go to that Caused by: statement in your logcat.
Next to that Caused By:, there should be the Exception that happened. In my case, it's a RuntimeException and under it there should be a line that contains a blue link such as:
If that Caused by: DOESN'T have a line with a blue text somewhere under it, then look for another Caused by: that does.
Click on that blue link. It should take you to where the problem occurred. In my case, it was due to this line:
throw new RuntimeException();
So, now I know why it's crashing. It's because I'm throwing the exception myself. This was an obvious error.
However, let's say I got another error:
java.lang.NullPointerException
I checked my logcat, I clicked on the blue link it gave me, and it took me here:
mTextView.setText(myString);
So, now I want to debug. According to this StackOverflow question, a NullPointerException says that something is null.
So, let's find out what is null. There are two possibilities. Either mTextView is null, or myString is null. To find out, before the mTextView.setText(mString) line, I add these two lines:
Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);
Now, like we did previously (We changed Verose to Error), we want to change "Error" to "Debug". Since we're logging by debugging. Here are all the Log methods:
Log.
d means Debug
e means error
w means warning
v means verbose
i means information
wtf means "What a terrible failure". This is similar to Log.e
So, since we used Log.d, we're checking in Debug. That's why we changed it to debug.
Notice Log.d has a first parameter,in our case "AppDebug". Click on the "No Filters" drop down menu on the top-right of the logcat. Select "Edit Filter Configuration", give a name to your filter, and in "Log Tag" put "App Debug". Click "OK". Now, you should see two lines in the logcat:
yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false
So now we know that mTextView is null.
I observe my code, now I notice something.
I have private TextView mTextView declared at the top of my class. But, I'm not defining it.
Basically, I forgot to do this in my onCreate():
mTextView = (TextView) findViewById(R.id.textview_id_in_xml);
So THAT'S why mTextView is null, because I forgot to tell my app what it is. So I add that line, run my app, and now the app doesn't crash.
This popup shows only when you get a fatal exception in your code which stops the execution of the app. It could be any exception NullPointerException, OutOfMemoryException etc.
Best way to check is through Logcat if you are still developing the app in Android studio which is quick way to read stack trace and check the cause of the app.
If your app is already live, then you can not use logcat. So, for that you can implement Crashlytics to provide you bug reports of any exception that occurs.
Check your Logcat message and see your Manifest file. There should be something missing like defining the Activity,User permission`, etc.
You can use any of these tools:
adb logcat
adb logcat > logs.txt (you can use editors to open and search errors.)
eclipse logcat (If not visible in eclipse, Go to Windows->Show View->Others->Android->LogCat)
Android Debug Monitor or Android Device Monitor(type command monitor or open through UI)
Android Studio
I suggest to use Android Debug Monitor, it is good. Because eclipse hangs when too many logs are there, and through adb logcat filter and all difficult.
You have to check the Stack trace
How to do that?
on Your IDE Check the windows form LOGCAT
If you cant see the logcat windows go to this path and open it
window->show view->others->Android->Logcat
if you are using Google-Api go to this path
adb logcat > logcat.txt
In below showToast() method you have to pass another parameter for context or application context by doing so you can try it.
public void showToast(String error, Context applicationContext){
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)
findViewById(R.id.toast_root));
TextView text = (TextView) findViewById(R.id.toast_error);
text.setText(error);
Toast toast = new Toast(applicationContext);
toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(view);
toast.show();
}
Let me share a basic Logcat analysis for when you meet a Force Close (when the app stops working).
DOCS
The basic tool from Android to collect/analyze logs is the logcat.
HERE is the Android's page about logcat
If you use android Studio, you can also check this LINK.
Capturing
Basically, you can MANUALLY capture logcat with the following command (or just check AndroidMonitor window in AndroidStudio):
adb logcat
There's a lot of parameters you can add to the command which helps you to filter and display the message that you want... This is personal... I always use the command below to get the message timestamp:
adb logcat -v time
You can redirect the output to a file and analyze it in a Text Editor.
Analyzing
If you app is Crashing, you'll get something like:
07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.khan.abc, PID: 21144
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
at android.view.View.performClick(View.java:4848)
at android.view.View$PerformClick.run(View.java:20262)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5631)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9
This part of the log shows you a lot of information:
When the issue happened: 07-09 08:29:13.475
It is important to check when the issue happened... You may find several errors in a log... you must be sure that you are checking the proper messages :)
Which app crashed: com.example.khan.abc
This way, you know which app crashed (to be sure that you are checking the logs about your message)
Which ERROR: java.lang.NullPointerException
A NULL Pointer Exception error
Detailed info about the error: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
You tried to call method onBackPressed() from a FragmentActivity object. However, that object was null when you did it.
Stack Trace: Stack Trace shows you the method invocation order... Sometimes, the error happens in the calling method (and not in the called method).
at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
Error happened in file com.example.khan.abc.AudioFragment.java, inside onClick() method at line: 125 (stacktrace shows the line that error happened)
It was called by:
at android.view.View.performClick(View.java:4848)
Which was called by:
at android.view.View$PerformClick.run(View.java:20262)
which was called by:
at android.os.Handler.handleCallback(Handler.java:815)
etc....
Overview
This was just an overview... Not all logs are simple but the error gives specific problem and verbose shows up all problem ... It is just to share the idea and provide entry-level information to you...
I hope I could help you someway...
Regards
Use the LogCat and try to find what is causing the app to crash.
To see Logcat if you use Android Studio then Press ALT + 6
or
if you use Eclipse then
Window -> Open Perspective -> Other - LogCat
Go to the LogCat, from the drop down menu select error. This will contain all the required information to help you debug. If that doesn't help, post the LogCat as an edit to your question and somebody will help you out.
If your app for some reason crashes without good stacktrace. Try debug it from first line, and go line by line until crash. Then you will have answer, which line is causing you trouble. Proably you could then wrapp it into try catch block and print error output.
You can also get this error message on its own, without any stack trace or any further error message.
In this case you need to make sure your Android manifest is configured correctly (including any manifest merging happening from a library and any activity that would come from a library), and pay particular attention to the first activity displayed in your application in your manifest files.
People make mistakes, and so coding as well.
When ever any error happened, always check with the logcat with the text in red color however u can find out the real problem in blue color text with underline in those red color text.
Make sure if u create a new activity, always declare the activity in the AndroidManifest file.
If adding Permission, declare it in the AndroidMainifest file as well.
Logcat - To check the logs in the development phase of Android Studio
Initially clear the Logcat and let the app crash again so you can get only crashed log detail. You have to check the Stack trace
While, Unfortunately, MyApp has stopped. There are many reasons for it. You can check same in logs. For this, you can use the Log.e("TAG","Message");
Common error during app crash like:
Coding mistake(Wrong use of keywords).
Mismatch property name.
Unsupported plugin(maybe).
Mismatch version(maybe).
Activity missing in AndroidManifest file.
Permission missing in AndroidManifest file.
Most common NullPointerException.
Declared but not defined.
To resolve app crash error:
Keep in mind above points and go through it.
With the error, you will get the file name also in blue colour (click on them and jump to code from error is occurring).
Crash during development
Try my favourite tool logview to get the logs and analyze them during development.
Make sure to mark ./logview and ./lib/logview.jar as executable when running in Linux.
If you don't like it, there're a lot of alternative desktop log viewers for Android.
Crash in the wild
Integrate a real-time crash reporting tool such as Firebase Crashlytics in order to get stacktraces of unhandled exceptions which occurred on users' devices.
Read How to Release a Buggy App (And Live to Tell the Tale) to know more about handling bugs in the field.
If you don't have any kind of interesting log in your terminal (or they are not directly related to your app), maybe your problem is due to a native library. In that case, you should check for the "tombstone" files within your terminal.
The default location for the tombstone files depends on every device, but if that's the case, you will have a log telling: Tombstone written to: /data/tombstones/tombstone_06
For more information, check on https://source.android.com/devices/tech/debug.
First, you need to check where and why your app has been crashed (Unfortunately, MyApp has stopped.). With the help of LOG, you can figure it out what went wrong.
After that, you find which point your app has stopped fix that from your point.
Also running this command in terminal can help find the problem:
gradlew build > log.txt 2>details.txt
then you should go to gradlew file location in read two above log files.
I'll Suggest something like this.
Check if your phone has good enough space that the app can run----prior/
Check the logcat when the app crashes. It will show the exact line where the app crashed.
Check if you are using something on the main thread that uses a lot of memory due to ANR.
Check your Logcat message. Also, see your Manifest file for missing elements like defining the Activity, User permission, etc.
To see Logcat if you use Android Studio then Press alt+6
or
if you use Eclipse then
Window -> Open Perspective -> Other - LogCat
Now, from the drop-down menu select error.
Alternatively, you can use ADB tool to get the Logcat file to analyze the issue.
adb logcat > logcat.txt
Now open the logcat.txt file and search for your application name. There should be information on why it failed, the line number, Class name, etc.
If your app crashed without any errors, and you didn't use an asset manager but loaded the textures like:
Texture texture = new Texture("myImage.png"); //dont to this all the time
then that's the problem. I had that happen to me. You should always use an asset manager to avoid a memory overload.

android studio for each loop causing crash with uncaught exeption [duplicate]

I am developing an application, and everytime I run it, I get the message:
Unfortunately, MyApp has stopped.
What can I do to solve this?
About this question - obviously inspired by What is a stack trace, and how can I use it to debug my application errors?, there are lots of questions stating that their application has crashed, without any further detail. This question aims to instruct novice Android programmers on how to try and fix their problems themselves, or ask the right questions.
This answer describes the process of retrieving the stack trace. Already have the stack trace? Read up on stack traces in "What is a stack trace, and how can I use it to debug my application errors?"
The Problem
Your application quit because an uncaught RuntimeException was thrown.
The most common of these is the NullPointerException.
How to solve it?
Every time an Android application crashes (or any Java application for that matter), a Stack trace is written to the console (in this case, logcat). This stack trace contains vital information for solving your problem.
Android Studio
In the bottom bar of the window, click on the Logcat button. Alternatively, you can press alt+6. Make sure your emulator or device is selected in the Devices panel. Next, try to find the stack trace, which is shown in red. There may be a lot of stuff logged into logcat, so you may need to scroll a bit. An easy way to find the stack trace is to clear the logcat (using the recycle bin on the right), and let the app crash again.
I have found the stack trace, now what?
Yay! You're halfway to solving your problem.
You only need to find out what exactly made your application crash, by analyzing the stack trace.
Read up on stack traces in "What is a stack trace, and how can I use it to debug my application errors?"
I still can't solve my problem!
If you've found your Exception and the line where it occurred, and still cannot figure out how to fix it, don't hesitate to ask a question on StackOverflow.
Try to be as concise as possible: post the stack trace, and the relevant code (e.g. a few lines up to the line which threw the Exception).
You can use Google's ADB tool to get Logcat file to analyze the issue.
adb logcat > logcat.txt
open logcat.txt file and search for your application name. There should be information on why it failed, the line number, Class name, etc.
First, you check which point your app has crashed (Unfortunately, MyApp has stopped.). For this, you can use Log.e("TAG", "Message");, using this line you can see your app log in logcat.
After that, you find which point your app has stopped it's very easy to solve at your side.
Just check the error in log cat.
You get the log cat option from in eclipse:
window->show view->others->Android->Logcat
Log cat contains error.
Other wise you can also check the error by executing an application in debug mode.
Firstly set breakpoint after that by doing:
right click on project->debug as->Android application
Note: This answer is using Android Studio 2.2.2
Note 2: I am considering that your device is successfully connected.
The first thing you do when your application crashes is looking into the LogCat, at the bottom of Android Studio there's a toolbar with a list of menus:
Click on the "Android Monitor" (The one I underlined in the image above. ^)
Now, you'll get something like this:
Change "Verbose" to "Error" Now it will only show you logged errors. Don't worry about all these errors (if you got them) now.
Ok. Now, do what you did to crash your app. After your app crashes, go to your logcat. You should find a new crash log that has a lot of at:x.x.x: and Caused by: TrumpIsPresidentException for example. Go to that Caused by: statement in your logcat.
Next to that Caused By:, there should be the Exception that happened. In my case, it's a RuntimeException and under it there should be a line that contains a blue link such as:
If that Caused by: DOESN'T have a line with a blue text somewhere under it, then look for another Caused by: that does.
Click on that blue link. It should take you to where the problem occurred. In my case, it was due to this line:
throw new RuntimeException();
So, now I know why it's crashing. It's because I'm throwing the exception myself. This was an obvious error.
However, let's say I got another error:
java.lang.NullPointerException
I checked my logcat, I clicked on the blue link it gave me, and it took me here:
mTextView.setText(myString);
So, now I want to debug. According to this StackOverflow question, a NullPointerException says that something is null.
So, let's find out what is null. There are two possibilities. Either mTextView is null, or myString is null. To find out, before the mTextView.setText(mString) line, I add these two lines:
Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);
Now, like we did previously (We changed Verose to Error), we want to change "Error" to "Debug". Since we're logging by debugging. Here are all the Log methods:
Log.
d means Debug
e means error
w means warning
v means verbose
i means information
wtf means "What a terrible failure". This is similar to Log.e
So, since we used Log.d, we're checking in Debug. That's why we changed it to debug.
Notice Log.d has a first parameter,in our case "AppDebug". Click on the "No Filters" drop down menu on the top-right of the logcat. Select "Edit Filter Configuration", give a name to your filter, and in "Log Tag" put "App Debug". Click "OK". Now, you should see two lines in the logcat:
yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false
So now we know that mTextView is null.
I observe my code, now I notice something.
I have private TextView mTextView declared at the top of my class. But, I'm not defining it.
Basically, I forgot to do this in my onCreate():
mTextView = (TextView) findViewById(R.id.textview_id_in_xml);
So THAT'S why mTextView is null, because I forgot to tell my app what it is. So I add that line, run my app, and now the app doesn't crash.
This popup shows only when you get a fatal exception in your code which stops the execution of the app. It could be any exception NullPointerException, OutOfMemoryException etc.
Best way to check is through Logcat if you are still developing the app in Android studio which is quick way to read stack trace and check the cause of the app.
If your app is already live, then you can not use logcat. So, for that you can implement Crashlytics to provide you bug reports of any exception that occurs.
Check your Logcat message and see your Manifest file. There should be something missing like defining the Activity,User permission`, etc.
You can use any of these tools:
adb logcat
adb logcat > logs.txt (you can use editors to open and search errors.)
eclipse logcat (If not visible in eclipse, Go to Windows->Show View->Others->Android->LogCat)
Android Debug Monitor or Android Device Monitor(type command monitor or open through UI)
Android Studio
I suggest to use Android Debug Monitor, it is good. Because eclipse hangs when too many logs are there, and through adb logcat filter and all difficult.
You have to check the Stack trace
How to do that?
on Your IDE Check the windows form LOGCAT
If you cant see the logcat windows go to this path and open it
window->show view->others->Android->Logcat
if you are using Google-Api go to this path
adb logcat > logcat.txt
In below showToast() method you have to pass another parameter for context or application context by doing so you can try it.
public void showToast(String error, Context applicationContext){
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)
findViewById(R.id.toast_root));
TextView text = (TextView) findViewById(R.id.toast_error);
text.setText(error);
Toast toast = new Toast(applicationContext);
toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(view);
toast.show();
}
Let me share a basic Logcat analysis for when you meet a Force Close (when the app stops working).
DOCS
The basic tool from Android to collect/analyze logs is the logcat.
HERE is the Android's page about logcat
If you use android Studio, you can also check this LINK.
Capturing
Basically, you can MANUALLY capture logcat with the following command (or just check AndroidMonitor window in AndroidStudio):
adb logcat
There's a lot of parameters you can add to the command which helps you to filter and display the message that you want... This is personal... I always use the command below to get the message timestamp:
adb logcat -v time
You can redirect the output to a file and analyze it in a Text Editor.
Analyzing
If you app is Crashing, you'll get something like:
07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.khan.abc, PID: 21144
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
at android.view.View.performClick(View.java:4848)
at android.view.View$PerformClick.run(View.java:20262)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5631)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9
This part of the log shows you a lot of information:
When the issue happened: 07-09 08:29:13.475
It is important to check when the issue happened... You may find several errors in a log... you must be sure that you are checking the proper messages :)
Which app crashed: com.example.khan.abc
This way, you know which app crashed (to be sure that you are checking the logs about your message)
Which ERROR: java.lang.NullPointerException
A NULL Pointer Exception error
Detailed info about the error: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
You tried to call method onBackPressed() from a FragmentActivity object. However, that object was null when you did it.
Stack Trace: Stack Trace shows you the method invocation order... Sometimes, the error happens in the calling method (and not in the called method).
at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
Error happened in file com.example.khan.abc.AudioFragment.java, inside onClick() method at line: 125 (stacktrace shows the line that error happened)
It was called by:
at android.view.View.performClick(View.java:4848)
Which was called by:
at android.view.View$PerformClick.run(View.java:20262)
which was called by:
at android.os.Handler.handleCallback(Handler.java:815)
etc....
Overview
This was just an overview... Not all logs are simple but the error gives specific problem and verbose shows up all problem ... It is just to share the idea and provide entry-level information to you...
I hope I could help you someway...
Regards
Use the LogCat and try to find what is causing the app to crash.
To see Logcat if you use Android Studio then Press ALT + 6
or
if you use Eclipse then
Window -> Open Perspective -> Other - LogCat
Go to the LogCat, from the drop down menu select error. This will contain all the required information to help you debug. If that doesn't help, post the LogCat as an edit to your question and somebody will help you out.
If your app for some reason crashes without good stacktrace. Try debug it from first line, and go line by line until crash. Then you will have answer, which line is causing you trouble. Proably you could then wrapp it into try catch block and print error output.
You can also get this error message on its own, without any stack trace or any further error message.
In this case you need to make sure your Android manifest is configured correctly (including any manifest merging happening from a library and any activity that would come from a library), and pay particular attention to the first activity displayed in your application in your manifest files.
People make mistakes, and so coding as well.
When ever any error happened, always check with the logcat with the text in red color however u can find out the real problem in blue color text with underline in those red color text.
Make sure if u create a new activity, always declare the activity in the AndroidManifest file.
If adding Permission, declare it in the AndroidMainifest file as well.
Logcat - To check the logs in the development phase of Android Studio
Initially clear the Logcat and let the app crash again so you can get only crashed log detail. You have to check the Stack trace
While, Unfortunately, MyApp has stopped. There are many reasons for it. You can check same in logs. For this, you can use the Log.e("TAG","Message");
Common error during app crash like:
Coding mistake(Wrong use of keywords).
Mismatch property name.
Unsupported plugin(maybe).
Mismatch version(maybe).
Activity missing in AndroidManifest file.
Permission missing in AndroidManifest file.
Most common NullPointerException.
Declared but not defined.
To resolve app crash error:
Keep in mind above points and go through it.
With the error, you will get the file name also in blue colour (click on them and jump to code from error is occurring).
Crash during development
Try my favourite tool logview to get the logs and analyze them during development.
Make sure to mark ./logview and ./lib/logview.jar as executable when running in Linux.
If you don't like it, there're a lot of alternative desktop log viewers for Android.
Crash in the wild
Integrate a real-time crash reporting tool such as Firebase Crashlytics in order to get stacktraces of unhandled exceptions which occurred on users' devices.
Read How to Release a Buggy App (And Live to Tell the Tale) to know more about handling bugs in the field.
If you don't have any kind of interesting log in your terminal (or they are not directly related to your app), maybe your problem is due to a native library. In that case, you should check for the "tombstone" files within your terminal.
The default location for the tombstone files depends on every device, but if that's the case, you will have a log telling: Tombstone written to: /data/tombstones/tombstone_06
For more information, check on https://source.android.com/devices/tech/debug.
First, you need to check where and why your app has been crashed (Unfortunately, MyApp has stopped.). With the help of LOG, you can figure it out what went wrong.
After that, you find which point your app has stopped fix that from your point.
Also running this command in terminal can help find the problem:
gradlew build > log.txt 2>details.txt
then you should go to gradlew file location in read two above log files.
I'll Suggest something like this.
Check if your phone has good enough space that the app can run----prior/
Check the logcat when the app crashes. It will show the exact line where the app crashed.
Check if you are using something on the main thread that uses a lot of memory due to ANR.
Check your Logcat message. Also, see your Manifest file for missing elements like defining the Activity, User permission, etc.
To see Logcat if you use Android Studio then Press alt+6
or
if you use Eclipse then
Window -> Open Perspective -> Other - LogCat
Now, from the drop-down menu select error.
Alternatively, you can use ADB tool to get the Logcat file to analyze the issue.
adb logcat > logcat.txt
Now open the logcat.txt file and search for your application name. There should be information on why it failed, the line number, Class name, etc.
If your app crashed without any errors, and you didn't use an asset manager but loaded the textures like:
Texture texture = new Texture("myImage.png"); //dont to this all the time
then that's the problem. I had that happen to me. You should always use an asset manager to avoid a memory overload.

Login/SIgn up - Unable to solve [duplicate]

I am developing an application, and everytime I run it, I get the message:
Unfortunately, MyApp has stopped.
What can I do to solve this?
About this question - obviously inspired by What is a stack trace, and how can I use it to debug my application errors?, there are lots of questions stating that their application has crashed, without any further detail. This question aims to instruct novice Android programmers on how to try and fix their problems themselves, or ask the right questions.
This answer describes the process of retrieving the stack trace. Already have the stack trace? Read up on stack traces in "What is a stack trace, and how can I use it to debug my application errors?"
The Problem
Your application quit because an uncaught RuntimeException was thrown.
The most common of these is the NullPointerException.
How to solve it?
Every time an Android application crashes (or any Java application for that matter), a Stack trace is written to the console (in this case, logcat). This stack trace contains vital information for solving your problem.
Android Studio
In the bottom bar of the window, click on the Logcat button. Alternatively, you can press alt+6. Make sure your emulator or device is selected in the Devices panel. Next, try to find the stack trace, which is shown in red. There may be a lot of stuff logged into logcat, so you may need to scroll a bit. An easy way to find the stack trace is to clear the logcat (using the recycle bin on the right), and let the app crash again.
I have found the stack trace, now what?
Yay! You're halfway to solving your problem.
You only need to find out what exactly made your application crash, by analyzing the stack trace.
Read up on stack traces in "What is a stack trace, and how can I use it to debug my application errors?"
I still can't solve my problem!
If you've found your Exception and the line where it occurred, and still cannot figure out how to fix it, don't hesitate to ask a question on StackOverflow.
Try to be as concise as possible: post the stack trace, and the relevant code (e.g. a few lines up to the line which threw the Exception).
You can use Google's ADB tool to get Logcat file to analyze the issue.
adb logcat > logcat.txt
open logcat.txt file and search for your application name. There should be information on why it failed, the line number, Class name, etc.
First, you check which point your app has crashed (Unfortunately, MyApp has stopped.). For this, you can use Log.e("TAG", "Message");, using this line you can see your app log in logcat.
After that, you find which point your app has stopped it's very easy to solve at your side.
Just check the error in log cat.
You get the log cat option from in eclipse:
window->show view->others->Android->Logcat
Log cat contains error.
Other wise you can also check the error by executing an application in debug mode.
Firstly set breakpoint after that by doing:
right click on project->debug as->Android application
Note: This answer is using Android Studio 2.2.2
Note 2: I am considering that your device is successfully connected.
The first thing you do when your application crashes is looking into the LogCat, at the bottom of Android Studio there's a toolbar with a list of menus:
Click on the "Android Monitor" (The one I underlined in the image above. ^)
Now, you'll get something like this:
Change "Verbose" to "Error" Now it will only show you logged errors. Don't worry about all these errors (if you got them) now.
Ok. Now, do what you did to crash your app. After your app crashes, go to your logcat. You should find a new crash log that has a lot of at:x.x.x: and Caused by: TrumpIsPresidentException for example. Go to that Caused by: statement in your logcat.
Next to that Caused By:, there should be the Exception that happened. In my case, it's a RuntimeException and under it there should be a line that contains a blue link such as:
If that Caused by: DOESN'T have a line with a blue text somewhere under it, then look for another Caused by: that does.
Click on that blue link. It should take you to where the problem occurred. In my case, it was due to this line:
throw new RuntimeException();
So, now I know why it's crashing. It's because I'm throwing the exception myself. This was an obvious error.
However, let's say I got another error:
java.lang.NullPointerException
I checked my logcat, I clicked on the blue link it gave me, and it took me here:
mTextView.setText(myString);
So, now I want to debug. According to this StackOverflow question, a NullPointerException says that something is null.
So, let's find out what is null. There are two possibilities. Either mTextView is null, or myString is null. To find out, before the mTextView.setText(mString) line, I add these two lines:
Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);
Now, like we did previously (We changed Verose to Error), we want to change "Error" to "Debug". Since we're logging by debugging. Here are all the Log methods:
Log.
d means Debug
e means error
w means warning
v means verbose
i means information
wtf means "What a terrible failure". This is similar to Log.e
So, since we used Log.d, we're checking in Debug. That's why we changed it to debug.
Notice Log.d has a first parameter,in our case "AppDebug". Click on the "No Filters" drop down menu on the top-right of the logcat. Select "Edit Filter Configuration", give a name to your filter, and in "Log Tag" put "App Debug". Click "OK". Now, you should see two lines in the logcat:
yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false
So now we know that mTextView is null.
I observe my code, now I notice something.
I have private TextView mTextView declared at the top of my class. But, I'm not defining it.
Basically, I forgot to do this in my onCreate():
mTextView = (TextView) findViewById(R.id.textview_id_in_xml);
So THAT'S why mTextView is null, because I forgot to tell my app what it is. So I add that line, run my app, and now the app doesn't crash.
This popup shows only when you get a fatal exception in your code which stops the execution of the app. It could be any exception NullPointerException, OutOfMemoryException etc.
Best way to check is through Logcat if you are still developing the app in Android studio which is quick way to read stack trace and check the cause of the app.
If your app is already live, then you can not use logcat. So, for that you can implement Crashlytics to provide you bug reports of any exception that occurs.
Check your Logcat message and see your Manifest file. There should be something missing like defining the Activity,User permission`, etc.
You can use any of these tools:
adb logcat
adb logcat > logs.txt (you can use editors to open and search errors.)
eclipse logcat (If not visible in eclipse, Go to Windows->Show View->Others->Android->LogCat)
Android Debug Monitor or Android Device Monitor(type command monitor or open through UI)
Android Studio
I suggest to use Android Debug Monitor, it is good. Because eclipse hangs when too many logs are there, and through adb logcat filter and all difficult.
You have to check the Stack trace
How to do that?
on Your IDE Check the windows form LOGCAT
If you cant see the logcat windows go to this path and open it
window->show view->others->Android->Logcat
if you are using Google-Api go to this path
adb logcat > logcat.txt
In below showToast() method you have to pass another parameter for context or application context by doing so you can try it.
public void showToast(String error, Context applicationContext){
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)
findViewById(R.id.toast_root));
TextView text = (TextView) findViewById(R.id.toast_error);
text.setText(error);
Toast toast = new Toast(applicationContext);
toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(view);
toast.show();
}
Let me share a basic Logcat analysis for when you meet a Force Close (when the app stops working).
DOCS
The basic tool from Android to collect/analyze logs is the logcat.
HERE is the Android's page about logcat
If you use android Studio, you can also check this LINK.
Capturing
Basically, you can MANUALLY capture logcat with the following command (or just check AndroidMonitor window in AndroidStudio):
adb logcat
There's a lot of parameters you can add to the command which helps you to filter and display the message that you want... This is personal... I always use the command below to get the message timestamp:
adb logcat -v time
You can redirect the output to a file and analyze it in a Text Editor.
Analyzing
If you app is Crashing, you'll get something like:
07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.khan.abc, PID: 21144
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
at android.view.View.performClick(View.java:4848)
at android.view.View$PerformClick.run(View.java:20262)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5631)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9
This part of the log shows you a lot of information:
When the issue happened: 07-09 08:29:13.475
It is important to check when the issue happened... You may find several errors in a log... you must be sure that you are checking the proper messages :)
Which app crashed: com.example.khan.abc
This way, you know which app crashed (to be sure that you are checking the logs about your message)
Which ERROR: java.lang.NullPointerException
A NULL Pointer Exception error
Detailed info about the error: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
You tried to call method onBackPressed() from a FragmentActivity object. However, that object was null when you did it.
Stack Trace: Stack Trace shows you the method invocation order... Sometimes, the error happens in the calling method (and not in the called method).
at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
Error happened in file com.example.khan.abc.AudioFragment.java, inside onClick() method at line: 125 (stacktrace shows the line that error happened)
It was called by:
at android.view.View.performClick(View.java:4848)
Which was called by:
at android.view.View$PerformClick.run(View.java:20262)
which was called by:
at android.os.Handler.handleCallback(Handler.java:815)
etc....
Overview
This was just an overview... Not all logs are simple but the error gives specific problem and verbose shows up all problem ... It is just to share the idea and provide entry-level information to you...
I hope I could help you someway...
Regards
Use the LogCat and try to find what is causing the app to crash.
To see Logcat if you use Android Studio then Press ALT + 6
or
if you use Eclipse then
Window -> Open Perspective -> Other - LogCat
Go to the LogCat, from the drop down menu select error. This will contain all the required information to help you debug. If that doesn't help, post the LogCat as an edit to your question and somebody will help you out.
If your app for some reason crashes without good stacktrace. Try debug it from first line, and go line by line until crash. Then you will have answer, which line is causing you trouble. Proably you could then wrapp it into try catch block and print error output.
You can also get this error message on its own, without any stack trace or any further error message.
In this case you need to make sure your Android manifest is configured correctly (including any manifest merging happening from a library and any activity that would come from a library), and pay particular attention to the first activity displayed in your application in your manifest files.
People make mistakes, and so coding as well.
When ever any error happened, always check with the logcat with the text in red color however u can find out the real problem in blue color text with underline in those red color text.
Make sure if u create a new activity, always declare the activity in the AndroidManifest file.
If adding Permission, declare it in the AndroidMainifest file as well.
Logcat - To check the logs in the development phase of Android Studio
Initially clear the Logcat and let the app crash again so you can get only crashed log detail. You have to check the Stack trace
While, Unfortunately, MyApp has stopped. There are many reasons for it. You can check same in logs. For this, you can use the Log.e("TAG","Message");
Common error during app crash like:
Coding mistake(Wrong use of keywords).
Mismatch property name.
Unsupported plugin(maybe).
Mismatch version(maybe).
Activity missing in AndroidManifest file.
Permission missing in AndroidManifest file.
Most common NullPointerException.
Declared but not defined.
To resolve app crash error:
Keep in mind above points and go through it.
With the error, you will get the file name also in blue colour (click on them and jump to code from error is occurring).
Crash during development
Try my favourite tool logview to get the logs and analyze them during development.
Make sure to mark ./logview and ./lib/logview.jar as executable when running in Linux.
If you don't like it, there're a lot of alternative desktop log viewers for Android.
Crash in the wild
Integrate a real-time crash reporting tool such as Firebase Crashlytics in order to get stacktraces of unhandled exceptions which occurred on users' devices.
Read How to Release a Buggy App (And Live to Tell the Tale) to know more about handling bugs in the field.
If you don't have any kind of interesting log in your terminal (or they are not directly related to your app), maybe your problem is due to a native library. In that case, you should check for the "tombstone" files within your terminal.
The default location for the tombstone files depends on every device, but if that's the case, you will have a log telling: Tombstone written to: /data/tombstones/tombstone_06
For more information, check on https://source.android.com/devices/tech/debug.
First, you need to check where and why your app has been crashed (Unfortunately, MyApp has stopped.). With the help of LOG, you can figure it out what went wrong.
After that, you find which point your app has stopped fix that from your point.
Also running this command in terminal can help find the problem:
gradlew build > log.txt 2>details.txt
then you should go to gradlew file location in read two above log files.
I'll Suggest something like this.
Check if your phone has good enough space that the app can run----prior/
Check the logcat when the app crashes. It will show the exact line where the app crashed.
Check if you are using something on the main thread that uses a lot of memory due to ANR.
Check your Logcat message. Also, see your Manifest file for missing elements like defining the Activity, User permission, etc.
To see Logcat if you use Android Studio then Press alt+6
or
if you use Eclipse then
Window -> Open Perspective -> Other - LogCat
Now, from the drop-down menu select error.
Alternatively, you can use ADB tool to get the Logcat file to analyze the issue.
adb logcat > logcat.txt
Now open the logcat.txt file and search for your application name. There should be information on why it failed, the line number, Class name, etc.
If your app crashed without any errors, and you didn't use an asset manager but loaded the textures like:
Texture texture = new Texture("myImage.png"); //dont to this all the time
then that's the problem. I had that happen to me. You should always use an asset manager to avoid a memory overload.

One function is not called? [duplicate]

I am developing an application, and everytime I run it, I get the message:
Unfortunately, MyApp has stopped.
What can I do to solve this?
About this question - obviously inspired by What is a stack trace, and how can I use it to debug my application errors?, there are lots of questions stating that their application has crashed, without any further detail. This question aims to instruct novice Android programmers on how to try and fix their problems themselves, or ask the right questions.
This answer describes the process of retrieving the stack trace. Already have the stack trace? Read up on stack traces in "What is a stack trace, and how can I use it to debug my application errors?"
The Problem
Your application quit because an uncaught RuntimeException was thrown.
The most common of these is the NullPointerException.
How to solve it?
Every time an Android application crashes (or any Java application for that matter), a Stack trace is written to the console (in this case, logcat). This stack trace contains vital information for solving your problem.
Android Studio
In the bottom bar of the window, click on the Logcat button. Alternatively, you can press alt+6. Make sure your emulator or device is selected in the Devices panel. Next, try to find the stack trace, which is shown in red. There may be a lot of stuff logged into logcat, so you may need to scroll a bit. An easy way to find the stack trace is to clear the logcat (using the recycle bin on the right), and let the app crash again.
I have found the stack trace, now what?
Yay! You're halfway to solving your problem.
You only need to find out what exactly made your application crash, by analyzing the stack trace.
Read up on stack traces in "What is a stack trace, and how can I use it to debug my application errors?"
I still can't solve my problem!
If you've found your Exception and the line where it occurred, and still cannot figure out how to fix it, don't hesitate to ask a question on StackOverflow.
Try to be as concise as possible: post the stack trace, and the relevant code (e.g. a few lines up to the line which threw the Exception).
You can use Google's ADB tool to get Logcat file to analyze the issue.
adb logcat > logcat.txt
open logcat.txt file and search for your application name. There should be information on why it failed, the line number, Class name, etc.
First, you check which point your app has crashed (Unfortunately, MyApp has stopped.). For this, you can use Log.e("TAG", "Message");, using this line you can see your app log in logcat.
After that, you find which point your app has stopped it's very easy to solve at your side.
Just check the error in log cat.
You get the log cat option from in eclipse:
window->show view->others->Android->Logcat
Log cat contains error.
Other wise you can also check the error by executing an application in debug mode.
Firstly set breakpoint after that by doing:
right click on project->debug as->Android application
Note: This answer is using Android Studio 2.2.2
Note 2: I am considering that your device is successfully connected.
The first thing you do when your application crashes is looking into the LogCat, at the bottom of Android Studio there's a toolbar with a list of menus:
Click on the "Android Monitor" (The one I underlined in the image above. ^)
Now, you'll get something like this:
Change "Verbose" to "Error" Now it will only show you logged errors. Don't worry about all these errors (if you got them) now.
Ok. Now, do what you did to crash your app. After your app crashes, go to your logcat. You should find a new crash log that has a lot of at:x.x.x: and Caused by: TrumpIsPresidentException for example. Go to that Caused by: statement in your logcat.
Next to that Caused By:, there should be the Exception that happened. In my case, it's a RuntimeException and under it there should be a line that contains a blue link such as:
If that Caused by: DOESN'T have a line with a blue text somewhere under it, then look for another Caused by: that does.
Click on that blue link. It should take you to where the problem occurred. In my case, it was due to this line:
throw new RuntimeException();
So, now I know why it's crashing. It's because I'm throwing the exception myself. This was an obvious error.
However, let's say I got another error:
java.lang.NullPointerException
I checked my logcat, I clicked on the blue link it gave me, and it took me here:
mTextView.setText(myString);
So, now I want to debug. According to this StackOverflow question, a NullPointerException says that something is null.
So, let's find out what is null. There are two possibilities. Either mTextView is null, or myString is null. To find out, before the mTextView.setText(mString) line, I add these two lines:
Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);
Now, like we did previously (We changed Verose to Error), we want to change "Error" to "Debug". Since we're logging by debugging. Here are all the Log methods:
Log.
d means Debug
e means error
w means warning
v means verbose
i means information
wtf means "What a terrible failure". This is similar to Log.e
So, since we used Log.d, we're checking in Debug. That's why we changed it to debug.
Notice Log.d has a first parameter,in our case "AppDebug". Click on the "No Filters" drop down menu on the top-right of the logcat. Select "Edit Filter Configuration", give a name to your filter, and in "Log Tag" put "App Debug". Click "OK". Now, you should see two lines in the logcat:
yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false
So now we know that mTextView is null.
I observe my code, now I notice something.
I have private TextView mTextView declared at the top of my class. But, I'm not defining it.
Basically, I forgot to do this in my onCreate():
mTextView = (TextView) findViewById(R.id.textview_id_in_xml);
So THAT'S why mTextView is null, because I forgot to tell my app what it is. So I add that line, run my app, and now the app doesn't crash.
This popup shows only when you get a fatal exception in your code which stops the execution of the app. It could be any exception NullPointerException, OutOfMemoryException etc.
Best way to check is through Logcat if you are still developing the app in Android studio which is quick way to read stack trace and check the cause of the app.
If your app is already live, then you can not use logcat. So, for that you can implement Crashlytics to provide you bug reports of any exception that occurs.
Check your Logcat message and see your Manifest file. There should be something missing like defining the Activity,User permission`, etc.
You can use any of these tools:
adb logcat
adb logcat > logs.txt (you can use editors to open and search errors.)
eclipse logcat (If not visible in eclipse, Go to Windows->Show View->Others->Android->LogCat)
Android Debug Monitor or Android Device Monitor(type command monitor or open through UI)
Android Studio
I suggest to use Android Debug Monitor, it is good. Because eclipse hangs when too many logs are there, and through adb logcat filter and all difficult.
You have to check the Stack trace
How to do that?
on Your IDE Check the windows form LOGCAT
If you cant see the logcat windows go to this path and open it
window->show view->others->Android->Logcat
if you are using Google-Api go to this path
adb logcat > logcat.txt
In below showToast() method you have to pass another parameter for context or application context by doing so you can try it.
public void showToast(String error, Context applicationContext){
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)
findViewById(R.id.toast_root));
TextView text = (TextView) findViewById(R.id.toast_error);
text.setText(error);
Toast toast = new Toast(applicationContext);
toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(view);
toast.show();
}
Let me share a basic Logcat analysis for when you meet a Force Close (when the app stops working).
DOCS
The basic tool from Android to collect/analyze logs is the logcat.
HERE is the Android's page about logcat
If you use android Studio, you can also check this LINK.
Capturing
Basically, you can MANUALLY capture logcat with the following command (or just check AndroidMonitor window in AndroidStudio):
adb logcat
There's a lot of parameters you can add to the command which helps you to filter and display the message that you want... This is personal... I always use the command below to get the message timestamp:
adb logcat -v time
You can redirect the output to a file and analyze it in a Text Editor.
Analyzing
If you app is Crashing, you'll get something like:
07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.khan.abc, PID: 21144
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
at android.view.View.performClick(View.java:4848)
at android.view.View$PerformClick.run(View.java:20262)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5631)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9
This part of the log shows you a lot of information:
When the issue happened: 07-09 08:29:13.475
It is important to check when the issue happened... You may find several errors in a log... you must be sure that you are checking the proper messages :)
Which app crashed: com.example.khan.abc
This way, you know which app crashed (to be sure that you are checking the logs about your message)
Which ERROR: java.lang.NullPointerException
A NULL Pointer Exception error
Detailed info about the error: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
You tried to call method onBackPressed() from a FragmentActivity object. However, that object was null when you did it.
Stack Trace: Stack Trace shows you the method invocation order... Sometimes, the error happens in the calling method (and not in the called method).
at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
Error happened in file com.example.khan.abc.AudioFragment.java, inside onClick() method at line: 125 (stacktrace shows the line that error happened)
It was called by:
at android.view.View.performClick(View.java:4848)
Which was called by:
at android.view.View$PerformClick.run(View.java:20262)
which was called by:
at android.os.Handler.handleCallback(Handler.java:815)
etc....
Overview
This was just an overview... Not all logs are simple but the error gives specific problem and verbose shows up all problem ... It is just to share the idea and provide entry-level information to you...
I hope I could help you someway...
Regards
Use the LogCat and try to find what is causing the app to crash.
To see Logcat if you use Android Studio then Press ALT + 6
or
if you use Eclipse then
Window -> Open Perspective -> Other - LogCat
Go to the LogCat, from the drop down menu select error. This will contain all the required information to help you debug. If that doesn't help, post the LogCat as an edit to your question and somebody will help you out.
If your app for some reason crashes without good stacktrace. Try debug it from first line, and go line by line until crash. Then you will have answer, which line is causing you trouble. Proably you could then wrapp it into try catch block and print error output.
You can also get this error message on its own, without any stack trace or any further error message.
In this case you need to make sure your Android manifest is configured correctly (including any manifest merging happening from a library and any activity that would come from a library), and pay particular attention to the first activity displayed in your application in your manifest files.
People make mistakes, and so coding as well.
When ever any error happened, always check with the logcat with the text in red color however u can find out the real problem in blue color text with underline in those red color text.
Make sure if u create a new activity, always declare the activity in the AndroidManifest file.
If adding Permission, declare it in the AndroidMainifest file as well.
Logcat - To check the logs in the development phase of Android Studio
Initially clear the Logcat and let the app crash again so you can get only crashed log detail. You have to check the Stack trace
While, Unfortunately, MyApp has stopped. There are many reasons for it. You can check same in logs. For this, you can use the Log.e("TAG","Message");
Common error during app crash like:
Coding mistake(Wrong use of keywords).
Mismatch property name.
Unsupported plugin(maybe).
Mismatch version(maybe).
Activity missing in AndroidManifest file.
Permission missing in AndroidManifest file.
Most common NullPointerException.
Declared but not defined.
To resolve app crash error:
Keep in mind above points and go through it.
With the error, you will get the file name also in blue colour (click on them and jump to code from error is occurring).
Crash during development
Try my favourite tool logview to get the logs and analyze them during development.
Make sure to mark ./logview and ./lib/logview.jar as executable when running in Linux.
If you don't like it, there're a lot of alternative desktop log viewers for Android.
Crash in the wild
Integrate a real-time crash reporting tool such as Firebase Crashlytics in order to get stacktraces of unhandled exceptions which occurred on users' devices.
Read How to Release a Buggy App (And Live to Tell the Tale) to know more about handling bugs in the field.
If you don't have any kind of interesting log in your terminal (or they are not directly related to your app), maybe your problem is due to a native library. In that case, you should check for the "tombstone" files within your terminal.
The default location for the tombstone files depends on every device, but if that's the case, you will have a log telling: Tombstone written to: /data/tombstones/tombstone_06
For more information, check on https://source.android.com/devices/tech/debug.
First, you need to check where and why your app has been crashed (Unfortunately, MyApp has stopped.). With the help of LOG, you can figure it out what went wrong.
After that, you find which point your app has stopped fix that from your point.
Also running this command in terminal can help find the problem:
gradlew build > log.txt 2>details.txt
then you should go to gradlew file location in read two above log files.
I'll Suggest something like this.
Check if your phone has good enough space that the app can run----prior/
Check the logcat when the app crashes. It will show the exact line where the app crashed.
Check if you are using something on the main thread that uses a lot of memory due to ANR.
Check your Logcat message. Also, see your Manifest file for missing elements like defining the Activity, User permission, etc.
To see Logcat if you use Android Studio then Press alt+6
or
if you use Eclipse then
Window -> Open Perspective -> Other - LogCat
Now, from the drop-down menu select error.
Alternatively, you can use ADB tool to get the Logcat file to analyze the issue.
adb logcat > logcat.txt
Now open the logcat.txt file and search for your application name. There should be information on why it failed, the line number, Class name, etc.
If your app crashed without any errors, and you didn't use an asset manager but loaded the textures like:
Texture texture = new Texture("myImage.png"); //dont to this all the time
then that's the problem. I had that happen to me. You should always use an asset manager to avoid a memory overload.

Unfortunately MyApp has stopped. How can I solve this?

I am developing an application, and everytime I run it, I get the message:
Unfortunately, MyApp has stopped.
What can I do to solve this?
About this question - obviously inspired by What is a stack trace, and how can I use it to debug my application errors?, there are lots of questions stating that their application has crashed, without any further detail. This question aims to instruct novice Android programmers on how to try and fix their problems themselves, or ask the right questions.
This answer describes the process of retrieving the stack trace. Already have the stack trace? Read up on stack traces in "What is a stack trace, and how can I use it to debug my application errors?"
The Problem
Your application quit because an uncaught RuntimeException was thrown.
The most common of these is the NullPointerException.
How to solve it?
Every time an Android application crashes (or any Java application for that matter), a Stack trace is written to the console (in this case, logcat). This stack trace contains vital information for solving your problem.
Android Studio
In the bottom bar of the window, click on the Logcat button. Alternatively, you can press alt+6. Make sure your emulator or device is selected in the Devices panel. Next, try to find the stack trace, which is shown in red. There may be a lot of stuff logged into logcat, so you may need to scroll a bit. An easy way to find the stack trace is to clear the logcat (using the recycle bin on the right), and let the app crash again.
I have found the stack trace, now what?
Yay! You're halfway to solving your problem.
You only need to find out what exactly made your application crash, by analyzing the stack trace.
Read up on stack traces in "What is a stack trace, and how can I use it to debug my application errors?"
I still can't solve my problem!
If you've found your Exception and the line where it occurred, and still cannot figure out how to fix it, don't hesitate to ask a question on StackOverflow.
Try to be as concise as possible: post the stack trace, and the relevant code (e.g. a few lines up to the line which threw the Exception).
You can use Google's ADB tool to get Logcat file to analyze the issue.
adb logcat > logcat.txt
open logcat.txt file and search for your application name. There should be information on why it failed, the line number, Class name, etc.
First, you check which point your app has crashed (Unfortunately, MyApp has stopped.). For this, you can use Log.e("TAG", "Message");, using this line you can see your app log in logcat.
After that, you find which point your app has stopped it's very easy to solve at your side.
Just check the error in log cat.
You get the log cat option from in eclipse:
window->show view->others->Android->Logcat
Log cat contains error.
Other wise you can also check the error by executing an application in debug mode.
Firstly set breakpoint after that by doing:
right click on project->debug as->Android application
Note: This answer is using Android Studio 2.2.2
Note 2: I am considering that your device is successfully connected.
The first thing you do when your application crashes is looking into the LogCat, at the bottom of Android Studio there's a toolbar with a list of menus:
Click on the "Android Monitor" (The one I underlined in the image above. ^)
Now, you'll get something like this:
Change "Verbose" to "Error" Now it will only show you logged errors. Don't worry about all these errors (if you got them) now.
Ok. Now, do what you did to crash your app. After your app crashes, go to your logcat. You should find a new crash log that has a lot of at:x.x.x: and Caused by: TrumpIsPresidentException for example. Go to that Caused by: statement in your logcat.
Next to that Caused By:, there should be the Exception that happened. In my case, it's a RuntimeException and under it there should be a line that contains a blue link such as:
If that Caused by: DOESN'T have a line with a blue text somewhere under it, then look for another Caused by: that does.
Click on that blue link. It should take you to where the problem occurred. In my case, it was due to this line:
throw new RuntimeException();
So, now I know why it's crashing. It's because I'm throwing the exception myself. This was an obvious error.
However, let's say I got another error:
java.lang.NullPointerException
I checked my logcat, I clicked on the blue link it gave me, and it took me here:
mTextView.setText(myString);
So, now I want to debug. According to this StackOverflow question, a NullPointerException says that something is null.
So, let's find out what is null. There are two possibilities. Either mTextView is null, or myString is null. To find out, before the mTextView.setText(mString) line, I add these two lines:
Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);
Now, like we did previously (We changed Verose to Error), we want to change "Error" to "Debug". Since we're logging by debugging. Here are all the Log methods:
Log.
d means Debug
e means error
w means warning
v means verbose
i means information
wtf means "What a terrible failure". This is similar to Log.e
So, since we used Log.d, we're checking in Debug. That's why we changed it to debug.
Notice Log.d has a first parameter,in our case "AppDebug". Click on the "No Filters" drop down menu on the top-right of the logcat. Select "Edit Filter Configuration", give a name to your filter, and in "Log Tag" put "App Debug". Click "OK". Now, you should see two lines in the logcat:
yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false
So now we know that mTextView is null.
I observe my code, now I notice something.
I have private TextView mTextView declared at the top of my class. But, I'm not defining it.
Basically, I forgot to do this in my onCreate():
mTextView = (TextView) findViewById(R.id.textview_id_in_xml);
So THAT'S why mTextView is null, because I forgot to tell my app what it is. So I add that line, run my app, and now the app doesn't crash.
This popup shows only when you get a fatal exception in your code which stops the execution of the app. It could be any exception NullPointerException, OutOfMemoryException etc.
Best way to check is through Logcat if you are still developing the app in Android studio which is quick way to read stack trace and check the cause of the app.
If your app is already live, then you can not use logcat. So, for that you can implement Crashlytics to provide you bug reports of any exception that occurs.
Check your Logcat message and see your Manifest file. There should be something missing like defining the Activity,User permission`, etc.
You can use any of these tools:
adb logcat
adb logcat > logs.txt (you can use editors to open and search errors.)
eclipse logcat (If not visible in eclipse, Go to Windows->Show View->Others->Android->LogCat)
Android Debug Monitor or Android Device Monitor(type command monitor or open through UI)
Android Studio
I suggest to use Android Debug Monitor, it is good. Because eclipse hangs when too many logs are there, and through adb logcat filter and all difficult.
You have to check the Stack trace
How to do that?
on Your IDE Check the windows form LOGCAT
If you cant see the logcat windows go to this path and open it
window->show view->others->Android->Logcat
if you are using Google-Api go to this path
adb logcat > logcat.txt
In below showToast() method you have to pass another parameter for context or application context by doing so you can try it.
public void showToast(String error, Context applicationContext){
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.custom_toast, (ViewGroup)
findViewById(R.id.toast_root));
TextView text = (TextView) findViewById(R.id.toast_error);
text.setText(error);
Toast toast = new Toast(applicationContext);
toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(view);
toast.show();
}
Let me share a basic Logcat analysis for when you meet a Force Close (when the app stops working).
DOCS
The basic tool from Android to collect/analyze logs is the logcat.
HERE is the Android's page about logcat
If you use android Studio, you can also check this LINK.
Capturing
Basically, you can MANUALLY capture logcat with the following command (or just check AndroidMonitor window in AndroidStudio):
adb logcat
There's a lot of parameters you can add to the command which helps you to filter and display the message that you want... This is personal... I always use the command below to get the message timestamp:
adb logcat -v time
You can redirect the output to a file and analyze it in a Text Editor.
Analyzing
If you app is Crashing, you'll get something like:
07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM
07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.khan.abc, PID: 21144
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
at android.view.View.performClick(View.java:4848)
at android.view.View$PerformClick.run(View.java:20262)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5631)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9
This part of the log shows you a lot of information:
When the issue happened: 07-09 08:29:13.475
It is important to check when the issue happened... You may find several errors in a log... you must be sure that you are checking the proper messages :)
Which app crashed: com.example.khan.abc
This way, you know which app crashed (to be sure that you are checking the logs about your message)
Which ERROR: java.lang.NullPointerException
A NULL Pointer Exception error
Detailed info about the error: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
You tried to call method onBackPressed() from a FragmentActivity object. However, that object was null when you did it.
Stack Trace: Stack Trace shows you the method invocation order... Sometimes, the error happens in the calling method (and not in the called method).
at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125)
Error happened in file com.example.khan.abc.AudioFragment.java, inside onClick() method at line: 125 (stacktrace shows the line that error happened)
It was called by:
at android.view.View.performClick(View.java:4848)
Which was called by:
at android.view.View$PerformClick.run(View.java:20262)
which was called by:
at android.os.Handler.handleCallback(Handler.java:815)
etc....
Overview
This was just an overview... Not all logs are simple but the error gives specific problem and verbose shows up all problem ... It is just to share the idea and provide entry-level information to you...
I hope I could help you someway...
Regards
Use the LogCat and try to find what is causing the app to crash.
To see Logcat if you use Android Studio then Press ALT + 6
or
if you use Eclipse then
Window -> Open Perspective -> Other - LogCat
Go to the LogCat, from the drop down menu select error. This will contain all the required information to help you debug. If that doesn't help, post the LogCat as an edit to your question and somebody will help you out.
If your app for some reason crashes without good stacktrace. Try debug it from first line, and go line by line until crash. Then you will have answer, which line is causing you trouble. Proably you could then wrapp it into try catch block and print error output.
You can also get this error message on its own, without any stack trace or any further error message.
In this case you need to make sure your Android manifest is configured correctly (including any manifest merging happening from a library and any activity that would come from a library), and pay particular attention to the first activity displayed in your application in your manifest files.
People make mistakes, and so coding as well.
When ever any error happened, always check with the logcat with the text in red color however u can find out the real problem in blue color text with underline in those red color text.
Make sure if u create a new activity, always declare the activity in the AndroidManifest file.
If adding Permission, declare it in the AndroidMainifest file as well.
Logcat - To check the logs in the development phase of Android Studio
Initially clear the Logcat and let the app crash again so you can get only crashed log detail. You have to check the Stack trace
While, Unfortunately, MyApp has stopped. There are many reasons for it. You can check same in logs. For this, you can use the Log.e("TAG","Message");
Common error during app crash like:
Coding mistake(Wrong use of keywords).
Mismatch property name.
Unsupported plugin(maybe).
Mismatch version(maybe).
Activity missing in AndroidManifest file.
Permission missing in AndroidManifest file.
Most common NullPointerException.
Declared but not defined.
To resolve app crash error:
Keep in mind above points and go through it.
With the error, you will get the file name also in blue colour (click on them and jump to code from error is occurring).
Crash during development
Try my favourite tool logview to get the logs and analyze them during development.
Make sure to mark ./logview and ./lib/logview.jar as executable when running in Linux.
If you don't like it, there're a lot of alternative desktop log viewers for Android.
Crash in the wild
Integrate a real-time crash reporting tool such as Firebase Crashlytics in order to get stacktraces of unhandled exceptions which occurred on users' devices.
Read How to Release a Buggy App (And Live to Tell the Tale) to know more about handling bugs in the field.
If you don't have any kind of interesting log in your terminal (or they are not directly related to your app), maybe your problem is due to a native library. In that case, you should check for the "tombstone" files within your terminal.
The default location for the tombstone files depends on every device, but if that's the case, you will have a log telling: Tombstone written to: /data/tombstones/tombstone_06
For more information, check on https://source.android.com/devices/tech/debug.
First, you need to check where and why your app has been crashed (Unfortunately, MyApp has stopped.). With the help of LOG, you can figure it out what went wrong.
After that, you find which point your app has stopped fix that from your point.
Also running this command in terminal can help find the problem:
gradlew build > log.txt 2>details.txt
then you should go to gradlew file location in read two above log files.
I'll Suggest something like this.
Check if your phone has good enough space that the app can run----prior/
Check the logcat when the app crashes. It will show the exact line where the app crashed.
Check if you are using something on the main thread that uses a lot of memory due to ANR.
Check your Logcat message. Also, see your Manifest file for missing elements like defining the Activity, User permission, etc.
To see Logcat if you use Android Studio then Press alt+6
or
if you use Eclipse then
Window -> Open Perspective -> Other - LogCat
Now, from the drop-down menu select error.
Alternatively, you can use ADB tool to get the Logcat file to analyze the issue.
adb logcat > logcat.txt
Now open the logcat.txt file and search for your application name. There should be information on why it failed, the line number, Class name, etc.
If your app crashed without any errors, and you didn't use an asset manager but loaded the textures like:
Texture texture = new Texture("myImage.png"); //dont to this all the time
then that's the problem. I had that happen to me. You should always use an asset manager to avoid a memory overload.

Categories

Resources