1

私はアンドロイドでウェブビューを作っています。私はアンドロイドの初心者です。私のコードの下で、次の問題に直面しています。

  1. 戻るボタンが機能しません。アプリケーションの別のページにアクセスして戻るボタンを押すと、機能せず、アプリケーションが停止したというエラーが表示され、モバイルのホーム画面に戻ります。

  2. 2番目に、ユーザーがこのアプリケーションを開いたときに、インターネットが接続されていないか機能していない場合、「このアプリケーションにはインターネット接続が必要です」などのアラートが表示され、デフォルトでバックグラウンドで指定されたバックグラウンドにwihotuインターネット接続が表示されます。インターネット接続が見つかった場合、このアプリは正常に動作します。

私はアンドロイドが初めてです。事前に、このヘルプに非常に感謝しています。以下の問題を修正するためのコードを回答に書いてください。前もって感謝します

package com.example.edarabia;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.webkit.WebView;
import android.webkit.WebSettings;
import android.webkit.WebViewClient;
import android.annotation.SuppressLint;
import android.view.KeyEvent;


@SuppressLint("SetJavaScriptEnabled")

public class MainActivity extends Activity {
WebView mywebview;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    WebView mywebview = (WebView) findViewById(R.id.webview);
        mywebview.loadUrl("http://www.grafdom.com/operations/projects/ma/edarabiaapp/");        
    WebSettings webSettings = mywebview.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setBuiltInZoomControls(true);
    mywebview.setWebViewClient(new WebViewClient());
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // Check if the key event was the Back button and if there's history
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mywebview.canGoBack()) {
        mywebview.goBack();
        return true;
    }

    return super.onKeyDown(keyCode, event);
}



}
4

4 に答える 4

0
  1. 削除する必要があります

    @Override
    public void onBackPressed (){
        if(webView.canGoBack()) webView.goBack();
        else super.onBackPressed();
    }
    

NullPointerException を回避します。なぜそのような実装を使用するのですか?
2.目的に合わせてそのような機能を使用できます。

    public boolean isOnline() {
       boolean res = false;
       ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
       NetworkInfo netInfo = cm.getActiveNetworkInfo();
       if (netInfo != null && netInfo.isConnectedOrConnecting()) {
           res= true;
       }
       else
       {
           Toast.makeText(context, "You've lost internet connection. Please check it and try again", Toast.LENGTH_LONG).show();
           res = false;
        }
       return res;
   }

そしてアクティビティで:

boolean isOnline = isOnline();
if (isOnline)
 {
      //What you want to do if there's a connection..
  }
于 2013-01-16T12:40:08.420 に答える
0

次のようなことができます。

1.戻るボタンの機能をオーバーライドする

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // Check if the key event was the Back button and if there's history
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }

2.アプリの起動時にインターネット接続を確認するには、次のコードを onCreate() 内に配置します

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = cm.getActiveNetworkInfo();
        if (info != null) {
            if (!info.isConnected()) {

                Toast.makeText(this,
                        "Please check your wireless connection and try again.",
                        Toast.LENGTH_LONG).show();

            }

            // if positive, fetch the articles in background
            else
                // Do your task...
        } else {
            Toast.makeText(this,
                    "Please check your wireless connection and try again.",
                    Toast.LENGTH_SHORT).show();
        }
于 2013-01-16T12:42:07.350 に答える
0

メインを初期化していないため、メソッドWebView webView;でそれを参照しているため、エラーが発生します。onBackPressed()

ファイルを次のように変更するだけです。

public class MainActivity extends Activity {
    WebView mywebview;   <<--- instead of webview use mywebview which you have declared in your onCreate.
   @Override
  protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     mywebview = (WebView) findViewById(R.id.webView1);
     mywebview.loadUrl("http://www.grafdom.com/operations/projects/ma/edarabiaapp/");        
     WebSettings webSettings = mywebview.getSettings();
     webSettings.setJavaScriptEnabled(true);
     webSettings.setBuiltInZoomControls(true);
     mywebview.setWebViewClient(new WebViewClient());
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
     // Inflate the menu; this adds items to the action bar if it is present.
     getMenuInflater().inflate(R.menu.activity_main, menu);
     return true;
 }
 @Override
 public void onBackPressed (){
 if(mywebview.canGoBack()) mywebview.goBack();
    else super.onBackPressed();  
 }
 }

2 番目のクエリの場合:

以下の方法でインターネット接続を確認できます。

 public static boolean IsNetConnected()
{
    boolean m_netConnected = false;
    try
    {
        ConnectivityManager m_connectivity = (ConnectivityManager) AppConstants.m_context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (m_connectivity == null)
        {
            Log.w(TAG, "couldn't get connectivity manager");
            m_netConnected = false;
        }
        else
        {
            NetworkInfo[] m_info = m_connectivity.getAllNetworkInfo();
            if (m_info != null)
            {
                for (int i = 0; i < m_info.length; i++)
                {
                    if (m_info[i].getState() == NetworkInfo.State.CONNECTED)
                    {
                        m_netConnected = true;
                    }
                }
            }
        }
    }
    catch (Throwable e)
    {
        ErrorReporter.getInstance().handleException(e);
        if (AppConstants.DEBUG)
        {
            Log.e(TAG, "IsNetConnected Error" + e.toString(), e);
            }
        m_netConnected = false;
    }
    return m_netConnected;
}

上記の方法を以下のように使用できます。

  if(!IsNetConnected())
    {
   showDialog(MainActivity.this,"This application required internet connection");
     //set your default background as per your requirements.
   }
于 2013-01-16T12:44:48.627 に答える