2016-08-28 10 views
1

インターネット接続を開くときにインターネット接続をチェックするアプリを作成しようとしています。インターネット接続やメッセージがない限り、読み込み画面を表示したい。読み込み画面のアクティビティはactivity_main.xmlです。問題は、自分自身からLoggingInメソッドを呼び出しているため、インターネット接続が確立されるまでそれを繰り返し続けますが、問題は何らかの理由でアクティビティ自体が読み込まれないということです。空白の画面が表示されます。 LoggingInを実行しないと、アクティビティは機能します。インターネット接続を確認するときにアクティビティが読み込まれない

これを行う方法は他にありますか。

MainActivity.java:

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

public void LoggingIn() 
{ 
    if (isNetworkAvailable()) 
    { 
     if (findViewById(R.id.InternetConnection).getVisibility() == View.VISIBLE) 
     { 
      findViewById(R.id.InternetConnection).setVisibility(View.GONE); 
     } 
     AttemptLoggingIn(); 
    } 
    else 
    { 
     findViewById(R.id.InternetConnection).setVisibility(View.VISIBLE); 
     LoggingIn(); 


    } 
} 
private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager 
      = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
} 
+0

私はあなたが読むことを奨励し、[この](https://developer.android:

はConnectivityManagerは自動的に接続の詳細change.This記事はあなたのために本当に役立つことができたときにCONNECTIVITY_ACTIONアクションを放送します。 com/training/monitoring-device-state/connectivity-monitoring.html)を参照してください。あなたはあなたの方法でそれをチェックするのではなく、コールバックを使用することができます。乾杯 –

+0

これは何ですか?現在のチェック? – Vyacheslav

+0

@AugustoCarmoコールバックの使用はどういう意味ですか?私はまだインターネット接続を絶えずチェックしたいのですが、この場合はコールバックを使ってどのように役立ちますか?あなたの時間をありがとう! – morha13

答えて

1

使用し、バックグラウンドスレッドの代わりに、あなたの非常に奇妙な方法。例えば

、あなたがネットワークの変更を監視するためにLoggingIn()を呼び出す必要はありません

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


    private boolean startCheck() { 
     new Thread(new Runnable() { 

         @Override 
         public void run() { 
     runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
          findViewById(R.id.InternetConnection).setVisibility(View.VISIBLE); 
        } 
       }); 

     while(!isNetworkAvailable()) { 

     try { 
            Thread.sleep(100L);// 100 ms sleep 
           } catch (InterruptedException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
           } 
     } 
     runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         if (findViewById(R.id.InternetConnection).getVisibility() == View.VISIBLE) 
       { 
        findViewById(R.id.InternetConnection).setVisibility(View.GONE); 
       } 
       AttemptLoggingIn(); 
        } 
       }); 

     } 
        }).start(); 
    } 
+0

ありがとうございました!私はあなたがここで何をしたのかまだ分かりませんが、それを修正しました!今私はあなたがここで行ったことを読むつもりです:P – morha13

+0

笑。ネットワークが変更されたときにのみユーザーインターフェイスに触れる別のスレッドを開始することです。 – Vyacheslav

+0

基本的にインターネット接続が存在しない限り、途中でループを繰り返しています。 – morha13

関連する問題