2014-10-16 227 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; 
    } 


} 

,但它似乎是工作。但我不知道什么是生命周期中的问题,当应用程序正在睡觉时会出现什么问题。所以谢谢你的帮助:)