0

だから私はwebviewベースのアプリを持っています。私の質問は、OnReceivedErrorインターネットが失われたときに が呼び出されたときに、

ユーザーがダイアログで [OK] をクリックして接続を確認すると、

  • 接続が利用可能な場合は、アラートを閉じて電話をかけますweb.reload();
  • Web 接続 (wifi またはモバイル) がない場合は、電話してくださいfinish();

次の方法で解決:

  • アラート ダイアログの [ポジティブ] ボタンを次のように変更しました

    .setPositiveButton(R.string.alert_dialog_ok,new DialogInterface.OnClickListener() {         
     public void onClick(DialogInterface dialog,int id) {
    
  • 問題は次のとおりでした

    DialogInterface paramDialogInterface,int paramInt)
    

コンテキスト コンテキスト。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  this.context = this;
  ...
  @Override
public void onReceivedError(WebView view, int errorCode,
            String description, String failingUrl) {
        AlertDialog.Builder localBuilder2 = new AlertDialog.Builder(
                Webview_Main.this);
        localBuilder2.setTitle(R.string.webview_error_received_title);
        localBuilder2.setMessage(R.string.webview_error_received);
        localBuilder2.setIcon(R.drawable.ic_launcher);
        localBuilder2.setPositiveButton(R.string.alert_dialog_ok,new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int id) {
                 if(isNetworkAvailible(context))
                 web.reload();
                 else
                 finish();
         }
    };
        localBuilder2.show();
    };

isNetworkAvailible クラス

   public boolean isNetworkAvailible(Context ctx) {

    NetworkInfo info = (NetworkInfo) ((ConnectivityManager) ctx
            .getSystemService(Context.CONNECTIVITY_SERVICE))
            .getActiveNetworkInfo();

    if (info == null || !info.isConnected()) {
        return false;
    }
    if (info.isRoaming()) {
        // here is the roaming option you can change it if you want to
        // disable internet while roaming, just return false
        return false;
    }
    return true;
}
4

4 に答える 4

2

コード内のこのキーワードは DialogInterface.OnClickListener を参照しているため、getSystemService はその型に対して定義されていないため、現在のアクティビティを参照するコンテキスト変数から getSystemService を呼び出す必要があります。たとえば、次のようになります

context.getSystemService(Activity.CONNECTIVITY_SERVICE)
于 2013-04-19T22:43:27.063 に答える
1

私の答えを修正する:

    Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            this.context = this; 
    }


@Override
public void onReceivedError(WebView view, int errorCode,
            String description, String failingUrl) {
        AlertDialog.Builder localBuilder2 = new AlertDialog.Builder(
                Webview_Main.this);
        localBuilder2.setTitle(R.string.webview_error_received_title);
        localBuilder2.setMessage(R.string.webview_error_received);
        localBuilder2.setIcon(R.drawable.ic_launcher);
        localBuilder2.setPositiveButton(R.string.alert_dialog_ok,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface paramDialogInterface,int paramInt) {
                    if(haveInternet(context))
                        web.reload();
                    else
                        finish();
                }
            });
        localBuilder2.show();
    };

public boolean haveInternet(Context ctx) {

    NetworkInfo info = (NetworkInfo) ((ConnectivityManager) ctx
            .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();

    if (info == null || !info.isConnected()) {
        return false;
    }
    if (info.isRoaming()) {
        // here is the roaming option you can change it if you want to
        // disable internet while roaming, just return false
        return false;
    }
    return true;
}
于 2013-04-19T22:46:36.903 に答える
0

ネットワークの可用性を確認するには

あなたのアクティビティで

if(CheckNetwork.isInternetAvailable(ActvityName.this))// pass activity context
     {
             //do soemthing
     }  

非アクティビティ クラスでネットワークの可用性を確認する必要がある場合は、アクティビティ コンテキストをパラメーターとしてクラス コンストラクターに渡し、アクティビティ コンテキストを使用する必要があります。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second);
    MyAnotherClass = new MyAnotherClass(MainActivtity.this); 

}

MyAnotherClass で

    Class MyAnotherClass
      {
          Context context;
         public MyAnotherClass(Context activitycontext)
         {
             this.context= activitycontext;
             if(CheckNetwork.isInternetAvailable(context))
             {
                     //do something
             }
         }
      } 

CheckNetwork クラス

public class CheckNetwork {


private static final String TAG = CheckNetwork.class.getSimpleName();



public static boolean isInternetAvailable(Context context)
{
    NetworkInfo info = (NetworkInfo) ((ConnectivityManager)
    context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();

    if (info == null)
    {
         Log.d(TAG,"no internet connection");
         return false;
    }
    else
    {
        if(info.isConnected())
        {
            Log.d(TAG," internet connection available...");
            return true;
        }
        else
        {
            Log.d(TAG," internet connection");
            return true;
        }

    }
}
}
于 2013-04-20T04:23:54.030 に答える
0

私は大きな時間を逃しているかもしれませんが、あなたは を作成しているようですが、DialogInterface.OnClickListener何かを処理するために割り当てていないようです。

コードを変更してください:

    localBuilder2.setPositiveButton(R.string.alert_dialog_ok, null);

    localBuilder2.setOnClickListener(new DialogInterface.OnClickListener() {
        ...
    });
于 2013-04-19T22:52:39.527 に答える