1

http://developer.android.comの素材を使用してアンドロイドで開発を始めています。

私のアプリケーションが Web ページに接続できるように、彼らの例の 1 つを取り上げて修正しました。開いているときはうまく機能しますが、別のページを開くべきactionBarアイテムをクリックすると、新しいページはWebViewで開かれませんが、デフォルトのブラウザが起動されます。

私はそれを回避する方法を理解するために多くの方法を試みましたが、私のわずかな経験では問題を解決することはできませんでした.

手伝って頂けますか?

どうもありがとう。ニノ

public class MainActivity extends Activity {
    public static final String WIFI = "Wi-Fi";
    public static final String ANY = "Any";
    public static String PAGINA ="http://www.kibao.org/simu/wap.php?lng=";    
    public static String BASE ="http://www.kibao.org";
    public static String ATTUALE ="";
    public static String lng = "";
    final Context context = this;

    private static boolean wifiConnected = false;
    private static boolean mobileConnected = false;
    public static boolean refreshDisplay = true;
    public static String sPref = null;

    public static String pagina = "";

    private NetworkReceiver receiver = new NetworkReceiver();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        lng = getResources().getString(R.string.lng);
        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        receiver = new NetworkReceiver();
        this.registerReceiver(receiver, filter);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    @Override
    public void onStart() {
        super.onStart();

        SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);

        sPref = sharedPrefs.getString("listPref", "Wi-Fi");

        updateConnectedFlags();


        if (refreshDisplay) {
            ATTUALE=PAGINA.concat(lng);
            loadPage(ATTUALE);
        }
    }
    @Override
    public void onDestroy() {
        super.onStop();
        String ciao = getResources().getString(R.string.ciao);
        show_toast(ciao);
        if (receiver != null) {
           this.unregisterReceiver(receiver);
        }
    }
    private void updateConnectedFlags() {
        ConnectivityManager connMgr =
            (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo activeInfo = connMgr.getActiveNetworkInfo();
        if (activeInfo != null && activeInfo.isConnected()) {
            wifiConnected = activeInfo.getType() == ConnectivityManager.TYPE_WIFI;
            mobileConnected = activeInfo.getType() == ConnectivityManager.TYPE_MOBILE;
        } else {
            wifiConnected = false;
            mobileConnected = false;
        }
    }

    private void loadPage(String pgUrl) {
        if (((sPref.equals(ANY)) && (wifiConnected || mobileConnected))
            || ((sPref.equals(WIFI)) && (wifiConnected))) {
            new DownloadWebpageTask().execute(pgUrl);
        } else {
            showErrorPage();
        }
    }

   // Displays an error if the app is unable to load content.
   private void showErrorPage() {
        .... 
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.items, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

    // Handle item selection
    switch (item.getItemId()) {
    case R.id.menu1:
        if (refreshDisplay) {

            ATTUALE=BASE.concat("/partite.php?lng=");
            ATTUALE=ATTUALE.concat(lng);
            loadPage(ATTUALE);
        }
        return true;
    ....
    default:
        return super.onOptionsItemSelected(item);
    }

    }
    private InputStream downloadUrl(String urlString) throws IOException {
        URL url = new URL(urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000 /* milliseconds */);
        conn.setConnectTimeout(15000 /* milliseconds */);
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        conn.connect();
        InputStream stream = conn.getInputStream();
        return stream;
   }

    public class NetworkReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
           ConnectivityManager connMgr =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
            if (WIFI.equals(sPref) && networkInfo != null
                && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
                refreshDisplay = true;
                Toast.makeText(context, R.string.wifi_connected, Toast.LENGTH_SHORT).show();
            } else if (ANY.equals(sPref) && networkInfo != null) {
                refreshDisplay = true;
            } else {
                refreshDisplay = false;
                Toast.makeText(context, R.string.lost_connection, Toast.LENGTH_SHORT).show();
            }
        }
    }

    private class DownloadWebpageTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... urls) {
            try {
            return loadWebpageFromNetwork(urls[0]);
            } catch (IOException e) {
                return getResources().getString(R.string.connection_error);
            }
        }

        @Override
        protected void onPostExecute(String result) {
            setContentView(R.layout.main);
            WebView myWebView = (WebView) findViewById(R.id.webview);
            myWebView.loadUrl(ATTUALE);            
        }
    }
    private String loadWebpageFromNetwork(String urlString) throws IOException {
        InputStream stream = null;
        try {
            stream = downloadUrl(urlString);
            pagina = getStringFromInputStream(stream);
        } finally {
            if (stream != null) {
                stream.close();
            }
        }
    return pagina;
    }
    private static String getStringFromInputStream(InputStream is) {
        BufferedReader br = null;
        StringBuilder sb = new StringBuilder();

        String line;
        try {

        br = new BufferedReader(new InputStreamReader(is));
        while ((line = br.readLine()) != null) {
            sb.append(line);
        }

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    return sb.toString();

}        
........
}
4

2 に答える 2

0

この DownloadWebpageTask は、Web ビューを使用して Web ページを文字列に「ダウンロード」しようとします。これは正しい方法ではありません。間違ったチュートリアルを使用しています。これには AsyncTasks を使用しないでください。これを使用して、最初からやり直します。

http://developer.android.com/reference/android/webkit/WebView.html

また

http://www.mkyong.com/android/android-webview-example/

別のページをロードする場合は、別の URL を使用して webview.loadUrl(url) を再度呼び出すだけです。それはそれと同じくらい簡単です。

于 2013-08-26T20:12:03.167 に答える
0

うまくいく別の解決策を見つけました。行を追加しました

 myWebView.setWebViewClient(new WebViewClient()); 

onPostExecute で:

protected void onPostExecute(String result) {
        setContentView(R.layout.main);
        WebView myWebView = (WebView) findViewById(R.id.webview);
        myWebView.setWebViewClient(new WebViewClient());
        myWebView.loadUrl(ATTUALE);            
}

ありがとう、フランク。

PS フランクの最後の投稿にコメントを追加しようとしましたが、成功しませんでした!

于 2013-08-27T06:04:00.677 に答える