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

}

문제가 무엇입니까? 함수에 반환이 있어야합니까?

메뉴에서, Developer Options|Don't Save Activities을 활성화 휴대 전화에 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

92 번째 줄의 controlWebUrl() 메서드에서 ClientBook에 null 포인터가 있습니다. – zgc7009

+0

URL 또는 mDrawerList가 null입니다. – zgc7009

답변

0

그래서 때마다 당신은 넣어 당신이 파괴됩니다 Activity 배경에. 그런 다음 앱을 배경 (예 : ClientBook)에 넣은 다음 복원합니다. 아마 그 예외를 가지고 디버깅 할 수있을 것입니다.

0

문제는 변수의 수명주기와 비슷합니다. 앱이 잠 들어있는 동안 OS가 들어가서 메모리를 해제합니다.

이것을 잡기 위해 onResume()에서 일부 null 검사를 할 수 있습니다. 본질적으로 앱이 잠든 동안 '정리'되지 않았는지 확인하고 싶습니다.

당신은 같은 것을 할 수 있습니다

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

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

중요한 가치는 무엇입니까? 나는이 응용 프로그램을 작성하기위한 튜토리얼을 사용합니다. 문제는 아마도 WebViewClient에서로드 URL을 확인한 다음로드 진행률 표시 줄 또는 webView를 표시 할 때 발생합니다. 이것은 내 코드입니다. (위로 질문) – Peet

+0

여기에서 확인되는 모든 값 : ClientBook.java:92. 추측을 위험하게 만들려면 url 또는 URL로 전달되는 내용을 말하면됩니다. – ChrisStillwell

+0

그래서 제대로 이해하면 응용 프로그램을 다시 시작한 후에 변수 URL이 존재하지 않습니다. 따라서 조건 if (url! = ..)이 실패하고 응용 프로그램이 실패합니까? – Peet

0

내가()

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; 
    } 


} 

을 controlWebUrl를 작동하는 조건을 추가하고 아직이 일하게 될 것으로 보인다. 하지만 난 애플 리케이션이 자고있을 때 라이프 사이클과 문제가 무엇인지 알지 못한다. 도와 주셔서 감사합니다 :)