【问题标题】:Change Layout on setContentView according to my Internet Connection Status根据我的 Internet 连接状态更改 setContentView 的布局
【发布时间】:2016-09-10 06:53:17
【问题描述】:

我目前正在开发一个应用程序,我想在其中添加一项功能。当没有互联网时,活动的布局必须反之亦然。我在 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);
 }
}

Logcat 错误:

xxx/E/AndroidRuntime: 致命异常: main 进程:xxx,PID:6258 java.lang.RuntimeException:无法启动活动 ComponentInfo{xxx.xxx.xxxxxxx/xxx.xxx.xxxxxxx.view.RescuingActivity}:java.lang.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(Native Method) 在 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)

【问题讨论】:

  • 通过可见性在同一个布局文件中使用它
  • @JinalPatel 任何带有代码的小例子。
  • 这种方法没有错。你有什么问题?
  • 在一个 xml 文件中获取您想要的两个布局并触发侦听器以隐藏和显示广播接收器中的布局
  • @JinalPatel 请添加代码以显示此内容。

标签: android android-layout android-broadcastreceiver setcontentview


【解决方案1】:

试试这个功能

    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" />

【讨论】:

  • 伙计,我正在尝试根据状态在活动中设置布局,而不是这个。!!投反对票!!
【解决方案2】:

找到答案,尝试使用 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);
        }
    }
};

【讨论】:

    猜你喜欢
    • 2017-04-04
    • 2020-07-11
    • 2019-04-22
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2023-04-02
    • 2021-03-21
    相关资源
    最近更新 更多