Android在Asynctask之前检查网络连接

时间:2012-11-02 06:38:41

标签: android

任何人都可以请更正我的代码。我收到错误“FreeFragment " and "类型未定义方法getApplicationContext()方法getSystemService(String)未定义类型FreeFragment`”。我希望它在Asynctask Runs之前检查互联网连接。

public class FreeFragment extends SherlockListFragment implements
            ActionBar.TabListener {

        static final String URL = "https://myxml.xml";
        static final String KEY_SONG = "song";
        static final String KEY_ID = "id";
        static final String KEY_TITLE = "title";
        static final String KEY_CAT_ARTIST = "artistcat";
        static final String KEY_DURATION = "duration";
        static final String KEY_THUMB_URL = "thumb_url";
        static final String KEY_BIG_URL = "big_url";
        static final String KEY_CAT_URL = "cat_url";
        static final String KEY_DESC = "cat_desc";
        ArrayList<HashMap<String, String>> menuItems;
        ListAdapter adapter;

        private Fragment mFragment;

        @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            if (!isNetworkAvailable()) {
                Toast.makeText(getApplicationContext(),
                        "Internet Connection Required", Toast.LENGTH_SHORT).show();
                //finish(context);
            } else { 
            new loadListView().execute();
            }
            super.onActivityCreated(savedInstanceState);
        }


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

        public class loadListView extends AsyncTask<Integer, String, String> {

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

            @Override
            protected String doInBackground(Integer... args) {
                // updating UI from Background Thread
                menuItems = new ArrayList<HashMap<String, String>>();

                XMLParser parser = new XMLParser();
                String xml = parser.getXmlFromUrl(URL); // getting XML
                Document doc = parser.getDomElement(xml); // getting DOM element

                NodeList nl = doc.getElementsByTagName(KEY_SONG);
                // looping through all item nodes <item>
                for (int i = 0; i < nl.getLength(); i++) {
                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();
                    Element e = (Element) nl.item(i);
                    // adding each child node to HashMap key => value
                    map.put(KEY_ID, parser.getValue(e, KEY_ID));
                    map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
                    map.put(KEY_CAT_ARTIST, parser.getValue(e, KEY_CAT_ARTIST));
                    map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
                    map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));
                    map.put(KEY_BIG_URL, parser.getValue(e, KEY_BIG_URL));
                    map.put(KEY_CAT_URL, parser.getValue(e, KEY_CAT_URL));
                    map.put(KEY_DESC, parser.getValue(e, KEY_DESC));
                    // adding HashList to ArrayList
                    menuItems.add(map);
                }
                return null;
            }

            @Override
            protected void onPostExecute(String args) {

                if (getActivity() != null) {
                    adapter = new MainPageLazyAdapter(getActivity(), menuItems);
                    setListAdapter(adapter);

                    ListView lv = getListView();

                    lv.setOnItemClickListener(new OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
                            String thumburl;
                            String bigurl;
                            String caturl;
                            String title;
                            String desc;
                            String artist;
                            Intent in;

                            title = ((TextView) view.findViewById(R.id.title))
                                    .getText().toString();
                            artist = ((TextView) view.findViewById(R.id.artist))
                                    .getText().toString();
                            desc = ((TextView) view.findViewById(R.id.desc))
                                    .getText().toString();
                            thumburl = ((TextView) view
                                    .findViewById(R.id.thumb_image)).getText()
                                    .toString();
                            caturl = ((TextView) view.findViewById(R.id.cat))
                                    .getText().toString();
                            bigurl = ((TextView) view.findViewById(R.id.big_image))
                                    .getText().toString();

                            in = new Intent(getActivity(),
                                    SingleImageViewActivity.class);

                            in.putExtra(KEY_TITLE, title);
                            in.putExtra(KEY_DESC, desc);
                            in.putExtra(KEY_CAT_URL, caturl);
                            in.putExtra(KEY_THUMB_URL, thumburl);
                            in.putExtra(KEY_BIG_URL, bigurl);
                            in.putExtra(KEY_CAT_ARTIST, artist);
                            startActivity(in);

                        }
                    });
                }

            }
        }



        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            mFragment = new FreeFragment();
            ft.add(android.R.id.content, mFragment);
            ft.attach(mFragment);
        }

        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            ft.remove(mFragment);
        }

        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {

        }
    }

1 个答案:

答案 0 :(得分:1)

使用FreeFragment.getActivity()方法访问Fragment的Activity,之后获取Context和SystemService