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.measureChildHorizontal(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进行异步操作