Android闪屏崩溃
我的应用程序在启动时会显示一个启动屏幕。屏幕将显示3秒钟。显示时,应用程序将从服务器下载json。3分钟后或下载完成后(以时间较长者为准),将加载主屏幕。下面的代码显示了如何实现这一点Android闪屏崩溃,android,Android,我的应用程序在启动时会显示一个启动屏幕。屏幕将显示3秒钟。显示时,应用程序将从服务器下载json。3分钟后或下载完成后(以时间较长者为准),将加载主屏幕。下面的代码显示了如何实现这一点 if (isNetworkConnected()) { networkConnected = true; } else { networkConnected = false; toast(R.string.no_internet_connection
if (isNetworkConnected()) {
networkConnected = true;
} else {
networkConnected = false;
toast(R.string.no_internet_connection);
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
timeIsUp = true;
if (syncDone || !networkConnected)
loadHomeActivity();
}
}, SPLASH_TIME_OUT);
Callback<DenkoModel> callback = new Callback<DenkoModel>() {
@Override
public void success(DenkoModel denkoModel, Response response) {
toast(R.string.server_connection_successful);
syncDone = true;
denkoStationService.updateDatabaseWithDenkoModel(denkoModel);
if (timeIsUp)
loadHomeActivity();
}
@Override
public void failure(RetrofitError error) {
toast(R.string.server_connection_failed);
syncDone = true;
if (timeIsUp)
loadHomeActivity();
}
};
denkoStationService.fetchDenkoModel(denkoStationService.fetchDenkoLastDataState(), callback);
编辑:
DenkoApplication.java
public class DenkoApplication extends Application {
private static Context initialContext;
private static SQLiteDatabase database;
@Override
public void onCreate() {
super.onCreate();
initialContext = getApplicationContext();
setupDb();
setupLanguage();
registerLocationListener();
}
private void setupDb() {
DenkoDbHelper helper = new DenkoDbHelper(initialContext, "denko-stations-db", null);
database = helper.getWritableDatabase();
}
public static Context getAppContext() {
return initialContext;
}
public static SQLiteDatabase getDatabase() {
return database;
}
private void setupLanguage() {
setLocale(readLanguage());
}
private void setLocale(String lang) {
Locale myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
}
private void registerLocationListener() {
LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener mlocListener = new DenkoLocationListener();
mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
DenkoLocationListener.isGpsEnabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
private SharedPreferences obtainSharedPreferences() {
return getSharedPreferences("org.bitbucket.infovillafoundation.denko", Context.MODE_PRIVATE);
}
private String readLanguage() {
return obtainSharedPreferences().getString("org.bitbucket.infovillafoundation.denko.language", "en");
}
}
public class SplashScreenActivity extends Activity {
private static int SPLASH_TIME_OUT = 3000;
@InjectView(R.id.imgLogo)
ImageView logoImage;
@InjectView(R.id.welcomeText)
TextView welcomeText;
boolean timeIsUp;
boolean syncDone;
boolean networkConnected;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
ButterKnife.inject(this);
DenkoStationComponent component = DaggerDenkoStationComponent.builder().denkoStationModule(new DenkoStationModule()).build();
final DenkoStationService denkoStationService = component.provideDenkoStationService();
if (isNetworkConnected()) {
networkConnected = true;
} else {
networkConnected = false;
toast(R.string.no_internet_connection);
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
timeIsUp = true;
if (syncDone || !networkConnected)
loadHomeActivity();
}
}, SPLASH_TIME_OUT);
Callback<DenkoModel> callback = new Callback<DenkoModel>() {
@Override
public void success(DenkoModel denkoModel, Response response) {
toast(R.string.server_connection_successful);
syncDone = true;
denkoStationService.updateDatabaseWithDenkoModel(denkoModel);
if (timeIsUp)
loadHomeActivity();
}
@Override
public void failure(RetrofitError error) {
toast(R.string.server_connection_failed);
syncDone = true;
if (timeIsUp)
loadHomeActivity();
}
};
denkoStationService.fetchDenkoModel(denkoStationService.fetchDenkoLastDataState(), callback);
}
private void loadHomeActivity() {
Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
private SharedPreferences obtainSharedPreferences() {
return getSharedPreferences("org.bitbucket.infovillafoundation.denko", Context.MODE_PRIVATE);
}
private String readLanguage() {
return obtainSharedPreferences().getString("org.bitbucket.infovillafoundation.denko.language", "en");
}
private void writeLanguage(String language) {
obtainSharedPreferences().edit().putString("org.bitbucket.infovillafoundation.denko.language", language).apply();
}
public void toast(int textId) {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_layout,
(ViewGroup) findViewById(R.id.toast_layout_root));
TextView text = (TextView) layout.findViewById(R.id.toast_text);
text.setText(getResources().getString(textId));
Toast toast = new Toast(getApplicationContext());
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
}
}
public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private String[] items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
items = getResources().getStringArray(R.array.menus);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.drawer_list);
DenkoMenuArrayAdapter adapter = new DenkoMenuArrayAdapter(this, items);
mDrawerList.setAdapter(adapter);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.string.drawer_open, R.string.drawer_close) {
/* Called when drawer is closed */
public void onDrawerClosed(View view) {
//Put your code here
}
/* Called when a drawer is opened */
public void onDrawerOpened(View drawerView) {
//Put your code here
}
};
/* Setting DrawerToggle on DrawerLayout */
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
displayView(position);
mDrawerLayout.closeDrawer(mDrawerList);
}
});
updateFragment();
}
public void updateFragment() {
FragmentManager fragmentManager = getFragmentManager();
MainViewFragment rFragment = new MainViewFragment();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.content_frame, rFragment);
ft.commit();
}
private void displayView(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new MainViewFragment();
break;
case 1:
fragment = new StationViewFragment();
break;
case 2:
fragment = new MapViewFragment();
break;
/*case 3:
fragment = new CommunityFragment();
break;
case 4:
fragment = new PagesFragment();
break;
case 5:
fragment = new WhatsHotFragment();
break;*/
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment).commit();
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
}
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
}
SplashScreenActivity.java
public class DenkoApplication extends Application {
private static Context initialContext;
private static SQLiteDatabase database;
@Override
public void onCreate() {
super.onCreate();
initialContext = getApplicationContext();
setupDb();
setupLanguage();
registerLocationListener();
}
private void setupDb() {
DenkoDbHelper helper = new DenkoDbHelper(initialContext, "denko-stations-db", null);
database = helper.getWritableDatabase();
}
public static Context getAppContext() {
return initialContext;
}
public static SQLiteDatabase getDatabase() {
return database;
}
private void setupLanguage() {
setLocale(readLanguage());
}
private void setLocale(String lang) {
Locale myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
}
private void registerLocationListener() {
LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener mlocListener = new DenkoLocationListener();
mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
DenkoLocationListener.isGpsEnabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
private SharedPreferences obtainSharedPreferences() {
return getSharedPreferences("org.bitbucket.infovillafoundation.denko", Context.MODE_PRIVATE);
}
private String readLanguage() {
return obtainSharedPreferences().getString("org.bitbucket.infovillafoundation.denko.language", "en");
}
}
public class SplashScreenActivity extends Activity {
private static int SPLASH_TIME_OUT = 3000;
@InjectView(R.id.imgLogo)
ImageView logoImage;
@InjectView(R.id.welcomeText)
TextView welcomeText;
boolean timeIsUp;
boolean syncDone;
boolean networkConnected;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
ButterKnife.inject(this);
DenkoStationComponent component = DaggerDenkoStationComponent.builder().denkoStationModule(new DenkoStationModule()).build();
final DenkoStationService denkoStationService = component.provideDenkoStationService();
if (isNetworkConnected()) {
networkConnected = true;
} else {
networkConnected = false;
toast(R.string.no_internet_connection);
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
timeIsUp = true;
if (syncDone || !networkConnected)
loadHomeActivity();
}
}, SPLASH_TIME_OUT);
Callback<DenkoModel> callback = new Callback<DenkoModel>() {
@Override
public void success(DenkoModel denkoModel, Response response) {
toast(R.string.server_connection_successful);
syncDone = true;
denkoStationService.updateDatabaseWithDenkoModel(denkoModel);
if (timeIsUp)
loadHomeActivity();
}
@Override
public void failure(RetrofitError error) {
toast(R.string.server_connection_failed);
syncDone = true;
if (timeIsUp)
loadHomeActivity();
}
};
denkoStationService.fetchDenkoModel(denkoStationService.fetchDenkoLastDataState(), callback);
}
private void loadHomeActivity() {
Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
private SharedPreferences obtainSharedPreferences() {
return getSharedPreferences("org.bitbucket.infovillafoundation.denko", Context.MODE_PRIVATE);
}
private String readLanguage() {
return obtainSharedPreferences().getString("org.bitbucket.infovillafoundation.denko.language", "en");
}
private void writeLanguage(String language) {
obtainSharedPreferences().edit().putString("org.bitbucket.infovillafoundation.denko.language", language).apply();
}
public void toast(int textId) {
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_layout,
(ViewGroup) findViewById(R.id.toast_layout_root));
TextView text = (TextView) layout.findViewById(R.id.toast_text);
text.setText(getResources().getString(textId));
Toast toast = new Toast(getApplicationContext());
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
}
}
public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private String[] items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
items = getResources().getStringArray(R.array.menus);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.drawer_list);
DenkoMenuArrayAdapter adapter = new DenkoMenuArrayAdapter(this, items);
mDrawerList.setAdapter(adapter);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.string.drawer_open, R.string.drawer_close) {
/* Called when drawer is closed */
public void onDrawerClosed(View view) {
//Put your code here
}
/* Called when a drawer is opened */
public void onDrawerOpened(View drawerView) {
//Put your code here
}
};
/* Setting DrawerToggle on DrawerLayout */
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
displayView(position);
mDrawerLayout.closeDrawer(mDrawerList);
}
});
updateFragment();
}
public void updateFragment() {
FragmentManager fragmentManager = getFragmentManager();
MainViewFragment rFragment = new MainViewFragment();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.content_frame, rFragment);
ft.commit();
}
private void displayView(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new MainViewFragment();
break;
case 1:
fragment = new StationViewFragment();
break;
case 2:
fragment = new MapViewFragment();
break;
/*case 3:
fragment = new CommunityFragment();
break;
case 4:
fragment = new PagesFragment();
break;
case 5:
fragment = new WhatsHotFragment();
break;*/
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment).commit();
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
}
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}
}
试试这个代码,它对我有用
public class SplashActivity extends Activity {
// Splash screen timer
private Handler splashHandler = new Handler();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Runnable r2 = new Runnable() {
@Override
public void run() {
finish();
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
};
Runnable r = new Runnable() {
public void run() {
Intent brain = new Intent(SplashActivity.this, LoginActivity.class);
startActivity(brain);
finish();
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
};
setContentView(R.layout.splash_screen);
if (isNetworkAvailable())
splashHandler.postDelayed(r, 3000);
else {
//splashHandler.postDelayed(r, 3000);
//Notify user they aren't connected
Toast.makeText(getApplicationContext(), "You aren't connected to the internet.", Toast.LENGTH_LONG).show();
splashHandler.postDelayed(r, 3000);
//close the app
//finish();
}
}
public void onResume(Bundle savedInstanceState) {
super.onResume();
}
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
}
Logcat已包含在问题中。它不是一个
AsyncTask
问题。改型将下载json,当它接收到数据并完成解码时,它将调用回调,因此问题不像主线程上的网络那么简单。此外,真正的设备允许运行代码。只有调试环境不允许这样做。@SandahAung您给定的日志cat输出不允许;我不能包含错误,这也是我不能解决问题的原因。它不会产生任何错误。请发布您的splash类和它导致的主类,而不发布这两个,我们无法真正理解整个问题。帮助我们帮助你