마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

웹뷰로 연결되는 버튼을 누르면 앱이 계속 죽는데 왜 그럴까요???

0 추천
//        화면전환 (주소 검색버튼 누르면 주소검색 화면)
        search_button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this , SearchActivity2.class);
                startActivity(intent);
            }
        });

메인액티비티에서 이 코드를 통해 버튼을 누르면 화면을 전환해주면 

웹뷰가 나타나는 액티비티로 연결됩니다.

 

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class SearchActivity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search2);


        WebView webView = findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.addJavascriptInterface(new BridgeInterface(), "Android");
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageFinished(WebView view, String url) {
                // Android -> Javascript 함수 호출
                webView.loadUrl("javascript:sample2_execDaumPostcode();");
            }
        });

        //최초 웹뷰 로드
        webView.loadUrl("https://searchadderess.web.app");

    }

    //웹뷰에서 불러옴
    private class BridgeInterface {
        @JavascriptInterface
        public void processDATA(String data){
            //카카오 주소 검색 결과 API의 결과값이 브릿지 통로를 통해 전달받는다.(from JavaScript)
            Intent intent = new Intent();
            intent.putExtra("data", data);
            setResult(RESULT_OK, intent);
            finish();
        }
    }
}

 

 

웹뷰가 나타나는 액티비티 코드 입니다.

 

2022-05-19 23:51:02.684 12132-12132/? E/Zygote: isWhitelistProcess - Process is Whitelisted
2022-05-19 23:51:02.686 12132-12132/? E/Zygote: accessInfo : 1
2022-05-19 23:51:02.726 12132-12132/? E/e.myapplicatio: Unknown bits set in runtime_flags: 0x8000
2022-05-19 23:51:03.310 12132-12132/com.example.myapplication E/MapViewLocationManager: init failed
2022-05-19 23:52:01.486 12132-12132/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.myapplication, PID: 12132
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.SearchActivity2}: java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.webkit.WebView
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3488)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3635)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2175)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:7860)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
     Caused by: java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.webkit.WebView
        at com.example.myapplication.SearchActivity2.onCreate(SearchActivity2.java:19)
        at android.app.Activity.performCreate(Activity.java:7955)
        at android.app.Activity.performCreate(Activity.java:7944)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3463

이건 로그캣 에러 메세지입니다

 

녜원 (120 포인트) 님이 2022년 5월 20일 질문

1개의 답변

0 추천
에러메세지에 원인이 명확하게 나와있네요.

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.SearchActivity2}: java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.webkit.WebView

레이아웃에 있는 뷰는 ConstraintLayout인데 소스에서는 이걸 웹뷰로 처리하고 계신듯. 아무래도ID가  webView인 뷰가 WebView가 아니라 ConstratintLayout인 것 처럼 보이네요. 레이아웃 파일을 잘 확인해 보시면 해결이 될 것 같아 보이네요.
spark (226,420 포인트) 님이 2022년 5월 20일 답변
...