2014-06-13 5 views
1

webView를 사용해야하고 응용 프로그램에 assets 폴더에 저장된 HTML 파일을 표시해야하는 응용 프로그램을 만들고 있습니다. 이것은 내 mainActivity 코드입니다.WebView 응용 프로그램을 실행하는 동안 오류 발생

public class MainActivity extends Activity { 


WebView browser; 

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

    browser = (WebView)findViewById(R.id.wv1); 
    browser.loadUrl("file:///android_asset/test.htm"); 
    WebSettings webSettings = browser.getSettings(); 
    browser.getSettings().setJavaScriptEnabled(true); 
     setContentView(browser); 

} 

}

이 내 xml 파일

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Test Application" 
    android:gravity="center_horizontal"> 

</TextView> 
<WebView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/wv1" 
    android:layout_marginTop="3dp"> 

</WebView> 

나는이 응용 프로그램을 실행하려고 whin입니다, 그것은 간다 충돌 .. this is the LogCat of errors when i run the application

수있는 하나는 내가하고있는 실수가 무엇인지 알아 내도록 도와주세요.

답변

3

browser이 이미 다른보기의 하위 인 - LinearLayout이기 때문에 setContentView(browser)을 호출 할 수 없습니다.

다른보기가 필요하지 않은 경우 레이아웃 xml 파일을 변경하고 제거하면됩니다 (WebView 만 남음). 그렇지 않으면 setContentView(browser) 행을 삭제하십시오.

+0

감사합니다. 이제 Matiash가 올바르게 작동합니다. – Devraj

0

setContentView()을 두 번 사용하고 이미 상위가있는보기를 제공하고 있습니다. 그것이 call removeView() on the child's parent first이라는 오류를주는 이유입니다. 따라서 setContentView(browser)을 삭제하십시오.

코드는 다음과 같아야합니다.

public class MainActivity extends Activity { 


WebView browser; 

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

     browser = (WebView)findViewById(R.id.wv1); 
     browser.loadUrl("file:///android_asset/test.htm"); 
     browser.getSettings().setJavaScriptEnabled(true); 

    } 

} 
+1

LogCat의 실제 의미를 이해할 수 있도록 도와 주신 Aniruddha에게 감사드립니다. 그리고 잘못 입력하지 않았습니다. 파일을 test.htm으로 저장했는데 .html 또는 .htm 중 한 가지 방법으로 저장할 수 있습니다. – Devraj

+0

마티 아시 (Matiash)가 49 분간 같은 답변을했습니다. 답안과 동일한 내용을 게시하는 대신 자신의 답을 표결 했어야합니다. 그것이 답변을 투표하는 전체 목적이며 SO가 어떻게 작동하는지 알려줍니다. – Javanator

+2

@Devraj 두 개의'setContentView()'는 예외의 실제 원인이 아니라는 것을 분명히하기 위해. 원하는만큼 여러 번 호출 할 수 있지만 이미 부모가있는 뷰는 제공 할 수 없습니다. 이것은 부모로부터 WebView를 먼저 제거한 경우에 효과적이었습니다 (이 문제를 해결하는 매우 둥근 방법이었을지라도). – matiash

관련 문제