Черный экран при переходе на другую активность в onPostExecute

Christian Jeremi спросил: 31 июля 2018 в 09:50 в: android

Я пытаюсь перейти к другому действию после сохранения данных с помощью 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 ответ

Ana ответил: 31 июля 2018 в 10:05

Ваш AsyncTask включен в класс Activity или это отдельный класс?

Если он отдельный, вы не можете запустить activity из AsyncTask без context.

Передайте Context в конструктор AsyncTask и используйте его в onPostExecute, чтобы начать свою деятельность.

@Override
protected void onPostExecute(Boolean result) {    activity.startActivity(new Intent(activity, BuiltInCamera.class));
}

Также проверьте вывод logcat. Если проблема все еще сохраняется, пожалуйста, опубликуйте свой вывод logcat здесь, чтобы мы могли понять, в чем проблема.