AgentWeb 이 Kotlin 개발 사용 중 WebView 가 나타 난 onPageStarted 에서 favicon 이 비어 서 붕 괴 됩 니 다.

최신 프로젝트 에 서 는 AgentWeb 의 웹 뷰 패 키 징 라 이브 러 리 를 사 용 했 습 니 다.kotlin 언어 개발 시IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter favicon문제 가 발생 했 으 며 자바 언어 에 서 는 붕괴 되 지 않 습 니 다.
  • 장면:kotlin 개발 환경,AgentWeb 사용,WebActivity onCreate 에서 AgentWeb 초기 설정 은 다음 과 같 습 니 다
     //   AgentWeb  
            mAgentWeb = AgentWeb.with(this)
                .setAgentWebParent(
                    mLinearLayout, LinearLayout.LayoutParams(
                        ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT
                     )
                 )
                 .useDefaultIndicator()
                 .setWebChromeClient(mWebChromeClient)
                 .setWebViewClient(mWebViewClient)//    !!!!!!!!
                 .setMainFrameErrorView(R.layout.agentweb_error_page, -1)
                 .setSecurityType(AgentWeb.SecurityType.STRICT_CHECK)
     		.setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.ASK)//       ,              
                 .interceptUnkownUrl() //          Scheme
                 .createAgentWeb()
                 .ready()
                 .go("http://www.google.com")
    
  • 문 제 를 열 면WebActivity바로 무 너 집 니 다.오류 로 그 는 다음 과 같 습 니 다
    java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter favicon
            at com.zhiwei.services.webapp.BaseWebActivity$mWebViewClient$1.onPageStarted(Unknown Source:12)
            at com.just.agentweb.WebViewClientDelegate.onPageStarted(WebViewClientDelegate.java:80)
            at com.just.agentweb.DefaultWebClient.onPageStarted(DefaultWebClient.java:466)
            at xq.b(SourceFile:219)
            at alW.handleMessage(SourceFile:20)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:193)
    
    문 제 는onPagestarted함수 에서favicon필드 가 비어 있 고 kotlin 자체 호출 시 비 어 있 는 데이터 로 표시 되 어 있 으 며 지금 은 비어 있 기 때문에 붕 괴 를 일 으 킵 니 다.
  • 해결 방안
  • 특별한 처리 가 필요 하지 않 으 면 이 초기 화 설정
  • 을 제거 할 수 있 습 니 다.
  • 사용setWebViewClient이 필요 하 다 면 하나setWebViewClient
    .setWEbViewClient(mWebViewClient)
    .useMiddlewareWebClient(object:MiddlewareWebClientBase(){
        //      ,         ,          
        override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
                        //    bitmap,  favicon  ,     
                        val ff = favicon ?: ImageUtils.drawable2Bitmap(AppUtils.getAppIcon())
                        super.onPageStarted(view, url, ff)
                    }
    })
    
  • 를 동시에 설정 해 야 한다.
  • 원본 코드 수정useMiddlewareWebClient
    @Override
    	public void onPageStarted(WebView view, String url, Bitmap favicon) {
    		//     favicon  ,defaultWebClient   Activity    
            //   Activity   resource,     bitmap faicon,
            //  WebIconDatabase.getInstance().open(getDir("icons", MODE_PRIVATE).getPath());  web   
    		if (!mWaittingFinishSet.contains(url)) {
    			mWaittingFinishSet.add(url);
    		}
    		super.onPageStarted(view, url, favicon);
    
    	}
    
  • 원인 분석:kotlin 언어 에서 성명 되 지 않 은DefaultWebClient유형 이 있 으 면 비 어 있 는 것 으로 단정 되 기 때문에 전달 하 는 값 이bitmap:Bitmap?값 이면 붕 괴 됩 니 다.자바 의null표기 와 유사 한 반면null@NonNull,AgentWebDefaultWebClient함 수 는 모두WebViewClientdelegate파일 로 그 안에 하지 않 은onPageStarted비공 식 판단 이다.(안 드 로 이 드 웹 뷰 의 문제 인 것 같 습 니 다.
  • 좋은 웹페이지 즐겨찾기