在使用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;
}
答案 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输出,以便我们了解问题出在哪里。