解析网络图片

来源:互联网 发布:仿淘宝手机网站模板 编辑:程序博客网 时间:2024/06/05 19:11
          package fragment.bwie.com.week3_demo;

import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.Toast;

import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;

import fragment.bwie.com.week3_demo.db.MyHelper;
import fragment.bwie.com.week3_demo.xlist.XListView;

public class MainActivity extends AppCompatActivity {
    private XListView listView;
    //固定的网络请求URL固定部分
    private static final String URL_HOST = "http://gank.io/api/history/content/";
    private int limit = 5;//每页加载limit条数据;
    private int page = 1;//加载当前的页码,请求第page页;
    private MyAdapter adapter;
    private SQLiteDatabase db;
    private boolean tag = true;//代表是否是第一次请求数据;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化db
        MyHelper helper = new MyHelper(MainActivity.this);
        db = helper.getWritableDatabase();
        //初始化xlistview
        listView = (XListView) findViewById(R.id.mylist);
        adapter = new MyAdapter(MainActivity.this);
        listView.setAdapter(adapter);
        //给listview设置上拉加载更多
        listView.setPullLoadEnable(true);
        listView.setPullRefreshEnable(true);
        //设置上拉加载监听
        listView.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                //刷新
                page = 1;
                addTask();
            }

            @Override
            public void onLoadMore() {
                //加载更多,请求第page++页数据;
                page++;
                addTask();
            }
        });
        //请求第一页数据;
        addTask();
    }

    //启动异步任务;
    private void addTask() {

        MyTask task = new MyTask();
        task.execute("");
    }

    class MyTask extends AsyncTask<String, Integer, String> {
        @Override
        protected String doInBackground(String... strings) {
            //网络请求
            return getDataFromHttp();
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            if (s != null && !s.equals("")) {
                //解析从网络获取的数据
                Gson gson = new Gson();
                DataBean bean = gson.fromJson(s, DataBean.class);
                if (bean != null) {
                    List<DataBean.ResultBean> resultBeen = bean.results;
                    if (resultBeen != null && resultBeen.size() > 0) {
                        //加载到listview上显示;
                        if (page > 1) {
                            adapter.addData(resultBeen);
                            //上拉加载更多时,将数据添加入数据库中;
                            addDb(resultBeen);
                        } else {
                            adapter.updateData(resultBeen);
                          //  page==1时或者是第一次获取数据;或者是下拉刷新;只有在第一次获取数据时需要添加数据库
                            if(tag){
                                addDb(resultBeen);
                                tag=false;
                            }
                        }
                        listView.stopLoadMore();
                        listView.stopRefresh();
                    } else {
                        Toast.makeText(MainActivity.this, "返回数据列表为空!", Toast.LENGTH_LONG).show();
                    }
                } else {
                    Toast.makeText(MainActivity.this, "数据解析失败!", Toast.LENGTH_LONG).show();
                }
            } else {
                Toast.makeText(MainActivity.this, "网络获取数据失败!", Toast.LENGTH_LONG).show();
            }
        }
    }

    private String getDataFromHttp() {
        try {
            String path = URL_HOST + limit + "/" + page;
            URL url = new URL(path);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            int code = connection.getResponseCode();
            if (code == 200) {
                InputStream is = connection.getInputStream();
                String str = "";
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                StringBuilder builder = new StringBuilder();
                while ((str = reader.readLine()) != null) {
                    builder.append(str);
                }
                is.close();
                reader.close();
                System.out.println("page=" + page + "   " + builder.toString());
                return builder.toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    //将从网络获取的数据添加到数据库中;
    private void addDb(List<DataBean.ResultBean> list) {
        for (int i = 0; i < list.size(); i++) {
            ContentValues values = new ContentValues();
            values.put("title", list.get(i).title);
            values.put("content", list.get(i).content);
            db.insert("week3", null, values);
        }
    }
}
------------------------------------------------------
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;


public class MyAdapter extends BaseAdapter {
    private List<DataBean.ResultBean> list=new ArrayList<>();
    private Context context;
    public MyAdapter(Context context){
        this.context=context;
    }
    public void addData(List<DataBean.ResultBean> list){
        //将传进来的数组添加进adapter;
        this.list.addAll(list);
        notifyDataSetChanged();
    }
    //刷新数据;首先清空旧数据,再添加新数据
    public void updateData(List<DataBean.ResultBean> list){
        this.list.clear();
        addData(list);
    }
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder holder=null;
        if(view==null){
            view=View.inflate(context, R.layout.item,null);
            holder=new ViewHolder();
            holder.title=(TextView)view.findViewById(R.id.item_title);
            holder.webView=(WebView)view.findViewById(R.id.item_web);
            view.setTag(holder);
        }else
        {
            holder=(ViewHolder)view.getTag();
        }
        DataBean.ResultBean resultBean=list.get(i);
        if(resultBean.title!=null){
            holder.title.setText(resultBean.title);
        }
        holder.webView.setVisibility(View.GONE);
//        if(resultBean.content!=null){
//            //将HTML代码设置给webview;
//            holder.webView.loadDataWithBaseURL("","<html><head><style>img{width:100%;}</style></head><body>"+resultBean.content+"</body></html>","text/html","utf-8",null);
//          //  holder.webView.loadDataWithBaseURL("",resultBean.content,"text/html","utf-8",null);
//            WebSettings settings=holder.webView.getSettings();
//            settings.setJavaScriptCanOpenWindowsAutomatically(true);
//            settings.setJavaScriptEnabled(true);
//            holder.webView.setWebChromeClient(new WebChromeClient());
//        }
        return view;
    }
    class ViewHolder {
        public TextView title;
        public WebView webView;
    }
}
------------------------------------------------
xlist 文件夹



-----------------
Bean 类
原创粉丝点击