簡體   English   中英

我想開發瀏覽器應用程序,但出現錯誤

[英]I want to develop browser app but I am getting errors

我是 Android 新手我想開發一個瀏覽器應用程序,現在我正在嘗試開發它,在這方面我遇到了錯誤。 我還嘗試了另一種方法,它詢問您必須像那樣打開哪個瀏覽器,但對我來說,我只想在我的應用程序中打開。

WebviewActivity.java

package com.example.admin.fristapp;

import android.app.Activity;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebviewActivity extends Activity {
    WebView webview1;
   // String url = "http://www.google.com";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview);
        webview1 = (WebView) findViewById(R.id.webview1);
      //  webview1.loadUrl(url);

        //MyBrowser my ;

        new Background().execute();


    }

    public class MyBrowser extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }




    public class Background extends AsyncTask<String,String,String>
    {
        @Override
        protected void onPostExecute(String s)
        {
            super.onPostExecute(s);
        }
        @Override
        protected void onPreExecute()
        {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... strings)
        {
            search();
            return null;
        }
    }
    public void search()
    {
        webview1.setWebViewClient(new WebviewActivity.MyBrowser());
        String url = "http://www.google.com";
        webview1.getSettings().setJavaScriptEnabled(true);
        webview1.loadUrl(url);
    }
}

日志貓

java.lang.Throwable: A WebView method was called on thread 'AsyncTask #4'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {180a245b} called on null, FYI main Looper is Looper (main, tid 1) {180a245b})
                                                                            at android.webkit.WebView.checkThread(WebView.java:2290)

后編輯

import android.app.Activity;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebviewActivity extends Activity {
    WebView webview;
    String url = "http://www.google.com";

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

        webview =(WebView )findViewById(R.id.webview1);
                //WebView(WebviewActivity.this);
        webview.loadUrl(url);

        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return false;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);

                // Do your code when page finished
            }
        });

您正在使用doInBackground()方法在WebView中加載 url。 你應該在 UI 線程上做。

loadUrl()已經在異步執行所有操作。 所以不需要AsyncTask onCreate()方法中移動您的代碼。

如果你想顯示一個加載指示器,你需要使用如下:

WebView webview = new WebView(MainActivity.this);

webview.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {    
        view.loadUrl(url);    
         return false;
    }

    @Override
    public void onPageFinished(WebView view, String url) {
           super.onPageFinished(view, url);

           // Do your code when page finished
     }
});

webview.loadUrl(url);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM