检查是否有互联网连接 [英] Checking if there is internet connection

查看:35
本文介绍了检查是否有互联网连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想问一些我在我的应用中不明白的问题.我从我的服务器获取一些数据,并使用谷歌的 Volley 库将它们显示在回收站视图中.到目前为止一切顺利:)

I would like to ask something that I don't understand in my app. I get some data from my server and display them in a recyclerview using the google's Volley library. So far so good:).

接下来,我从列表中获取这些数据,并通过内容提供程序将它们添加到 SQLite.最后,如果没有互联网连接,我应该从手机的存储库中读取它们(现在我应该收到一条 Toast 消息,说明没有互联网连接).这是事情.当我关闭 wifi 时,NoInternet 活动不会启动.但是,当我将手机置于飞行模式时,NoInternet 活动会启动.这是我的代码.

Next I get those data from the list and add them to SQLite via a content provider. And finally if there is no internet connection,I should read them from the phone's repository(for now I should get a Toast message stating that there is no internet connection). Here is the thing. When I turn off the wifi the NoInternet Activity doesn't launch. However when I put my phone in Airplane mode the NoInternet Activity does launch. Here is my code.

public class AnnouncementsFragment extends Fragment {
public String titleForContentProvider;
public String imageForContentProvider;
public String articleForContentProvider;
public static final String TAG = "AelApp";
private ArrayList<MyModel> listItemsList;
private static final String IMAGE_URL = "http://www.theo-android.co.uk/ael/cms/announcement_images/";
RecyclerView myList;
private AnnouncementsAdapter adapter;

public AnnouncementsFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    getActivity().setTitle("Ανακοινώσεις");

    View rootView = inflater.inflate(R.layout.fragment_announcements, container, false);
    listItemsList = new ArrayList<>();

    myList = (RecyclerView) rootView.findViewById(R.id.listview_announcements);
    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
    myList.setHasFixedSize(true);
    myList.setLayoutManager(linearLayoutManager);
    adapter = new AnnouncementsAdapter(getActivity(), listItemsList);
    myList.setAdapter(adapter);

    if (isOnline()) {
        updateAnnouncementsList();
    }else{
        Intent i = new Intent(getActivity(), NoInternet.class);
        startActivity(i);
    }

    return rootView;
}
public void updateAnnouncementsList() {
    listItemsList.clear();


    // Instantiate the RequestQueue.
    RequestQueue queue = Volley.newRequestQueue(getActivity());

    // Request a string response from the provided URL.
    JsonArrayRequest jsObjRequest = new JsonArrayRequest(Request.Method.GET, URL.GET_ANNOUNCEMENTS, new Response.Listener<JSONArray>() {

        @Override
        public void onResponse(JSONArray response) {

            Log.d(TAG, response.toString());
            //hidePD();

            // Parse json data.
            // Declare the json objects that we need and then for loop through the children array.
            // Do the json parse in a try catch block to catch the exceptions
            try {

                for (int i = 0; i < response.length(); i++) {

                    JSONObject post = response.getJSONObject(i);

                    MyModel item = new MyModel();
                    item.setTitle(post.getString("title"));
                    item.setImage(IMAGE_URL + post.getString("announcement_image"));
                    item.setArticle(post.getString("article"));

                    listItemsList.add(item);
                    //Getting the string values out of the JSON response.
                    titleForContentProvider = post.getString("title");
                    imageForContentProvider = post.getString("announcement_image");
                    articleForContentProvider = post.getString("article");
                    //I added them as a key value pair.
                    ContentValues values = new ContentValues();
                    values.put(AELProvider.title,titleForContentProvider);
                    values.put(AELProvider.image,imageForContentProvider);
                    values.put(AELProvider.article,articleForContentProvider);
                    //A Content Resolver that allows the app to
                    //to insert data to the database after
                    //using the Uri defined in the Content Provider
                    Uri uri = getActivity().getContentResolver().insert(AELProvider.CONTENT_URL, values);
                    Log.d("Announcements",uri.toString());
                    Toast.makeText(getContext(), "Announcement added", Toast.LENGTH_LONG)
                            .show();

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

            // Update list by notifying the adapter of changes
            adapter.notifyDataSetChanged();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
            //hidePD();
        }
    });
    queue.add(jsObjRequest);

}

protected boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager)getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    } else {
        return false;
    }
}
}

有什么想法吗?

谢谢,

西奥.

推荐答案

创建一个CheckInternet Java类并调用它的方法

create a CheckInternet Java class and call its method

public class CheckInternet {

    public static boolean isNetwork(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }

    public static boolean isConnectedNetwork(Context context) {
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(
                Context.CONNECTIVITY_SERVICE);
        return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo()
                .isConnectedOrConnecting();
    }

}

在您的活动中

 if (CheckInternet.isNetwork(Activity.this)) {
     //internet is connected do something
 } else { 
    //do something, net is not connected
 }

这篇关于检查是否有互联网连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆