gengxin

来源:互联网 发布:2017全球宏观经济数据 编辑:程序博客网 时间:2024/05/16 16:11
package com.bwie.test;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import com.bwie.test.adapter.YuAdapter;
import com.bwie.test.view.XListView;
import com.bwie.test.view.XListView.IXListViewListener;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.util.Xml;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity implements IXListViewListener {

    private Button ban;
    private XListView lv;
    String tag = "刷新";
    int index = 20;
    private String name;
    private YuBean mBean;
    private List<YuBean> list;
    private List<YuBean> mList;
    private UpdateEntity updateEntity;
    private AlertDialog dialog;
    Handler h = new Handler() {
        private YuAdapter mAdapter;

        public void handleMessage(android.os.Message msg) {
            if (msg.what == 2) {
                String shu = (String) msg.obj;
                mList = new ArrayList<YuBean>();
                ByteArrayInputStream is = new ByteArrayInputStream(
                        shu.getBytes());
                XmlPullParser parser = Xml.newPullParser();
                try {
                    //解析数据
                    parser.setInput(is, "utf-8");
                    int type = parser.getEventType();
                    while (type != parser.END_DOCUMENT) {
                        name = parser.getName();
                        switch (type) {
                        case XmlPullParser.START_TAG:
                            if (name.equals("news")) {
                                mBean = new YuBean();
                            } else if ("id".equals("name")) {
                                mBean.setId(parser.nextText());
                            } else if ("title".equals(name)) {
                                mBean.setTitle(parser.nextText());
                            } else if ("body".equals(name)) {
                                mBean.setBody(parser.nextText());
                            } else if ("author".equals(name)) {
                                mBean.setAuthor(parser.nextText());
                            } else if ("pubDate".equals(name)) {
                                mBean.setPubDate(parser.nextText());
                            }
                            break;
                        case XmlPullParser.END_TAG:
                            if ("news".equals(name)) {
                                mList.add(mBean);
                            }
                            break;
                        }
                        type = parser.next();
                    }
                    if (tag.equals("刷新")) {
                        list.addAll(0, mList);
                    } else {
                        list.addAll(mList);
                    }
                    getAdapter();
                } catch (XmlPullParserException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } else if (msg.what==0) {
                dialog.show();  
            }else if (msg.what==1) {
                downLoadApk();
            }
        }

        private void getAdapter() {
            if (mAdapter == null) {
                mAdapter = new YuAdapter(MainActivity.this, mList);
                lv.setAdapter(mAdapter);
            } else {
                mAdapter.notifyDataSetChanged();
            }
        };
    };
    private DialogInterface.OnClickListener onclick;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (XListView) findViewById(R.id.lv);
        ban = (Button) findViewById(R.id.ban);
        list = new ArrayList<YuBean>();
        lv.setPullLoadEnable(true);
        lv.setXListViewListener(this);
        Asy(tag);
        //设置更新监听
        ban.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                dialog = new AlertDialog.Builder(MainActivity.this)
                        .setTitle("开源中国客户端团队致力于提供优质服务,提高用户体验!如果您喜欢,请考虑给予我们五星好评!您的肯定,是开源中国不断进步的动力。 <br/><br>大小:7.80M")
                        .setPositiveButton("立即更新", onclick)
                        .setNegativeButton("以后再说", null).create();
                new Thread(new CheckVersionTask()).start();
            }
        });
        onclick = new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                h.sendEmptyMessage(1);
            }

        };
    }

    //请求XML数据
    private void Asy(final String str) {
        // TODO Auto-generated method stub
        final String path = "http://www.oschina.net/action/api/news_list?catalog=1&pageIndex=0&pageSize="
                + index;
        new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                try {
                    URL url = new URL(path);
                    HttpURLConnection connection = (HttpURLConnection) url
                            .openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(5000);
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200) {
                        BufferedReader br = new BufferedReader(
                                new InputStreamReader(connection
                                        .getInputStream()));
                        String s = null;
                        StringBuilder sb = new StringBuilder();
                        while ((s = br.readLine()) != null) {
                            sb.append(s);
                        }
                        Message msg = Message.obtain();
                        msg.what = 2;
                        msg.obj = sb.toString();
                        h.sendMessage(msg);
                    }
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }).start();
    }

    private void inlonder() {
        lv.stopLoadMore();
        lv.stopRefresh();
        lv.setRefreshTime("更更");
    }

    //刷新
    @Override
    public void onRefresh() {
        // TODO Auto-generated method stub
        h.postDelayed(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                list.clear();
                index = index + 10;
                Asy(tag);
                inlonder();
            }
        }, 2000);
    }

    //加载
    @Override
    public void onLoadMore() {
        // TODO Auto-generated method stub
        h.postDelayed(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                index = index + 10;
                tag = "加载";
                Asy(tag);
                inlonder();
            }
        }, 2000);
    }

    /*
     * 从服务器中下载APK
     */
    protected void downLoadApk() {
        final ProgressDialog pd; // 进度条对话框
        pd = new ProgressDialog(this);
        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        pd.setMessage("正在下载更新");
        pd.show();
        new Thread() {
            @Override
            public void run() {
                try {
                    File file = getFileFromServer(updateEntity.getDownloadUrl(), pd);
                    sleep(3000);
                    UpdateTools tools = new UpdateTools();
                    // 安装APk
                    tools.installApk(file, MainActivity.this);
                    pd.dismiss(); // 结束掉进度条对话框
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }

    public class CheckVersionTask implements Runnable {

        public void run() {
            try {
                // 从资源文件获取服务器 地址
                String path = getResources().getString(R.string.serverurl);
                // 包装成url的对象
                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection) url
                        .openConnection();
                conn.setConnectTimeout(5000);
                InputStream is = conn.getInputStream();
                updateEntity = UpdateTools.getUpdataInfo(is);
                // 当前版本号
                int versionCode = MainActivity.this.getPackageManager()
                        .getPackageInfo(MainActivity.this.getPackageName(), 0).versionCode;
                if (Integer.parseInt(updateEntity.getVersionCode()) <= versionCode) {
                    Log.i("xxx", "版本号相同无需升级");
                } else {
                    Log.i("xxxx", "版本号不同 ,提示用户升级 ");
                    h.sendEmptyMessage(0);

                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public File getFileFromServer(String path, ProgressDialog pd)
            throws Exception {
        // 如果相等的话表示当前的sdcard挂载在手机上并且是可用的
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            // 获取到文件的大小
            pd.setMax(conn.getContentLength());
            InputStream is = conn.getInputStream();
            File file = new File(Environment.getExternalStorageDirectory(),
                    "updata.apk");
            FileOutputStream fos = new FileOutputStream(file);
            BufferedInputStream bis = new BufferedInputStream(is);
            byte[] buffer = new byte[1024];
            int len;
            int total = 0;
            while ((len = bis.read(buffer)) != -1) {
                fos.write(buffer, 0, len);
                total += len;
                // 获取当前下载量
                pd.setProgress(total);
            }
            fos.close();
            bis.close();
            is.close();
            return file;
        } else {
            return null;
        }
    }
}

0 0