2015-07-20 42 views
3

我得到一个错误Java错误API级方法

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

它有事情做,只有在其上的API 17或更高版本的设备上运行,反正是有解决这个?

 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(); 
     } 
+0

你是什么Manif est.xml配置?看来你正在不支持的版本上运行代码。 – kosa

回答

2

加入只有在API级别该API 17 Check this!

为了避免撞车,你可以用下面的代码验证

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

得到它的工作在较低的空气污染水平,你可以创建你自己的BaseActivity.java并添加这样的代码

public class BaseActivity extends Activity { 
    private boolean mDestroyed; 

    public boolean isDestroyed(){ 
     return mDestroyed; 
    } 

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

现在,make所有的活动如下

public class MainActivity extends BaseActivity { 
... 
} 

希望这有助于延长这一BaseActivity!请接受这个答案,如果它为你工作:)

编辑(OP添加代码段后)

首先创建一个BaseActivity.java文件正如我上面显示。 然后,让所有活动延伸BaseActivity而不是Activity

现在,变化

private WeakReference<Activity> mActivityRef; 

private WeakReference<BaseActivity> mActivityRef; 

,并更改

Activity activity = mActivityRef.get(); 

BaseActivity activity = mActivityRef.get(); 
+0

我如何实现这一点,虽然,我附上了一个代码片段 – leonardo

+0

这里所指的“活动”对象是什么?你可以粘贴代码中分配'activity'对象的部分吗? –

+0

好的我刚刚编辑了代码片段 – leonardo