我有辦法每 15 秒測試一次互聯網連接。如果設備有互聯網連接,則不需要任何東西,但如果您沒有互聯網連接,我想調用 Fragment。崩潰。如果我無法從 AsyncTask 中調用片段,我可以從 MainActivity 中調用它。我不知道怎么做。檢查InternetAsyncTask.classpublic class CheckInternetAsyncTask extends AsyncTask<Void, Integer, Boolean> {private MainActivity activity; private Context context; public CheckInternetAsyncTask(Context context) { this.context = context; } @Override protected Boolean doInBackground(Void... params) { ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); assert cm != null; NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork != null && activeNetwork.isConnected(); if (isConnected) { try { InetAddress ipAddr = InetAddress.getByName("google.com"); //You can replace it with your name return !ipAddr.equals(""); } catch (Exception e) { Log.e("TAG", "Error checking internet connection"+ e.getMessage()); return false; } } else { //Log.d("TAG", "No network available!"); return false; } } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); //Log.d("TAG", "result" + result); if(result){ // do ur code Toast.makeText(context,"Device is connected to internet.", Toast.LENGTH_LONG).show(); } else { Toast.makeText(context,"Device is not connected to internet!",Toast.LENGTH_LONG).show(); EthernetControlFragment ethernetControlFragment = EthernetControlFragment.newInstance(); ethernetControlFragment.show(activity.getSupportFragmentManager(), "ethernet"); ethernetControlFragment.setCancelable(false); } }}
2 回答

滄海一幻覺
TA貢獻1824條經驗 獲得超5個贊
activity您從未設置異步任務的屬性。
你 AsyncTask 的構造函數應該是:
public CheckInternetAsyncTask(Activity activity) {
this.context = activity.getApplicationContext();
this.activity = activity;
}
并將您的任務稱為:
new CheckInternetAsyncTask(MainActivity.this).execute();

白衣染霜花
TA貢獻1796條經驗 獲得超10個贊
在 Giorgos 代碼的基礎上,嘗試這個小改動:
public CheckInternetAsyncTask(AppCompatActivity activity) {
this.context = activity.getApplicationContext();
this.activity = activity;
}
添加回答
舉報
0/150
提交
取消