Reputation: 481
I want to check if activity is running from regular class (non-Activity) but the application is crashing and giving me NullPointerException
and i did set permission GET_TASKS
here is the LogCat output
01-05 13:38:38.703: E/AndroidRuntime(5595): FATAL EXCEPTION: main
01-05 13:38:38.703: E/AndroidRuntime(5595): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.evolution.betting.application/net.evolution.betting.application.InitActivity}: java.lang.NullPointerException
01-05 13:38:38.703: E/AndroidRuntime(5595): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
01-05 13:38:38.703: E/AndroidRuntime(5595): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
01-05 13:38:38.703: E/AndroidRuntime(5595): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-05 13:38:38.703: E/AndroidRuntime(5595): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-05 13:38:38.703: E/AndroidRuntime(5595): at android.os.Handler.dispatchMessage(Handler.java:99)
01-05 13:38:38.703: E/AndroidRuntime(5595): at android.os.Looper.loop(Looper.java:123)
01-05 13:38:38.703: E/AndroidRuntime(5595): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-05 13:38:38.703: E/AndroidRuntime(5595): at java.lang.reflect.Method.invokeNative(Native Method)
01-05 13:38:38.703: E/AndroidRuntime(5595): at java.lang.reflect.Method.invoke(Method.java:521)
01-05 13:38:38.703: E/AndroidRuntime(5595): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-05 13:38:38.703: E/AndroidRuntime(5595): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-05 13:38:38.703: E/AndroidRuntime(5595): at dalvik.system.NativeStart.main(Native Method)
01-05 13:38:38.703: E/AndroidRuntime(5595): Caused by: java.lang.NullPointerException
01-05 13:38:38.703: E/AndroidRuntime(5595): at net.evolution.betting.application.ConnectionChangeReceiver.checkIsNotationActive(ConnectionChangeReceiver.java:58)
01-05 13:38:38.703: E/AndroidRuntime(5595): at net.evolution.betting.application.ConnectionChangeReceiver.<init>(ConnectionChangeReceiver.java:20)
01-05 13:38:38.703: E/AndroidRuntime(5595): at net.evolution.betting.application.InitActivity.onCreate(InitActivity.java:30)
01-05 13:38:38.703: E/AndroidRuntime(5595): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-05 13:38:38.703: E/AndroidRuntime(5595): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
here is my source
public class ConnectionChangeReceiver extends BroadcastReceiver
{
Context c;
public ConnectionChangeReceiver(Context c){
checkIsNotationActive();
this.c = c;
}
@Override
public void onReceive( Context context, Intent intent )
{
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE );
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo( ConnectivityManager.TYPE_MOBILE );
if ( activeNetInfo != null && checkIsNotationActive() == true)
{
((NotationActivity)(context)).finish();
}else if( activeNetInfo == null){
Intent i = new Intent("net.evolution.betting.application.NOTATIONACTIVITY");
i.putExtra("DialogTitle", "Warining!");
i.putExtra("DialogBody", "It seems like your app is not connected to Internet witch is required.Please check your network connection.");
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
private boolean checkIsNotationActive(){
ActivityManager activityManager = (ActivityManager)c.getSystemService (Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> activitys = activityManager.getRunningTasks(Integer.MAX_VALUE);
boolean isActivityFound = false;
for (int i = 0; i < activitys.size(); i++) {
if (activitys.get(i).topActivity.toString().equalsIgnoreCase("ComponentInfo{net.evolution.betting.application/net.evolution.betting.application.NotationActivity}")) {
isActivityFound = true;
}
}
return isActivityFound;
}
}
Upvotes: 0
Views: 1001
Reputation: 132992
Change your code as because your c
Context instance is null
move your code inside onReceive
and use context for accessing System Service :
public class ConnectionChangeReceiver extends BroadcastReceiver
{
Context c;
@Override
public void onReceive( Context context, Intent intent )
{
this.c = context; //<<<<<<<
// your code here
}
}
Upvotes: 2
Reputation: 413
Sorry I cant find where the problem is, but maybe, you can try the following method: As you are using a broadcast receiver, why not try to send a broadcast(A) in the "onCreate()" of "NotationActivity" and another broadcast(B) in the "onDesdroy()". Then, you can check if the activity is running by checking a variable, maybe an integer initialized to 0, changed to 1 when A received, and 2 when B received.
Upvotes: 0