Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java error api level method

I get an error

java.lang.NoSuchMethodError: android.app.Activity.isDestroyed

It has something to do with only running on devices which are api 17 or higher, is there anyway around this?

       private WeakReference<Activity> mActivityRef;

    @Override
        public void onFinish() {

            Activity activity = mActivityRef.get();
//            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
//do your thing!

                if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
                    activity.startActivity(new Intent(activity, ListOfAlarms.class));
                    activity.finish();
                }
                mStarted = false;

//            }
//            Intent goBack = new Intent(CountDownAct.this, ListOfAlarms.class);
//            startActivity(goBack);
//            finish();
        }
like image 981
leonardo Avatar asked May 08 '26 12:05

leonardo


1 Answers

This API was added only in API Level 17 Check this!

To avoid the crash, you can verify with the following code

if(Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1){
//do your thing!
}

To get it working on lower API levels, you can create your own BaseActivity.java and add code like this

public class BaseActivity extends Activity {
    private boolean mDestroyed;

    public boolean isDestroyed(){
        return mDestroyed;
    }

    @Override
    protected void onDestroy() {
        mDestroyed = true;
        super.onDestroy();
    }
}

Now, make all your activities extend this BaseActivity as follows

public class MainActivity extends BaseActivity {
...
}

EDIT (After OP added code snippets)

First create a BaseActivity.java file as I have shown above. Then, make all your activities extend BaseActivity instead of Activity.

Now, change

private WeakReference<Activity> mActivityRef;

to

private WeakReference<BaseActivity> mActivityRef;

And change

Activity activity = mActivityRef.get();

to

BaseActivity activity = mActivityRef.get();
like image 147
Awanish Raj Avatar answered May 11 '26 02:05

Awanish Raj