本文介绍了应用程序运行正常第一次崩溃,但第二次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的头衔是pretty的自我解释。这是我的code:
公共类MainActivity延伸活动{ 私人的WebView浏览; 私人的TextView吨; 私人字符串地址=http://www.google; 私人诠释刷新,clearcache,时间,refreshTime,cacheTime; @覆盖 公共无效的onCreate(包savedInstanceState){ super.onCreate(savedInstanceState); 的setContentView(R.layout.activity_main); 共享preferences摹preFS = preferenceManager .getDefaultShared preferences(getBaseContext()); 地址= G prefs.getString(地址,www.google); 刷新= 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.setVisibility(TextView.VISIBLE); } @覆盖 公共无效onPageFinished(web视图查看,字符串URL){ //做你的东西在这里 super.onPageFinished(查看,网址); t.setVisibility(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="www.google"; 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", "www.google"); 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 moreAnd 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...
更多推荐
应用程序运行正常第一次崩溃,但第二次
发布评论