Изменить макет на setContentView в соответствии с моим статусом подключения к Интернету

В настоящее время я работаю над приложением, где я хочу добавить функцию. Когда нет Интернета, макет активности должен измениться наоборот. Я не так хорош в Android, и я использовал этот код для своей маленькой идеи. Любая идея, как этого добиться. Когда я пытаюсь, приложение вылетает.

public class RescuingActivity extends AppCompatActivity {

private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(ConnectivityStatus.isConnected(getContext())){
            setContentView(R.layout.rescue_page);
        }else {
            setContentView(R.layout.no_connection);
        }
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getContext().registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
 }
}

Ошибка логарифма:

xxx/E/AndroidRuntime: НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: основной процесс: xxx, PID: 6258 java.lang.RuntimeException: невозможно запустить активность NullPointerException в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2221) в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2280) в android.app.ActivityThread.access$800(ActivityThread.java:141) в android. app.ActivityThread$H.handleMessage(ActivityThread.java:1202) на Android .os.Handler.dispatchMessage(Handler.java:102) в android.os.Looper.loop(Looper.java:136) в android.app.ActivityThread.main(ActivityThread.java:5059) в java.lang.reflect. Method.invokeNative(собственный метод) на java.lang.reflect.Method.invoke(Method.java:515) на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) на com.android. internal.os.ZygoteInit.main(ZygoteInit.java:601) в dalvik.system.NativeStart.main(собственный метод) Вызвано: java.lang.NullPointerException в com.kit.arescue.view.RescuingActivity.onCreate(RescuingActivity.java:90)


person Community    schedule 10.09.2016    source источник
comment
используйте это в том же файле макета по видимости   -  person Jinal Patel    schedule 10.09.2016
comment
@JinalPatel любой небольшой пример с кодом.   -  person    schedule 10.09.2016
comment
В этом подходе нет ничего плохого. Каков твой вопрос?   -  person earthw0rmjim    schedule 10.09.2016
comment
возьмите два макета в одном XML-файле, который вы хотите, и запустите листнер, чтобы скрыть и показать эти макеты в широковещательном приемнике   -  person Jinal Patel    schedule 10.09.2016
comment
@JinalPatel, пожалуйста, добавьте код, чтобы показать это.   -  person    schedule 10.09.2016
comment
@ user13 Я пытаюсь настроить макет в setContentView в соответствии со статусом сети. Когда я пробую текущий код, приложение вылетает.   -  person    schedule 10.09.2016
comment
@PrashantGupta, потому что ваш Fragment еще не подключен, поэтому findFragmentById() возвращает null.   -  person earthw0rmjim    schedule 10.09.2016
comment
@ user13, пожалуйста, уточните или предоставьте код для отладки.   -  person    schedule 10.09.2016


Ответы (2)


попробуй эту функцию

    public boolean isConnectingToInternet(){
    ConnectivityManager connectivity = (ConnectivityManager) Login_Page.this.getSystemService(Context.CONNECTIVITY_SERVICE);
      if (connectivity != null)
      {
          NetworkInfo[] info = connectivity.getAllNetworkInfo();
          if (info != null)
              for (int i = 0; i < info.length; i++)
                  if (info[i].getState() == NetworkInfo.State.CONNECTED)
                  {
                      try
                        {
                            HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection());
                            urlc.setRequestProperty("User-Agent", "Test");
                            urlc.setRequestProperty("Connection", "close");
                            urlc.setConnectTimeout(500); //choose your own timeframe
                            urlc.setReadTimeout(500); //choose your own timeframe
                            urlc.connect();
                            int networkcode2 = urlc.getResponseCode();
                            return (urlc.getResponseCode() == 200);
                        } catch (IOException e)
                        {
                            return (false);  //connectivity exists, but no internet.
                        }
                  }

      }
      return false;
}

и не забудьте добавить разрешения

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
person snehasish    schedule 10.09.2016
comment
Чувак, я пытаюсь установить макет в действии в соответствии со статусом, а не этим.!! минус!! - person ; 10.09.2016

Нашел ответ, пробовал работать с 2 представлениями.

 private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(!ConnectivityStatus.isConnected(getContext())){
            childLayoutRescuingActivity.setVisibility(INVISIBLE);
            childLayoutNoConnection.setVisibility(View.VISIBLE);
        }else {
            childLayoutRescuingActivity.setVisibility(View.VISIBLE);
            childLayoutNoConnection.setVisibility(INVISIBLE);
        }
    }
};
person Community    schedule 10.09.2016