【问题标题】:app stopped automatically once i click on a button. showing fatal exception一旦我点击一个按钮,应用程序就会自动停止。显示致命异常
【发布时间】:2016-01-08 06:14:33
【问题描述】:

我为简单的网络浏览器编写了代码,但是当我单击按钮时,应用程序停止显示消息“不幸的是,应用程序已停止”。它向我展示了致命的例外。

我已经发布了 logcat、java 代码以及布局。这三个都在同一个部分。

日志猫

    --------- beginning of crash
01-08 11:31:04.144    2603-2603/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.dell.firstapp, PID: 2603
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.webkit.WebView.loadUrl(java.lang.String)' on a null object reference
            at com.example.dell.firstapp.MyBrowser.onClick(MyBrowser.java:54)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
01-08 11:31:04.175    1242-1935/? W/ActivityManager﹕ Force finishing activity 1 com.example.dell.firstapp/.MyBrowser
01-08 11:31:04.603    1242-2595/? I/OpenGLRenderer﹕ Initialized EGL, version 1.4
01-08 11:31:04.850    1242-2595/? W/EGL_emulation﹕ eglSurfaceAttrib not implemented
01-08 11:31:04.850    1242-2595/? W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0x9f1d71a0, error=EGL_SUCCESS
01-08 11:31:04.975    1242-1260/? I/Choreographer﹕ Skipped 38 frames!  The application may be doing too much work on its main thread.
01-08 11:31:06.604    1242-1260/? W/ActivityManager﹕ Activity pause timeout for ActivityRecord{35c22eec u0 com.example.dell.firstapp/.MyBrowser t18 f}
01-08 11:31:06.614    1242-1260/? I/Choreographer﹕ Skipped 98 frames!  The application may be doing too much work on its main thread.
01-08 11:31:14.222    1242-1260/? W/ActivityManager﹕ Launch timeout has expired, giving up wake lock!
public class MyBrowser extends Activity implements View.OnClickListener{

    EditText url;
    WebView ourBrow;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.simplebrowser);

        WebView ourBrow=(WebView) findViewById(R.id.wvBrowser);
        ourBrow.getSettings().setJavaScriptEnabled(true);
        ourBrow.getSettings().setLoadWithOverviewMode(true);
        ourBrow.getSettings().setUseWideViewPort(true);

        ourBrow.setWebViewClient(new ourViewClient());
        try {
            ourBrow.loadUrl("http://www.google.com");
        }catch (Exception e){
            e.printStackTrace();
        }

        Button go=(Button) findViewById(R.id.bGo);
        Button back=(Button) findViewById(R.id.bBack);
        Button forward=(Button) findViewById(R.id.bFwd);
        Button refresh=(Button) findViewById(R.id.bRefresh);
        Button clearHistory=(Button) findViewById(R.id.bHistory);
        url=(EditText) findViewById(R.id.etURL);
        go.setOnClickListener(this);
        back.setOnClickListener(this);
        forward.setOnClickListener(this);
        refresh.setOnClickListener(this);
        clearHistory.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.bGo:
                String theWebsite=url.getText().toString();
                ourBrow.loadUrl(theWebsite);
                //Hiding the keyboard after using an EditText
                InputMethodManager imm=(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(url.getWindowToken(),0);
                break;
            case R.id.bBack:
                if(ourBrow.canGoBack())
                    ourBrow.goBack();
                break;
            case R.id.bFwd:
                if(ourBrow.canGoForward())
                    ourBrow.goForward();
                break;
            case R.id.bRefresh:
                ourBrow.reload();
                break;
            case R.id.bHistory:
                ourBrow.clearHistory();
                break;
        }
    }
}



    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <LinearLayout
        android:weightSum="100"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <EditText

            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/etURL"
            android:layout_weight="20" />
        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Go"
            android:id="@+id/bGo"
            android:layout_weight="80"
            android:layout_marginRight="16dp"/>
    </LinearLayout>
    <LinearLayout
        android:orientation="horizontal"
        android:weightSum="8"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bBack"
            android:text="Go back page"
            android:layout_weight="2"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bFwd"
            android:text="Go forward"
            android:layout_weight="2"
            />
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bRefresh"
            android:text="Refresh page"
            android:layout_weight="2"/>
        <Button android:text="clear History"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/bHistory"
            android:layout_weight="2"/>
    </LinearLayout>
    <WebView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/wvBrowser"></WebView>

</LinearLayout>

【问题讨论】:

  • 使用ourBrow=(WebView) findViewById(R.id.wvBrowser); 而不是WebView ourBrow=(WebView) findViewById(R.id.wvBrowser);

标签: android fatal-error crash


【解决方案1】:

你得到这个 nullPointer 的原因是你没有正确初始化你的 webview。 您为全局 WebView ourBrow 创建对象;并且您在onClick 方法ourBrow.loadUrl(theWebsite); 内部使用相同的方法。在这种情况下,您的 webview 仍然为空。

在您的 onCreate 方法中,您正在使用带有以下代码的 webview。

 WebView ourBrow=(WebView) findViewById(R.id.wvBrowser);

所以在 oncreate 方法中,您的代码没有得到nullPointer

解决方案:

只需更改此
WebView ourBrow=(WebView) findViewById(R.id.wvBrowser);

  ourBrow=(WebView) findViewById(R.id.wvBrowser);

注意: ρяσѕρєя K 已经在 cmets 中添加了解。我只是添加解释。

【讨论】:

    【解决方案2】:
    Please remove local declaration of webview object 'ourBrow' inside onCreate() method of activity. please replace your line 'WebView ourBrow=(WebView) findViewById(R.id.wvBrowser);' with 'ourBrow=(WebView) findViewById(R.id.wvBrowser);'.
    
    When you declare local webview object than the local object got initialize and global object will still null. And inside of onClick() method global object will access so it is got every time null.
    

    【讨论】:

      猜你喜欢
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 2022-11-05
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      相关资源
      最近更新 更多