Android:初始化新 AsyncTask 时应用程序崩溃 (VerifyError)

Posted

技术标签:

【中文标题】Android:初始化新 AsyncTask 时应用程序崩溃 (VerifyError)【英文标题】:Android: App crashes when initializing new AsyncTask (VerifyError) 【发布时间】:2014-03-29 18:18:48 【问题描述】:

我有一个应用程序在该点崩溃:“new Downloader(this, mURL);”:

    Downloader downloader = new Downloader(this, mURL);
    downloader.execute(0);

下载器.java:

public class Downloader extends AsyncTask<Integer,Integer,String>

private Fragment fragment;
private String mURL;
private Activity activity;

public Downloader(VertretungsplanFragment fr, String mURL)

    fragment = fr;
    this.mURL = mURL;
    this.activity = fr.getActivity();

@Override
protected String doInBackground(Integer... integers) 
[...]

然后出现这个错误(重要:它只在 android

java.lang.VerifyError

这是错误日志:)

--startDownload:253 就是Downloader downlaoder = new Downlaoder(this, mURL);

02-25 15:40:55.405 619-619/thems.vertretungsplan E/AndroidRuntime: 致命异常: main java.lang.VerifyError:thems.vertretungsplan.Downloader 在thems.vertretungsplan.VertretungsplanFragment.startDownload(VertretungsplanFragment.java:253) 在thems.vertretungsplan.VertretungsplanFragment.onCreateView(VertretungsplanFragment.java:58) 在 android.support.v4.app.Fragment.performCreateView(Fragment.java:1500) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 在 android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467) 在 android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472) 在 android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 在 android.support.v4.view.ViewPager.populate(ViewPager.java:1068) 在 android.support.v4.view.ViewPager.populate(ViewPager.java:914) 在 android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436) 在 android.view.View.measure(View.java:8313) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 在 android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017) 在 android.widget.LinearLayout.measureVertical(LinearLayout.java:386) 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 在 android.view.View.measure(View.java:8313) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 在 android.view.View.measure(View.java:8313) 在 android.widget.RelativeLayout.measureChildHorizo​​ntal(RelativeLayout.java:581) 在 android.widget.RelativeLayout.onMeasure(RelativeLayout.java:365) 在 android.view.View.measure(View.java:8313) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 在 android.view.View.measure(View.java:8313) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 在 android.view.View.measure(View.java:8313) 在 android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:651) 在 android.view.View.measure(View.java:8313) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 在 android.view.View.measure(View.java:8313) 在 android.widget.LinearLayout.measureVertical(LinearLayout.java:531) 在 android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 在 android.view.View.measure(View.java:8313) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 在 android.view.View.measure(View.java:8313) 在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 在 android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 在 android.view.View.measure(View.java:8313) 在 android.view.ViewRoot.performTraversals(ViewRoot.java:839) 在 android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:123) 在 android.app.ActivityThread.main(ActivityThread.java:3683) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:507) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 在 dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

你能发布你的错误日志吗? 【参考方案1】:

您必须从实例化片段的 Activity 中获取上下文。

context =new Context();
context = getActivity();

将此“上下文”作为上下文传递给 asynctask 构造函数。

【讨论】:

我其实不明白。 - 为什么我需要 Async-Task 中的上下文 当你调用Downloader downloader = new Downloader(this, mURL);你必须把你的片段当前关联的活动的上下文。所以你把我在我的答案中写的代码放在你的片段中,而不是“这个”,你把“上下文”放在你的构造函数中。即 Downloader downloader = new Downloader (上下文,mURL); 首先-感谢您的帮助,但这不是崩溃的问题-它实际上并没有进入公共下载器(...)。任何想法? - 最疯狂的是它适用于 android 3+【参考方案2】:

片段是在 android 3.0 之后引入的,即 API 级别 11

http://developer.android.com/reference/android/app/Fragment.html

【讨论】:

嗯,这实际上也不是问题......通过用“Downloader”评论这两行它应该可以正常工作......顺便说一句:我使用AndroidStudio - 这可能是一个问题吗?

以上是关于Android:初始化新 AsyncTask 时应用程序崩溃 (VerifyError)的主要内容,如果未能解决你的问题,请参考以下文章

安卓Android开发:使用Executor线程池代替AsyncTask进行异步操作

安卓Android开发:使用Executor线程池代替AsyncTask进行异步操作

Android - AppWidgets、AlarmManager 和 AsyncTask

Android异步任务AsyncTask

android asynctask向ui发送回调[重复]

Android AsyncTask 和 SQLite 数据库实例