应用程序运行正常第一次崩溃,但第二次 [英] App runs fine the first time but crashes the second time

查看:922
本文介绍了应用程序运行正常第一次崩溃,但第二次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的头衔是pretty的自我解释。这是我的code:

 公共类MainActivity延伸活动{

    私人的WebView浏览;
    私人的TextView吨;
    私人字符串地址=htt​​p://www.google.com;
    私人诠释刷新,clearcache,时间,refreshTime,cacheTime;

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);

        共享preferences摹preFS = preferenceManager
                .getDefaultShared preferences(getBaseContext());
        地址= G prefs.getString(地址,http://www.google.com);
        刷新= G prefs.getInt(刷新,1);
        clearcache = G prefs.getInt(ClearCache,1);
        时间= G prefs.getInt(时代,0);

        开关(时间){
        情况下0:
            refreshTime =刷新* 60 * 60 * 1000;
            打破;
        情况1:
            refreshTime =刷新* 60 * 1000;
            打破;
        案例2:
            refreshTime =刷新* 1000;
            打破;
        }

        开关(时间){
        情况下0:
            cacheTime = clearcache * 60 * 60 * 1000;
            打破;
        情况1:
            cacheTime = clearcache * 60 * 1000;
            打破;
        案例2:
            cacheTime = clearcache * 1000;
            打破;
        }

        浏览=(web视图)findViewById(R.id.webView1);
        T =(TextView中)findViewById(R.id.t);

        browse.getSettings()setJavaScriptEnabled(真)。
        browse.getSettings()setPluginsEnabled(真)。
        。browse.getSettings()setLoadWithOverviewMode(真正的);
        。browse.getSettings()setUseWideViewPort(真正的);
        。browse.getSettings()setBuiltInZoomControls(真正的);
        。browse.getSettings()setSupportZoom(真正的);
        browse.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        browse.setScrollbarFadingEnabled(真正的);
        。browse.getSettings()setLoadsImagesAutomatically(真正的);
        。browse.getSettings()setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        browse.getSettings()setAppCacheMaxSize(1024 * 1024 * 8)。

        browse.setWebViewClient(新WebViewClient(){

            @覆盖
            公共无效onPageStarted(web视图查看,字符串URL,位图图标){
                // TODO自动生成方法存根
                super.onPageStarted(查看,网址,网站图标);
                t.se​​tVisibility(TextView.VISIBLE);
            }

            @覆盖
            公共无效onPageFinished(web视图查看,字符串URL){
                //做你的东西在这里
                super.onPageFinished(查看,网址);
                t.se​​tVisibility(TextView.GONE);
            }
        });

        尝试 {
            browse.loadUrl(地址);
        }赶上(例外五){
            e.printStackTrace();
        }

        refreshRRryan();
        cacheRRryan();
    }

    最终的处理程序refreshhandler =新的处理程序();
    最后计时器refreshtimer =新的Timer();
    最终的可运行refreshdoA =新的Runnable(){
        @覆盖
        公共无效的run(){
            browse.reload();
        }
    };

    公共无效refreshRRryan(){
        TimerTask的refreshtask =新的TimerTask(){
            @覆盖
            公共无效的run(){
                refreshhandler.post(refreshdoA);
            }
        };
        refreshtimer.scheduleAtFixedRate(refreshtask,refreshTime,refreshTime);
    }

    最终的处理程序cachehandler =新的处理程序();
    最后计时器cachetimer =新的Timer();
    最终的可运行cachedoA =新的Runnable(){
        @覆盖
        公共无效的run(){
            browse.clearCache(真正的);
            。getApplicationContext()deleteDatabase(webview.db);
            getApplicationContext()deleteDatabase(webviewCache.db);
        }
    };

    公共无效cacheRRryan(){
        TimerTask的cachetask =新的TimerTask(){
            @覆盖
            公共无效的run(){
                cachehandler.post(cachedoA);
            }
        };
        cachetimer.scheduleAtFixedRate(cachetask,cacheTime,cacheTime);
    }

    @覆盖
    公共文件getCacheDir(){
        //注:此方法采用的是Android 2.1

        返回getApplicationContext()getCacheDir()。
    }

    @覆盖
    公共布尔onCreateOptionsMenu(功能菜单){
        // TODO自动生成方法存根
        super.onCreateOptionsMenu(菜单);
        MenuInflater爆破= getMenuInflater();
        blowUp.inflate(R.menu.activity_main,菜单);
        返回true;
    }

    @覆盖
    公共布尔onOptionsItemSelected(菜单项项){

        开关(item.getItemId()){
        案例R.id.aboutUs:
            意图I =新的意向书(关于);
            startActivity(ⅰ);
            打破;
        案例R.id. preferences:
            意图P =新的意向书(preFS);
            startActivityForResult(对,101);
            打破;
        }
        返回false;
    }

}
 

而这里的logcat的:

 一十一月8号至17号:08:05.997:E / AndroidRuntime(1197):致命异常:主要
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.fit.world.browser / com.fit.world.browser.MainActivity}:java.lang中.ClassCastException:java.lang.String中
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在android.app.ActivityThread.access $ 1500(ActivityThread.java:117)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:931)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在android.os.Handler.dispatchMessage(Handler.java:99)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在android.os.Looper.loop(Looper.java:123)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在android.app.ActivityThread.main(ActivityThread.java:3683)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在java.lang.reflect.Method.invokeNative(本机方法)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在java.lang.reflect.Method.invoke(Method.java:507)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在dalvik.system.NativeStart.main(本机方法)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):java.lang.ClassCastException:产生的原因java.lang.String中
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在android.app.ContextImpl $共享preferencesImpl.getInt(ContextImpl.java:2817)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在com.fit.world.browser.MainActivity.onCreate(MainActivity.java:37)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
十一月8号至17日:08:05.997:E / AndroidRuntime(1197):11 ...更多
 

和我pretty的肯定,我的表现很好,因为该活动运行的第一次。

请帮助我。

解决方案

 刷新= G prefs.getInt(刷新,1);
clearcache = G prefs.getInt(ClearCache,1);
时间= G prefs.getInt(时代,0);
 

第一次应用程序运行,它使用默认值,你使用(1,1,0)以上。

但第二次,它肯定使用了从用户输入所保存的数据可能。

您必须将其保存为一个字符串,并试图将其恢复为int ...

My title is pretty self explanatory. Here's my code:

 public class MainActivity extends Activity {

    private WebView browse;
    private TextView t;
    private String address="http://www.google.com";
    private int refresh, clearcache, time, refreshTime, cacheTime;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SharedPreferences gPrefs = PreferenceManager
                .getDefaultSharedPreferences(getBaseContext());
        address = gPrefs.getString("Address", "http://www.google.com");
        refresh = gPrefs.getInt("Refresh", 1);
        clearcache = gPrefs.getInt("ClearCache", 1);
        time = gPrefs.getInt("Time", 0);

        switch (time) {
        case 0:
            refreshTime = refresh * 60 * 60 * 1000;
            break;
        case 1:
            refreshTime = refresh * 60 * 1000;
            break;
        case 2:
            refreshTime = refresh * 1000;
            break;
        }

        switch (time) {
        case 0:
            cacheTime = clearcache * 60 * 60 * 1000;
            break;
        case 1:
            cacheTime = clearcache * 60 * 1000;
            break;
        case 2:
            cacheTime = clearcache * 1000;
            break;
        }

        browse = (WebView) findViewById(R.id.webView1);
        t = (TextView) findViewById(R.id.t);

        browse.getSettings().setJavaScriptEnabled(true);
        browse.getSettings().setPluginsEnabled(true);
        browse.getSettings().setLoadWithOverviewMode(true);
        browse.getSettings().setUseWideViewPort(true);
        browse.getSettings().setBuiltInZoomControls(true);
        browse.getSettings().setSupportZoom(true);
        browse.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        browse.setScrollbarFadingEnabled(true);
        browse.getSettings().setLoadsImagesAutomatically(true);
        browse.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        browse.getSettings().setAppCacheMaxSize(1024 * 1024 * 8);

        browse.setWebViewClient(new WebViewClient() {

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                // TODO Auto-generated method stub
                super.onPageStarted(view, url, favicon);
                t.setVisibility(TextView.VISIBLE);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                // do your stuff here
                super.onPageFinished(view, url);
                t.setVisibility(TextView.GONE);
            }
        });

        try {
            browse.loadUrl(address);
        } catch (Exception e) {
            e.printStackTrace();
        }

        refreshRRryan();
        cacheRRryan();
    }

    final Handler refreshhandler = new Handler();
    final Timer refreshtimer = new Timer();
    final Runnable refreshdoA = new Runnable() {
        @Override
        public void run() {
            browse.reload();
        }
    };

    public void refreshRRryan() {
        TimerTask refreshtask = new TimerTask() {
            @Override
            public void run() {
                refreshhandler.post(refreshdoA);
            }
        };
        refreshtimer.scheduleAtFixedRate(refreshtask, refreshTime, refreshTime);
    }

    final Handler cachehandler = new Handler();
    final Timer cachetimer = new Timer();
    final Runnable cachedoA = new Runnable() {
        @Override
        public void run() {
            browse.clearCache(true);
            getApplicationContext().deleteDatabase("webview.db");
            getApplicationContext().deleteDatabase("webviewCache.db");
        }
    };

    public void cacheRRryan() {
        TimerTask cachetask = new TimerTask() {
            @Override
            public void run() {
                cachehandler.post(cachedoA);
            }
        };
        cachetimer.scheduleAtFixedRate(cachetask, cacheTime, cacheTime);
    }

    @Override
    public File getCacheDir() {
        // NOTE: this method is used in Android 2.1

        return getApplicationContext().getCacheDir();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        super.onCreateOptionsMenu(menu);
        MenuInflater blowUp = getMenuInflater();
        blowUp.inflate(R.menu.activity_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
        case R.id.aboutUs:
            Intent i = new Intent("ABOUT");
            startActivity(i);
            break;
        case R.id.preferences:
            Intent p = new Intent("PREFS");
            startActivityForResult(p, 101);
            break;
        }
        return false;
    }

}

And here's logcat:

08-17 11:08:05.997: E/AndroidRuntime(1197): FATAL EXCEPTION: main
08-17 11:08:05.997: E/AndroidRuntime(1197): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fit.world.browser/com.fit.world.browser.MainActivity}: java.lang.ClassCastException: java.lang.String
08-17 11:08:05.997: E/AndroidRuntime(1197):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at android.os.Looper.loop(Looper.java:123)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at android.app.ActivityThread.main(ActivityThread.java:3683)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at java.lang.reflect.Method.invokeNative(Native Method)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at java.lang.reflect.Method.invoke(Method.java:507)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at dalvik.system.NativeStart.main(Native Method)
08-17 11:08:05.997: E/AndroidRuntime(1197): Caused by: java.lang.ClassCastException: java.lang.String
08-17 11:08:05.997: E/AndroidRuntime(1197):     at android.app.ContextImpl$SharedPreferencesImpl.getInt(ContextImpl.java:2817)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at com.fit.world.browser.MainActivity.onCreate(MainActivity.java:37)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-17 11:08:05.997: E/AndroidRuntime(1197):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
08-17 11:08:05.997: E/AndroidRuntime(1197):     ... 11 more

And I'm pretty sure my manifest is fine because the activity runs the first time.

Help me please.

解决方案

refresh = gPrefs.getInt("Refresh", 1);
clearcache = gPrefs.getInt("ClearCache", 1);
time = gPrefs.getInt("Time", 0);

The first time the app run, it uses the default value you use (1,1,0) above.

But the second time, it certainly uses the data you've saved from a user input perhaps.

You must be saving it as a string and trying to retrieve it as an int...

这篇关于应用程序运行正常第一次崩溃,但第二次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆