获取网络图片,然后轮播。每获取一张图片都会连一次网。如果突然关闭网络就会报错

rushui-rc 发布于 2015/01/29 11:52
阅读 561
收藏 0

//MainActivity.class

public class MainActivity extends Activity {

    private final String HOST_ADDRESS = "http://p.xjdl.net";
    private final String RESOURCE_ADDRESS = "/lhapp/WebService.txt";
    private final String SERVER_ADDRESS = HOST_ADDRESS + RESOURCE_ADDRESS;
    private boolean loopPlayState = false;
    private List<WebServiceItem> mData = null;
    private List<ImageView> mImageViewList = null;
    private List<View> mViewList = null;
    private TextView mArticleTitle = null;
    private ViewPager mViewPager = null;
    private MyPagerAdapter adapter = null;
    private WebView mWebView;// webView调用
    private LinearLayout mCustomSpace = null;
    private Handler mHandler = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.initWidget();
    }

    private void initWidget() {
        // TODO Auto-generated method stub
        mViewPager = (ViewPager) this.findViewById(R.id.viewpager);
        mArticleTitle = (TextView) this.findViewById(R.id.article_title);
        mWebView = (WebView) this.findViewById(R.id.WebView);
        mCustomSpace = (LinearLayout) this.findViewById(R.id.custom_space);
        mHandler = new Handler();
        mData = new ArrayList<WebServiceItem>();
        mImageViewList = new ArrayList<ImageView>();
        mViewList = new ArrayList<View>();
        adapter = new MyPagerAdapter();
        loadData();
        mViewPager.setAdapter(adapter);

        // 设置一个监听器,当ViewPager中的页面改变时调用
        mViewPager.setOnPageChangeListener(new MyPageChangeListener());
    }

    private void loadData() {
        // TODO Auto-generated method stub
        new DownLoad(null).execute(SERVER_ADDRESS);
    }

    private final class ClickListener implements OnClickListener {

        private int mPosition;

        public ClickListener() {
            // TODO Auto-generated constructor stub
        }

        public ClickListener(int mPosition) {
            this.mPosition = mPosition;
        }

        @Override
        public void onClick(View v) {
            if (v instanceof ImageView) {
                String url = mData.get(mPosition).getmArticleUrl();
                Toast.makeText(MainActivity.this, url, 1).show();

                // 设置Javascript可用
                mWebView.getSettings().setJavaScriptEnabled(true);
                WebSettings mWebSettings = mWebView.getSettings();
                mWebSettings.setBuiltInZoomControls(true);
                mWebSettings.setSupportZoom(true);
                // 加载URL,但是不会显示。
                mWebView.loadUrl(url);
                // 调用setRequestedOrientation方法竖屏显示
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            } else {
                return;
            }

        }
    }

    private final class MyPagerAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mImageViewList.size();
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // TODO Auto-generated method stub
            ((ViewPager) container).removeView(mImageViewList.get(position));
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            // TODO Auto-generated method stub
            ImageView temp = mImageViewList.get(position);
            new DownLoad(temp).execute(mData.get(position).getmPictureUrl());
            ((ViewPager) container).addView(temp);
            return temp;
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            // TODO Auto-generated method stub
            return arg0 == arg1;
        }

    }

    private final class DownLoad extends AsyncTask<String, Void, Bitmap> {

        private ImageView mImageView;

        public DownLoad(ImageView imageView) {
            mImageView = imageView;
        }

        @Override
        protected Bitmap doInBackground(String... params) {
            // TODO Auto-generated method stub
            try {
                if (params[0].equals(SERVER_ADDRESS)) {
                    String json = (String) (Utils.getData(params[0],
                            String.class));
                    mData = Utils.fromJson(json);
                    mImageViewList.clear();
                    Log.e("图片地址", mData.get(0).getmPictureUrl());
                    Log.e("还原", Utils.toJson(mData));
                } else {
                    Bitmap bitmap = (Bitmap) (Utils.getData(params[0],
                            Bitmap.class));
                    return bitmap;
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            if (result != null) {
                mImageView.setImageBitmap(result);
                if (!loopPlayState) {
                    mArticleTitle.setText(mData.get(0).getmTitle());
                    mViewPager.setCurrentItem(0);
                    mHandler.postDelayed(loopPlay, 3000);
                    loopPlayState = true;
                }
            } else {
                for (int i = 0; i < mData.size(); i++) {
                    Log.e("JRSEN-MDATA", mData.size() + "");
                    ImageView imageView = new ImageView(MainActivity.this);
                    imageView.setLayoutParams(new LayoutParams(
                            LayoutParams.MATCH_PARENT,
                            LayoutParams.MATCH_PARENT));
                    imageView.setOnClickListener(new ClickListener(i));
                    mImageViewList.add(imageView);
                    View view = new View(MainActivity.this);
                    LayoutParams layoutParams = new LayoutParams(14, 14);
                    layoutParams.setMargins(3, 0, 3, 0);
                    view.setLayoutParams(layoutParams);
                    view.setBackgroundResource(R.drawable.dot_normal);
                    mCustomSpace.addView(view);
                    mViewList.add(view);
                }
                adapter.notifyDataSetChanged();
            }

        }

    }

    /**
     * 当ViewPager中页面的状态发生改变时调用
     *
     * @author Administrator
     *
     */
    private class MyPageChangeListener implements OnPageChangeListener {

        private int historyPosition = 0;

        /**
         * 当ViewPager中页面的状态发生改变时调用
         */
        public void onPageSelected(int position) {
            mArticleTitle.setText(mData.get(position).getmTitle());
            mViewList.get(historyPosition).setBackgroundResource(
                    R.drawable.dot_normal);
            mViewList.get(position).setBackgroundResource(
                    R.drawable.dot_focused);
            historyPosition = position;
        }

        public void onPageScrollStateChanged(int arg0) {
        }

        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }
    }

    Runnable loopPlay = new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            int position = mViewPager.getCurrentItem();
            if (position == (mData.size() - 1)) {
                position = 0;
                mViewPager.setCurrentItem(position);
            } else {
                mViewPager.setCurrentItem(++position);
            }
            P.error("position thread" + position + "mData" + mData.size());
            mHandler.postDelayed(loopPlay, 3000);
        }
    };

    /**
     * 该类为测试类
     *
     * @author Jrsen
     *
     */
    private final static class P {
        public static void error(Object str) {
            Log.e("JRSEN", (String) str);
        }
    }

}

//Utils.class

public class Utils {

    public static Object getData(String url_address, Class<?> c)
            throws Exception {
        URL url = new URL(url_address);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(5000);
        conn.setRequestMethod("GET");
        conn.setUseCaches(true);
        conn.connect();
        if (conn.getResponseCode() == 200) {
            byte[] b = readInputStream(conn.getInputStream());
            if (c == String.class) {
                String temp = new String(b);
                return temp;
            } else {
                Bitmap temp = BitmapFactory.decodeByteArray(b, 0, b.length);
                return temp;
            }
        }
        return null;
    }

    private static byte[] readInputStream(InputStream in) throws Exception {
        // TODO Auto-generated method stub
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] b = new byte[1024];
        int len = 0;
        while ((len = in.read(b)) != -1) {
            baos.write(b, 0, len);
        }
        in.close();
        return baos.toByteArray();
    }

    public static String toJson(Object object) {
        Gson gson = new Gson();
        String temp = gson.toJson(object);
        return temp;
    }

    public static List<WebServiceItem> fromJson(String jsonStr)
            throws Exception {
        Gson gson = new Gson();
        Type list = new TypeToken<List<WebServiceItem>>() {
        }.getType();
        List<WebServiceItem> data = gson.fromJson(jsonStr, list);
        return data;
    }

}

//WebServiceItem.calss

public final class WebServiceItem {

    private String mPictureUrl;
    private String mArticleUrl;
    private String mTitle;
    
    public WebServiceItem(String mPictureUrl, String mArticleUrl, String mTitle) {
        this.mPictureUrl = mPictureUrl;
        this.mArticleUrl = mArticleUrl;
        this.mTitle = mTitle;
    }

    public String getmPictureUrl() {
        return mPictureUrl;
    }

    public void setmPictureUrl(String mPictureUrl) {
        this.mPictureUrl = mPictureUrl;
    }

    public String getmArticleUrl() {
        return mArticleUrl;
    }

    public void setmArticleUrl(String mArticleUrl) {
        this.mArticleUrl = mArticleUrl;
    }

    public String getmTitle() {
        return mTitle;
    }

    public void setmTitle(String mTitle) {
        this.mTitle = mTitle;
    }
    
}

加载中
返回顶部
顶部