如何在Android的Java类中处理Internet连接

如何在Android的Java类中处理Internet连接,android,tracking,internet-connection,Android,Tracking,Internet Connection,如果我的互联网连接不好或者我的连接断了,我不能在java类中处理它, 在活动中,我可以检查互联网连接,但这里没有, 所以我在跟踪的同时还要处理互联网连接 @Override public void onLocationChanged(Location location) { sharedPreferences = mContext.getSharedPreferences(PREFS_NAME, 0); editor = sharedPreferences.edit();

如果我的互联网连接不好或者我的连接断了,我不能在java类中处理它, 在活动中,我可以检查互联网连接,但这里没有, 所以我在跟踪的同时还要处理互联网连接

 @Override
public void onLocationChanged(Location location) {
    sharedPreferences = mContext.getSharedPreferences(PREFS_NAME, 0);
    editor = sharedPreferences.edit();
    emailSharedPref = sharedPreferences.getString("email", "");
    Log.e("emailLocation", emailSharedPref);
    Log.i("long", "" + location.getLongitude() + " TIME: " + t.time());
    getAdress(location.getLatitude(),location.getLongitude());
        JSONObject jsonObject = new JSONObject();
        URLPath urlPath = new URLPath();
        String serverURL = urlPath.trackEmployee;
        WebServiceRequest request = new WebServiceRequest();
        request.setUrl(serverURL);
        try {
            jsonObject.put("latitude", location.getLatitude());
            jsonObject.put("longitude", location.getLongitude());
            jsonObject.put("street", street);
            jsonObject.put("district", district);
            jsonObject.put("city", city);
            jsonObject.put("time", t.time());
            jsonObject.put("date", t.date());
            jsonObject.put("email", sharedPreferences.getString("email", ""));

            Log.e("jsonLocation", jsonObject.toString());
        } catch (JSONException e)
        {
            e.printStackTrace();

        }

        request.setRequestBody(jsonObject);
        WebServiceAsyncTask webService = new WebServiceAsyncTask();
        WebServiceRequest[] requestArr = {request};
        webService.execute(requestArr);


}


    public void getAdress(double longt, double lat) {
    try {
        addresses = geocoder.getFromLocation(longt, lat, 1);
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (addresses != null) {
        street = addresses.get(0).getAddressLine(0);
        district = addresses.get(0).getAddressLine(1);
        city = addresses.get(0).getAddressLine(2);
       connection="on";
        Log.d("connection",connection+".."+addresses.toString());
    }else{
        connection="off";
        Log.d("connection",connection);
    }
}
您可以使用ConnectionManager注册BroadcastReceiver,并执行操作ConnectionManager.CONNECTIVITY\u操作。如果连接发生变化,将发送广播事件。在onReceive方法中,您可以更新标志,并在方法中建立任何连接之前使用这些标志进行检查

例如

一种检查是否存在网络连接的简单方法

你可以在你想传递有效应用程序上下文的地方使用它

 /**
 * check for network connection
 */
public static boolean isOnline(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
注意:这不会解决您查询的网络资源的可达性问题

我建议在AsyncTask中使用HttpURLConnection,并尝试处理SocketTimeoutException以避免数据连接不良的问题

正如@tyler sebastian提出的:

  Handler mHandler;
  public void useHandler() {
    mHandler = new Handler();
    mHandler.postDelayed(mRunnable, 1000);
  }

  private Runnable mRunnable = new Runnable() {

      @Override
      public void run() {
          Log.e("Handlers", "Calls");
          /** Do something **/
          mHandler.postDelayed(mRunnable, 1000);
      }
  };
如何从处理程序中删除挂起的执行

mHandler.removeCallbacksmrunable; 如何重新安排

mHandler.PostDelayedRunnable,1000; Runnable在UI线程下工作,所以您可以在相应的Runnable中更新UserInterface

然后可以使用View.sendPostD

您应该编写一个runnable,以便每30秒运行或检查一次连接性我应该传入此函数的参数是什么?此class.java不是活动帮助:D@AyaRadwan-活动ActivityName.this、片段getActivity等中的任何上下文
  Handler mHandler;
  public void useHandler() {
    mHandler = new Handler();
    mHandler.postDelayed(mRunnable, 1000);
  }

  private Runnable mRunnable = new Runnable() {

      @Override
      public void run() {
          Log.e("Handlers", "Calls");
          /** Do something **/
          mHandler.postDelayed(mRunnable, 1000);
      }
  };