【发布时间】:2015-07-30 10:09:59
【问题描述】:
我有一个显示 webView 的应用程序,每次在 webView 中加载 url 时,我都会尝试显示一条自定义 toast 消息,上面写着“请稍候”.. 所以我在 shouldOverrideUrlLoading(WebView 视图中添加了这个自定义 toast 消息, String url) 方法.. 如果我启动应用程序并等待 url 加载,该应用程序工作正常..并且在加载 url 时也会出现该消息..
当我启动应用程序然后突然退出它时出现问题.. 没有等待 url 加载.. 应用程序崩溃给我一个空指针异常 --
LayoutInflater iflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
我无法找到防止此异常和应用程序崩溃的方法-
这是我的代码-
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i(TAG, "About to load:" + url);
view.loadUrl(url);
LayoutInflater nflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = nflater.inflate(R.layout.toast2,
(ViewGroup) getActivity().findViewById(R.id.tl1));
TextView textv = (TextView) layout.findViewById(R.id.text);
textv.setText(R.string.loading);
final Toast ltoast = new Toast(getActivity());
ltoast.setView(layout);
ltoast.show();
new CountDownTimer(9000, 1000)
{
public void onTick(long millisUntilFinished) {ltoast.show();}
public void onFinish() {ltoast.show();}
}.start();
return true;
}
这是我的 Logcat 中的错误-
07-30 15:26:25.429: E/AndroidRuntime(8701): FATAL EXCEPTION: main
07-30 15:26:25.429: E/AndroidRuntime(8701): java.lang.NullPointerException
07-30 15:26:25.429: E/AndroidRuntime(8701): at com.example.itslive.web1Activity$HelloWebViewClient.shouldOverrideUrlLoading(web1Activity.java:673)
07-30 15:26:25.429: E/AndroidRuntime(8701): at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:384)
07-30 15:26:25.429: E/AndroidRuntime(8701): at android.os.Handler.dispatchMessage(Handler.java:99)
07-30 15:26:25.429: E/AndroidRuntime(8701): at android.os.Looper.loop(Looper.java:137)
07-30 15:26:25.429: E/AndroidRuntime(8701): at android.app.ActivityThread.main(ActivityThread.java:4921)
07-30 15:26:25.429: E/AndroidRuntime(8701): at java.lang.reflect.Method.invokeNative(Native Method)
07-30 15:26:25.429: E/AndroidRuntime(8701): at java.lang.reflect.Method.invoke(Method.java:511)
07-30 15:26:25.429: E/AndroidRuntime(8701): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
07-30 15:26:25.429: E/AndroidRuntime(8701): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
07-30 15:26:25.429: E/AndroidRuntime(8701): at dalvik.system.NativeStart.main(Native Method)
这是我的 toast2.xml 文件...
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tl1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/blue"
android:paddingLeft="30dp"
android:paddingRight="30dp"
/>
</LinearLayout>
【问题讨论】:
-
如果你在膨胀代码中得到 NPE,原因似乎是因为 getActivity() 为空。那为什么它是空的?它通常与片段的生命周期有关。请检查一下。如果您仍然不知道为什么,请在加载 url 和片段生命周期代码时显示更多代码
-
@Minhtdh 请检查'@Niv'答案下的第 3 行段落。这对我有用.. 使用 FragmentActivity fragActivity = getActivity();
标签: android webview nullpointerexception layout-inflater android-toast