Черный экран при переходе к другой активности в onPostExecute - PullRequest
0 голосов
/ 24 августа 2018

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

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

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

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

@Override
protected void onPostExecute(Boolean result) {

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...