2014-10-16 229 views
-1

當我在某些設備上運行應用程序時,一切正常,但用戶通常使用的其他設備,但隨着時間的推移,應用程序將退出並在每次打開後寫入應用程序時不幸停止工作。卸載並重新安裝後,只能運行約10分鐘,然後再次出現相同的錯誤。當我報告玩這個錯誤時Google向我發佈了這條消息。有誰知道該怎麼辦?對不起,英文不好。Android應用程序關閉

java.lang.NullPointerException 
at www.clientbook.cz.ClientBook.controlWebUrl(ClientBook.java:92) 
at www.clientbook.cz.ClientBook.access$1(ClientBook.java:90) 
at www.clientbook.cz.ClientBook$ClientBookClient.onPageFinished(ClientBook.java:239) 
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:332) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:153) 
at android.app.ActivityThread.main(ActivityThread.java:5297) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
at dalvik.system.NativeStart.main(Native Method) 

這是我的功能controlWebUrl()

private void controlWebUrl(String url) { 
    //nastavení navigation 
    if(!url.contains("/index/login") && !url.contains("/index/register") && !url.contains("/index/wait") && !url.contains("/index/active") && !url.contains("/index/forgotpassword")){ 
    mDrawerList.setAdapter(menuListLogin); 
    login = true; 
} else{ 
    mDrawerList.setAdapter(menuList); 
    login = false; 
} 

if(url.contains("/index/login")){ 
    setTitle("Přihlášení"); 
} else if(url.contains("/index/register")){ 
    setTitle("Registrace"); 
} else if(url.contains("/index/forgotpassword")){ 
    setTitle("Zapomenuté heslo"); 
} else if(url.contains("/index/wait")){ 
    setTitle("Nepřišel vám e-mail ?"); 
} else if(url.contains("/index/profile")){ 
    setTitle("Můj profil"); 
} else if(url.contains("/clients/add")){ 
    setTitle("Přidat klienta"); 
} else if(url.contains("/clients/list")){ 
    setTitle("Seznam klientů"); 
} else if(url.contains("/clients/search")){ 
    setTitle("Hledat"); 
} else if(url.contains("/clients/map")){ 
    setTitle("Mapa klientů"); 
} else if(url.contains("/clients/show")){ 
    setTitle("Profil klienta"); 
} else if(url.contains("/clients/edit")){ 
    setTitle("Upravit klienta"); 
} else if(url.contains("/meetings")){ 
    setTitle("Schůzky"); 
} else if(url.contains("/forms")){ 
    setTitle("Dotazníky"); 
} else if(url.contains("/index/account")){ 
    setTitle("Můj účet"); 
} else if(url.contains("/index/settings")){ 
    setTitle("Nastavení"); 
} else if(url.contains("/index/search/type/sms")){ 
    setTitle("Hromadná SMS"); 
} else if(url.contains("/index/search/type/email")){ 
    setTitle("Hromadný E-mail"); 
} else if(url.contains("/index/search/type/dual")){ 
    setTitle("Hromadná SMS+E-mail"); 
} else if(url.contains("/index/search/type/history")){ 
    setTitle("Historie Hromadného rozesílání"); 
} else { 
    setTitle("ClientBook.cz"); 
} 

}

問題出在哪裏?函數必須有回報?

這是WebViewClient

private class ClientBookClient extends WebViewClient { 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView webview, String url) 
    {   
      if (!loadingFinished) { 
       redirect = true; 
      } 

     loadingFinished = false; 
     webview.loadUrl(url); 
     return true; 
    } 

    @Override 
    public void onPageStarted(WebView webview, String url, Bitmap favicon){ 
     loadingFinished = false; 
    } 


    @Override 
    public void onPageFinished(WebView webview, String url) { 
     controlWebUrl(mWebView.getUrl()); 
     if(!redirect){ 
      loadingFinished = true; 
     } 

     if(loadingFinished && !redirect && findViewById(R.id.connect).getVisibility() == View.GONE){ 
      findViewById(R.id.load_pb).setVisibility(View.GONE); 
      findViewById(R.id.load_text).setVisibility(View.GONE); 
      findViewById(R.id.connect).setVisibility(View.GONE); 
      mWebView.setVisibility(View.VISIBLE); 
     } else{ 
      if(findViewById(R.id.connect).getVisibility() == View.VISIBLE){ 
       findViewById(R.id.load_pb).setVisibility(View.GONE); 
      } 
      redirect = false; 
      //error = false; 
     }    


    } 

    public void onReceivedError(WebView view, int errorCod,String description, String failingUrl) { 
     if(errorCod == -1){ 
      mWebView.goBack(); 
     } else if(errorCod == -2){ 
      mWebView.setVisibility(View.GONE); 
      TextView error_text = (TextView) findViewById(R.id.load_text); 
      error_text.setText("Neumím pracovat bez internetu.."); 
      error_text.setVisibility(View.VISIBLE); 
      findViewById(R.id.connect).setVisibility(View.VISIBLE); 

     } 
    }  
} 
+0

你有一個空的指針在ClientBook中的方法controlWebUrl()在92行。 – zgc7009 2014-10-16 15:52:38

+0

你的url或你的mDrawerList是null。 – zgc7009 2014-10-16 17:01:58

回答

0

在您的手機,在菜單中,啓用Developer Options|Don't Save Activities這樣每次你把你的背景Activity它被摧毀。然後將您的應用程序放置在您的ClientBook活動(或任何其他活動)的後臺,然後進行恢復。您可能會遇到該異常並能夠進行調試。

0

聽起來像問題是變量的生命週期。當你的應用程序睡着了,操作系統進入並釋放一些內存。

你可以在你的onResume()中做一些空的檢查來幫助理解。基本上,你想檢查你的應用程序在睡着時還沒有被「清理」。

你可以做這樣的事情:

protected void onResume(){  
    super.onResume(); 

    if(important_val == null){ 
     initialize_app(); 
     return; 
    } 
} 
+0

什麼是重要價值?我使用一些教程來編寫這個應用程序。這個問題可能在webViewClient中,當我檢查加載url,然後顯示加載進度條或webView。這是我的代碼。 (有問題) – Peet 2014-10-16 16:19:59

+0

不管什麼值得到檢查在這裏:ClientBook.java:92。如果我冒險猜測,我會說網址或任何被傳入的URL。 – ChrisStillwell 2014-10-16 16:23:10

+0

因此,如果我理解正確,在重新啓動應用程序後,不存在變量URL。因此,條件if(url!= ..)失敗並且應用程序失敗? – Peet 2014-10-16 16:43:13

0

我加了一個條件,功能controlWebUrl()

private void controlWebUrl(String url) { 
    if(url!=null){ 
    //nastavení navigation 
    if(!url.contains("/index/login") && !url.contains("/index/register") && !url.contains("/index/wait") && !url.contains("/index/active") && !url.contains("/index/forgotpassword")){ 
     mDrawerList.setAdapter(menuListLogin); 
     login = true; 
    } else{ 
     mDrawerList.setAdapter(menuList); 
     login = false; 
    } 

    if(url.contains("/index/login")){ 
     setTitle("Přihlášení"); 
    } else if(url.contains("/index/register")){ 
     setTitle("Registrace"); 
    } else if(url.contains("/index/forgotpassword")){ 
     setTitle("Zapomenuté heslo"); 
    } else if(url.contains("/index/wait")){ 
     setTitle("Nepřišel vám e-mail ?"); 
    } else if(url.contains("/index/profile")){ 
     setTitle("Můj profil"); 
    } else if(url.contains("/clients/add")){ 
     setTitle("Přidat klienta"); 
    } else if(url.contains("/clients/list")){ 
     setTitle("Seznam klientů"); 
    } else if(url.contains("/clients/search")){ 
     setTitle("Hledat"); 
    } else if(url.contains("/clients/map")){ 
     setTitle("Mapa klientů"); 
    } else if(url.contains("/clients/show")){ 
     setTitle("Profil klienta"); 
    } else if(url.contains("/clients/edit")){ 
     setTitle("Upravit klienta"); 
    } else if(url.contains("/meetings")){ 
     setTitle("Schůzky"); 
    } else if(url.contains("/forms")){ 
     setTitle("Dotazníky"); 
    } else if(url.contains("/index/account")){ 
     setTitle("Můj účet"); 
    } else if(url.contains("/index/settings")){ 
     setTitle("Nastavení"); 
    } else if(url.contains("/index/search/type/sms")){ 
     setTitle("Hromadná SMS"); 
    } else if(url.contains("/index/search/type/email")){ 
     setTitle("Hromadný E-mail"); 
    } else if(url.contains("/index/search/type/dual")){ 
     setTitle("Hromadná SMS+E-mail"); 
    } else if(url.contains("/index/search/type/history")){ 
     setTitle("Historie Hromadného rozesílání"); 
    } else { 
     setTitle("ClientBook.cz"); 
    } 

    } else{ 
     return; 
    } 


} 

,但它似乎是工作。但我不知道什麼是生命週期中的問題,當應用程序正在睡覺時會出現什麼問題。所以謝謝你的幫助:)