应用程序运行正常第一次崩溃,但第二次 [英] App runs fine the first time but crashes the second time
本文介绍了应用程序运行正常第一次崩溃,但第二次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的头衔是pretty的自我解释。这是我的code:
公共类MainActivity延伸活动{
私人的WebView浏览;
私人的TextView吨;
私人字符串地址=http://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.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="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屋!
查看全文