在onPostExecute中移至另一个活动时黑屏

时间:2018-08-24 11:30:44

标签: android android-asynctask

在使用asynctask和bufferedreader保存数据以将文本保存到sql表之后,我试图移动到另一个活动。完成任务后,我打电话给onPostExecute转到其他活动并显示数据,但是我得到的是黑屏。我的另一项活动是带有导航视图和两个片段的抽屉布局。仍然找不到任何合适的解决方案。

    @Override
    protected void onPreExecute() {
        kamusHelper = new KamusHelper(SplashActivity.this);
        kamusPreference = new KamusPreference(SplashActivity.this);
    }

    @Override
    protected Void doInBackground(Void... params) {
        Boolean first = kamusPreference.getFirstRun();

        if (first) {
            ArrayList<KamusModel> kamusModels = preLoadRawEnglishIndonesia();

            kamusHelper.open();

            progress = 20;

            publishProgress((int) progress);
            Double progressMax = 80.0;
            Double progressdiff = (progressMax - progress) / kamusModels.size();

            kamusHelper.beginTransacion();

            try {
                for (KamusModel model : kamusModels) {
                    kamusHelper.insertTransactionEnglishIndonesia(model);
                    progress += progressdiff;
                    publishProgress((int) progress);
                }

                kamusHelper.setTransactionSuccess();
            } catch (Exception e) {
                Log.e(TAG, "Exception");
            }

            kamusHelper.endTransaction();
            kamusHelper.close();

            kamusPreference.setFirstRun(false);

            publishProgress((int) maxProgress);

        } else {
            try {
                synchronized (this) {
                    this.wait(5000);
                    publishProgress(50);

                    this.wait(5000);
                    publishProgress((int) maxProgress);
                }
            } catch (Exception e) {
            }
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        progressBar.setProgress(values[0]);

    }

    @Override
    protected void onPostExecute(Void aVoid) {
        Intent i = new Intent(SplashActivity.this, MainActivity.class);
        startActivity(i);
        finish();
    }
}

我的其他活动

@BindView(R.id.toolbar_main)
Toolbar toolbar;

@BindView(R.id.drawer_main)
DrawerLayout drawerLayout;

@BindView(R.id.nav_main)
NavigationView navigationView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ButterKnife.bind(this);

    setSupportActionBar(toolbar);

    navigationView.setNavigationItemSelectedListener(this);

    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close);

    drawerLayout.addDrawerListener(toggle);
    toggle.syncState();

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction().replace(R.id.frame_main, new EnglishIndonesiaFragment()).commit();

        navigationView.setCheckedItem(R.id.english_indonesia);

    }

}

@Override
public void onBackPressed() {
    if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
        drawerLayout.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }

}



@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()) {
        case R.id.english_indonesia:
            getSupportFragmentManager().beginTransaction().replace(R.id.frame_main,new EnglishIndonesiaFragment()).commit();
            break;
        case R.id.indonesia_english:
            getSupportFragmentManager().beginTransaction().replace(R.id.frame_main, new IndonesiaEnglishFragment()).commit();
            break;
    }
    drawerLayout.closeDrawer(GravityCompat.START);
    return true;
}

1 个答案:

答案 0 :(得分:0)

您的AsyncTask是包含在Activity类中还是单独的类?

如果分开使用activity,则不能从AsyncTask开始context

Context的构造函数中传递AsyncTask,并在onPostExecute中使用它来开始您的活动。

@Override
protected void onPostExecute(Boolean result) {

    activity.startActivity(new Intent(activity, BuiltInCamera.class));
}

此外,检查logcat输出。如果问题仍然存在,请在有问题的此处发布您的logcat输出,以便我们了解问题出在哪里。