【发布时间】:2011-10-28 06:05:14
【问题描述】:
有人知道这里发生了什么吗?有什么方法可以让用户取消 progressDialog 并返回到 Activity A 而不会发生任何崩溃?
重现此崩溃的步骤:
在 activity A 中,我启动了一个新意图 Activity B tabhost,在 progressDialog 加载完成之前加载“class1.java”(带有 progressDialog 的 Webview),我很快点击后退按钮返回 Activity A 我遇到了崩溃
如果出现以下情况,应用不会崩溃:
我等到 webview 加载完成并返回 Activity A
我取消了 progressDialog 并停留在 webview 上,直到页面加载完成并返回到 Activity A
第 51 行: progressDialog.incrementProgressBy(progress);
Logcat: http://pastebin.com/uBw4xcaY
java.lang.NullPointerException
at com.domain.package.ui.class1$class1_$1.onProgressChanged(class1.java:51)
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:358)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3835)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
这是我的代码:
[...]
public class class1 extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_stack);
}
public static class class1_ extends Fragment {
/** The Fragment's UI **/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.class_, container, false);
WebView engine = (WebView) v.findViewById(R.id.web_engine);
final ProgressDialog progressDialog;
progressDialog = new ProgressDialog(getActivity());
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(true);
progressDialog.setProgress(0);
progressDialog.show();
engine.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
progressDialog.setProgress(0);
getActivity().setProgress(progress * 1000);
progressDialog.incrementProgressBy(progress);
if (progress == 100 && progressDialog.isShowing())
progressDialog.dismiss();
}
});
engine.getSettings().setBuiltInZoomControls(false);
engine.getSettings().setUseWideViewPort(false);
engine.getSettings().setSupportZoom(false);
engine.loadUrl("file:///android_asset/index.html");
Toast.makeText(getActivity(),
"Hello this is a toast",
Toast.LENGTH_LONG).show();
return v;
}
}
}
【问题讨论】:
-
第 51 行: progressDialog.incrementProgressBy(progress); Logcat: pastebin.com/uBw4xcaY
标签: java android progressdialog