Android闪屏崩溃

Android闪屏崩溃,android,Android,我的应用程序在启动时会显示一个启动屏幕。屏幕将显示3秒钟。显示时,应用程序将从服务器下载json。3分钟后或下载完成后(以时间较长者为准),将加载主屏幕。下面的代码显示了如何实现这一点 if (isNetworkConnected()) { networkConnected = true; } else { networkConnected = false; toast(R.string.no_internet_connection

我的应用程序在启动时会显示一个启动屏幕。屏幕将显示3秒钟。显示时,应用程序将从服务器下载json。3分钟后或下载完成后(以时间较长者为准),将加载主屏幕。下面的代码显示了如何实现这一点

    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类和它导致的主类,而不发布这两个,我们无法真正理解整个问题。帮助我们帮助你