2016-12-01 45 views
-2

我正在開發一個應用程序,我想檢查互聯網連接是否存在,然後它會執行任務,否則它會顯示錯誤消息,如沒有互聯網連接there.In此應用程序我我使用2個選項卡。我寫了一個代碼來檢查互聯網連接,但每當沒有連接時,我的應用程序崩潰。如何檢查Fragement選項卡中的互聯網連接

代碼主要活動:

 protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 
    if (!isNetworkAvailable()) { 
     Toast.makeText(getApplicationContext(), 
       "Internet Connection is Not Available", Toast.LENGTH_LONG).show(); 
     finish(); 
    } else { 


     if (getIntent().getExtras() != null) { 

      for (String key : getIntent().getExtras().keySet()) { 
       String value = getIntent().getExtras().getString(key); 

       if (key.equals("Tab_Notification") && value.equals("True")) { 
        Intent intent = new Intent(this, Tab_Notification.class); 
        intent.putExtra("value", value); 
        startActivity(intent); 
        finish(); 
       } 

      } 
     } 

     subscribeToPushService(); 



    final Handler mHandler = new Handler(); 


    final Runnable mUpdateResults = new Runnable() { 
      public void run() { 

       AnimateandSlideShow(); 

      } 
     }; 

     int delay = 1000; // delay for 1 sec. 

     int period = 15000; // repeat every 4 sec. 

     Timer timer = new Timer(); 

     timer.scheduleAtFixedRate(new TimerTask() { 

      public void run() { 

       mHandler.post(mUpdateResults); 

      } 

     }, delay, period); 


     SharedPreferences sharedpreferences = getSharedPreferences(SignIn.MyPREFERENCES, Context.MODE_PRIVATE); 

     final String e = sharedpreferences.getString(SignIn.email, ""); 

     toolbar = (Toolbar) findViewById(R.id.toolbar1); 

     tabLayout = (TabLayout) findViewById(R.id.tab_layout1); 

     viewPager = (ViewPager) findViewById(R.id.pager1); 
     i = (ImageView) findViewById(R.id.pinButton); 
     i.setOnClickListener(this); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayShowTitleEnabled(false); 
     tabLayout.addTab(tabLayout.newTab().setText("Super Market")); 
     tabLayout.addTab(tabLayout.newTab().setText("Shopping")); 
     tabLayout.addTab(tabLayout.newTab().setText("FOOD")); 
     tabLayout.addTab(tabLayout.newTab().setText("Cosmetics")); 
     tabLayout.addTab(tabLayout.newTab().setText("Medical")); 
     tabLayout.addTab(tabLayout.newTab().setText("Hotels")); 
     tabLayout.addTab(tabLayout.newTab().setText("Jewellery")); 

     tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

     fragmentAdapter = new FragmentAdapterClass(getSupportFragmentManager(), tabLayout.getTabCount()); 

     viewPager.setAdapter(fragmentAdapter); 

     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 

     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab LayoutTab) { 

       viewPager.setCurrentItem(LayoutTab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab LayoutTab) { 

      } 


      @Override 
      public void onTabReselected(TabLayout.Tab LayoutTab) { 

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

TAB1代碼:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View v = inflater.inflate(R.layout.activity_tab_1, container, false); 
    recyclerView = (RecyclerView) v.findViewById(R.id.recyclerview); 
    recyclerView.setHasFixedSize(true); 

    layoutManager = new LinearLayoutManager(getActivity()); 

    recyclerView.setLayoutManager(layoutManager); 
    mSwipeRefreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.swifeRefresh); 
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 

     @Override 
     public void onRefresh() { 


       getData(); 

       upcomingJobs.clear(); 
       upcomingJobs.addAll(upcomingJobs); 
       // fire the event 
       adapter.notifyDataSetChanged(); 


       // uAdapter.notifyDataSetChanged(); 
      } 


    }); 
    //Make call to AsyncTask 
    getData(); 

    return v; 
} 


private void getData() { 
    class GetData extends AsyncTask<Void, Void, String> { 
     ProgressDialog progressDialog; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      // progressDialog = ProgressDialog.show(getContext(), "Fetching Data", "Please wait...",false,false); 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      // progressDialog.dismiss(); 
      parseJSON(s); 


      mSwipeRefreshLayout.setRefreshing(false); 
     } 

     @Override 
     protected String doInBackground(Void... params) { 



      BufferedReader bufferedReader = null; 
      try { 
       URL url = new URL(Config.GET_URL); 
       HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
       StringBuilder sb = new StringBuilder(); 

       bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream())); 

       String json; 
       while ((json = bufferedReader.readLine()) != null) { 
        sb.append(json + "\n"); 
       } 

       return sb.toString().trim(); 

      } catch (Exception e) { 
       return null; 
      } 
     } 


    } 
    GetData gd = new GetData(); 
    gd.execute(); 
} 

public void showData() { 
    adapter = new CardAdapter(Config.offer, Config.offerprice, Config.bitmaps, Config.price, Config.urls); 

    recyclerView.setAdapter(adapter); 
    recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() { 
     @Override 
     public void onItemClick(View view, int position) { 
      Toast.makeText(getContext(), "Card at " + position + " is clicked", Toast.LENGTH_SHORT).show(); 
     } 
    })); 
} 


private void parseJSON(String json) { 
    try { 
     JSONObject jsonObject = new JSONObject(json); 
     JSONArray array = jsonObject.getJSONArray(Config.TAG_JSON_ARRAY); 

     config = new Config(array.length()); 

     for (int i = 0; i < array.length(); i++) { 
      JSONObject j = array.getJSONObject(i); 
      Config.offer[i] = getoffer(j); 
      Config.urls[i] = geturl(j); 
      Config.offerprice[i] = getofferprice(j); 
      Config.price[i] = getprice(j); 
      Config.urls[i] = geturl(j); 

     } 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    GetBitmap gb = new GetBitmap(getContext(), this, Config.urls); 
    gb.execute(); 
} 

private String getoffer(JSONObject j) { 
    String name = null; 
    try { 
     name = j.getString(Config.TAG_Offer); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return name; 
} 

private String getofferprice(JSONObject j) { 
    String name = null; 
    try { 
     name = j.getString(Config.TAG_Offerprice); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return name; 
} 

private String getprice(JSONObject j) { 
    String name = null; 
    try { 
     name = j.getString(Config.TAG_price); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return name; 
} 


private String geturl(JSONObject j) { 
    String url = null; 
    try { 
     url = j.getString(Config.TAG_IMAGE_URL); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return url; 
} 

的logcat:

FATAL EXCEPTION: main 
                    java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference 
                    at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116) 
                    at org.json.JSONTokener.nextValue(JSONTokener.java:94) 
                    at org.json.JSONObject.<init>(JSONObject.java:156) 
                    at org.json.JSONObject.<init>(JSONObject.java:173) 
                    at com.zaps.myrewards.Tab_1_Activity.parseJSON(Tab_1_Activity.java:144) 
                    at com.zaps.myrewards.Tab_1_Activity.access$300(Tab_1_Activity.java:31) 
                    at com.zaps.myrewards.Tab_1_Activity$1GetData.onPostExecute(Tab_1_Activity.java:92) 
                    at com.zaps.myrewards.Tab_1_Activity$1GetData.onPostExecute(Tab_1_Activity.java:78) 
                    at android.os.AsyncTask.finish(AsyncTask.java:632) 
                    at android.os.AsyncTask.access$600(AsyncTask.java:177) 
                    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
                    at android.os.Handler.dispatchMessage(Handler.java:102) 
                    at android.os.Looper.loop(Looper.java:145) 
                    at android.app.ActivityThread.main(ActivityThread.java:5938) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at java.lang.reflect.Method.invoke(Method.java:372) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) 
+0

請發佈您的logcat。 – adalPaRi

+0

請檢查我的更新代碼 – user

回答

0

創建新類Application_utlity(根據u)和把這個代碼在你類似那樣的

public class Application_utility { 

ConnectivityManager connectivityManager; 
NetworkInfo info; 

public boolean checkConnection(Context context) { 
    boolean flag = false; 
    try { 

     connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     info = connectivityManager.getActiveNetworkInfo(); 

     if (info.getType() == ConnectivityManager.TYPE_WIFI) { 

      System.out.println(info.getTypeName()); 
      flag = true; 
     } 

     if (info.getType() == ConnectivityManager.TYPE_MOBILE) { 
      System.out.println(info.getTypeName()); 
      flag = true; 
     } 

    } catch (Exception exception) { 

     System.out.println("Exception at network connection....." 
       + exception); 
    } 

    return flag; 
}} 

如果u要檢查在片段您的Internet連接,然後使用像在片段的方法檢查連接:

final boolean checkConnection=new Application_utility().checkConnection(getActivity()); 

if(!checkConnection) 
{ 

    Toast.makeText(getApplicationContext(),"No Internet Connection",Toast.LENGTH_LONG).show(); 

} 

else{ 

// your code here 

} 
0

通過傳遞您的片段上下文或父活動試試這個。

/** 
* Check Connection 
* 
* @param ctx 
* @return 
*/ 
public static boolean isConnectedToInternet(Context ctx) { 
    ConnectivityManager connectivityManager = (ConnectivityManager) ctx 
      .getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo ni = connectivityManager.getActiveNetworkInfo(); 
    return ni != null && ni.isAvailable() && ni.isConnected(); 
}