-5

私は Android 用のアプリを開発しています。アプリ開発は初めてです。このアプリでは、ボタンのクリックでインターネット接続をチェックし、結果をログ バッファに出力していますが、ネットワーク チェック ブール値で nullpointerexception が発生して強制的に閉じられます

私のコードは

public class Loginpage extends Activity {

private Context context;
private static String TAG = "DH";
private ConnectivityManager connManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_loginpage);
    Button button = (Button) findViewById(R.id.login);

    button.setOnClickListener(new OnClickListener()
    {
      public void onClick(View v)
      {
          if(networkisOk())
        {
                Log.e(TAG, "We have Internet!");
        }
        else
        {
            Log.e(TAG, "We don't have Internet!");
        }
      }
    });
}

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

public final boolean networkisOk()
{
    connManager = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo info = connManager.getActiveNetworkInfo();
    if (info != null)
        return info.isConnected(); // WIFI connected
    else
        return false;
}

}

デバッガーを使用すると、その Nullpointer 例外のブレークポイントが行に表示されます

connManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);

エラーは次のようになります

04-28 22:46:21.259: E/AndroidRuntime(26936): java.lang.NullPointerException
04-28 22:46:21.259: E/AndroidRuntime(26936):at  com.varun.dev_host.Loginpage.networkisOk(Loginpage.java:52)

これをどのように修正する必要があるかについて、誰かが私に手がかりを提供できますか?

4

2 に答える 2

1

contextメンバーの初期化を忘れているようです

AnActivityは のサブクラスでContextあるため、個別に宣言/初期化して使用する必要はありませんContext。代わりに行うだけです。

connManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
于 2013-04-28T17:33:40.530 に答える
0

このタイプのメソッドは、必ずユーティリティ メソッドとして作成してください。

public static boolean isNetworkAvailable(Context ctx) {
        boolean connected = false;

        ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);

        if (cm != null) {
            NetworkInfo[] netInfo = cm.getAllNetworkInfo();

            for (NetworkInfo ni : netInfo) {
                if ((ni.getTypeName().equalsIgnoreCase("WIFI") || ni.getTypeName().equalsIgnoreCase("MOBILE"))
                        && ni.isConnected()) {
                    connected = true;
                }
            }
        }
        return connected;
    }
于 2013-04-28T17:35:15.330 に答える