AsyncTask onPostExecute 错误中的新意图

Posted

技术标签:

【中文标题】AsyncTask onPostExecute 错误中的新意图【英文标题】:new intent in AsyncTask onPostExecute error 【发布时间】:2017-07-23 01:54:00 【问题描述】:

我想在 AsyncTask onPostExecute 中调用意图,但出现错误,

这是我的代码,

protected void onPostExecute(Void aVoid) 
   if(name.equals("success"))
      // tv.setText("berhasil");
      // Toast.makeText(mContext, name, Toast.LENGTH_LONG).show();
       Intent intent = new Intent(MainActivity.this, SecondActivity.class);
       getApplicationContext().startActivity(intent);
    else 
       pDialog.setMessage(name);
       pDialog.show();
   
   pDialog.dismiss();
   super.onPostExecute(aVoid);

SecondActivity.java

public class SecondActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            
        );
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    

谁能帮我解决这个问题??谢谢之前

这个错误日志

D/androidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
              Process: aws.sample.com.sampleawsconnection, PID: 9959
              java.lang.NoSuchMethodError: No static method setOnApplyWindowInsetsListener(Landroid/view/View;Landroid/support/v4/view/ViewCompatLollipop$OnApplyWindowInsetsListenerBridge;)V in class Landroid/support/v4/view/ViewCompatLollipop; or its super classes (declaration of 'android.support.v4.view.ViewCompatLollipop' appears in /data/app/aws.sample.com.sampleawsconnection-2/base.apk)
                  at android.support.v4.view.ViewCompat$LollipopViewCompatImpl.setOnApplyWindowInsetsListener(ViewCompat.java:1646)
                  at android.support.v4.view.ViewCompat.setOnApplyWindowInsetsListener(ViewCompat.java:2996)
                  at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:425)
                  at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:312)
                  at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:277)
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
                  at aws.sample.com.sampleawsconnection.SecondActivity.onCreate(SecondActivity.java:15)
                  at android.app.Activity.performCreate(Activity.java:6679)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                  at android.app.ActivityThread.-wrap12(ActivityThread.java)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6119)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

【问题讨论】:

替换这个 getApplicationContext().startActivity(intent);与 startActivity(intent);并尝试。如果这不起作用试试 this.startActivity(intent); 我正在尝试这个,但仍然错误强制关闭,知道吗?? 试试尼克卡多索的回答 你能发布错误日志吗? 你确定 setMessage 行不是错误吗? pDialog 在哪里初始化? 【参考方案1】:

没有FLAG_ACTIVITY_NEW_TASK,您无法从应用程序上下文启动活动

两个选项(1)将您的活动上下文传递给任务(错误,导致泄漏)或(2)添加标志:

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);

编辑:我刚刚注意到你可以访问MainActivity.this,这意味着你是一个内部类,所以你可以这样做:

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
MainActivity.this.startActivity(intent);

请确保您的 gradle 文件是最新的(您可能需要同步最新的构建工具):

compileSdkVersion 25
targetSdkVersion to 25

compile 'com.android.support:appcompat-v7:25.2.0'
compile 'com.android.support:support-v4:25.2.0'

【讨论】:

我试过这个,但仍然错误强制关闭,知道吗?? 检查我列出的 gradle 行【参考方案2】:

将您的旧库更新为较新的库。 喜欢

compile 'com.android.support:design:23.1.1'

compile 'com.android.support:design:24.2.0'

还将compileSdkVersion 更新为 24,buildToolsVersion 更新为 24.0.1,targetSdkVersion 更新为 24。

希望对你有帮助。

【讨论】:

【参考方案3】:

在 Asynctask 的构造函数中传递上下文对象并使用该上下文在 postexecute 中启动活动

【讨论】:

以上是关于AsyncTask onPostExecute 错误中的新意图的主要内容,如果未能解决你的问题,请参考以下文章

完成 AsyncTask 后未调用 onPostExecute

AsyncTask 的 onPostExecute 被调用:但 doInBackground 没有

onPostExecute() 无法重新运行从活动调用的 asyncTask

Android,AsyncTask 不调用 onProgressUpdate 和 onPostExecute

AsyncTask中onPostExecute方法的返回类型可以不为void吗?

从Asynctask ONPostExecute调用片段方法