您的位置:首页 > 其它

PullToRefresh

2016-05-04 09:21 281 查看

////解析xml用pull方法,联网请求用AsyncTask和HttpURLConnection

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import org.xmlpull.v1.XmlPullParser;

import org.xmlpull.v1.XmlPullParserException;

import org.xmlpull.v1.XmlPullParserFactory;

import com.bwie.type.Types;

import android.app.Activity;

import android.content.Intent;

import android.os.AsyncTask;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.ListView;

public class MainActivity extends Activity {

private List<Types> types=null;

private Types type=null;

private ListView listView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

listView=(ListView) findViewById(R.id.list_main);

new MyAsycnack().execute();

}

public class MyAsycnack extends AsyncTask<String, Integer, InputStream>{

@Override

protected InputStream doInBackground(String... params) {

// TODO Auto-generated method stub

InputStream inputStream = null;

try {

URL url=new URL("http://apis.juhe.cn/goodbook/catalog?key=9d6ef8c31647a206e05fcaff70527182&dtype=xml");

HttpURLConnection connection=(HttpURLConnection) url.openConnection();

connection.setRequestMethod("GET");

connection.setReadTimeout(5000);

connection.setConnectTimeout(5000);

connection.connect();

if(connection.getResponseCode()==200){

Log.i("aaa", 123+"0");

inputStream = connection.getInputStream();

Log.i("aaa", inputStream.toString());

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return inputStream;

}

@Override

protected void onPostExecute(final InputStream result) {

// TODO Auto-generated method stub

super.onPostExecute(result);

getXmlString(result);

}

}

public void getXmlString(InputStream stream){

try {

String tagName="";

XmlPullParserFactory pullFactory = XmlPullParserFactory.newInstance();

XmlPullParser parser = pullFactory.newPullParser();

parser.setInput(stream, "UTF-8");

int eventType = parser.getEventType();

while(eventType!=XmlPullParser.END_DOCUMENT){

switch (eventType) {

case XmlPullParser.START_DOCUMENT:

types=new ArrayList<Types>();

break;

case XmlPullParser.START_TAG:

tagName=parser.getName();

if(tagName.equals("item")){

type=new Types();

}

if(tagName.equals("catalog")){

type.setType(parser.nextText());

}else if(tagName.equals("id")){

type.setId(parser.nextText());

}

break;

case XmlPullParser.END_TAG:

if(parser.getName().equals("item")){

types.add(type);

Log.i("aaa", types.toString());

}

tagName="";

List<String> list=new ArrayList<String>();

for(int i=0;i<types.size();i++){

list.add(types.get(i).getType());

}

ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this,R.layout.list_type,R.id.tv_type,list);

listView.setAdapter(adapter);

listView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent,

View view, int position, long id) {

// TODO Auto-generated method stub

Intent intent=new Intent(MainActivity.this,DetailActivity.class);

intent.putExtra("id", types.get(position).getId());

startActivity(intent);

}

});

break;

}

eventType = parser.next();

}

} catch (XmlPullParserException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

/////展示书的界面,标题,发布时间和阅读量

import java.util.ArrayList;

import java.util.List;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.NameValuePair;

import org.apache.http.client.HttpClient;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.message.BasicNameValuePair;

import org.apache.http.util.EntityUtils;

import android.annotation.SuppressLint;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.widget.GridView;

import com.bwie.adapter.MyAdapter;

import com.bwie.pullre.PullToRefreshView;

import com.bwie.pullre.PullToRefreshView.OnFooterRefreshListener;

import com.bwie.pullre.PullToRefreshView.OnHeaderRefreshListener;

import com.bwie.type.Book;

import com.bwie.type.Datas;

import com.google.gson.Gson;

public class DetailActivity extends Activity implements

OnHeaderRefreshListener, OnFooterRefreshListener {

PullToRefreshView mPullToRefreshView;

GridView mGridView;

String str = "http://apis.juhe.cn/goodbook/query?key=9d6ef8c31647a206e05fcaff70527182";

private String id;

private Datas fromJson;

private int index = 0;

private MyAdapter adapter;

List<Book> list = new ArrayList<Book>();

@SuppressLint("HandlerLeak")

Handler handler = new Handler() {

public void handleMessage(final android.os.Message msg) {

switch (msg.what) {

case 2:

new Thread() {

public void run() {

String id2 = (String) msg.obj;

List<Book> jsonString2 = getJsonString(str, id2, index,

"10");

list.addAll(jsonString2);

};

}.start();

adapter.notifyDataSetChanged();

break;

case 3:

new Thread() {

public void run() {

String id3 = (String) msg.obj;

List<Book> jsonString3 = getJsonString(str, id3, index,

"10");

list.addAll(jsonString3);

};

}.start();

adapter.notifyDataSetChanged();

break;

}

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.gridview_layout);

mPullToRefreshView = (PullToRefreshView) findViewById(R.id.main_pull_refresh_view);

mGridView = (GridView) findViewById(R.id.gridview);

mPullToRefreshView.setOnHeaderRefreshListener(this);

mPullToRefreshView.setOnFooterRefreshListener(this);

id = getIntent().getStringExtra("id");

new Thread() {

public void run() {

List<Book> jsonString = getJsonString(str, id, 1, "10");

list.addAll(jsonString);

runOnUiThread(new Runnable() {

public void run() {

adapter = new MyAdapter(list, getApplicationContext());

Log.i("aaa", fromJson.getResult().getData().toString());

mGridView.setAdapter(adapter);

}

});

};

}.start();

}

@Override

public void onFooterRefresh(PullToRefreshView view) {

// TODO Auto-generated method stub

Message message = new Message();

message.obj = id;

message.what = 2;

handler.handleMessage(message);

mPullToRefreshView.onFooterRefreshComplete();

}

@Override

public void onHeaderRefresh(PullToRefreshView view) {

// TODO Auto-generated method stub

Message message = new Message();

message.obj = id;

message.what = 3;

handler.handleMessage(message);

mPullToRefreshView.onHeaderRefreshComplete();

}

public List<Book> getJsonString(String url, String id, int pn, String rn) {

List<Book> books = null;

HttpClient httpClient = new DefaultHttpClient();

HttpPost httppost = new HttpPost(url);

List<NameValuePair> pairs = new ArrayList<NameValuePair>();

pairs.add(new BasicNameValuePair("catalog_id", id));

pairs.add(new BasicNameValuePair("pn", pn + ""));

pairs.add(new BasicNameValuePair("rn", rn));

try {

httppost.setEntity(new UrlEncodedFormEntity(pairs, "utf-8"));

HttpResponse execute = httpClient.execute(httppost);

int statusCode = execute.getStatusLine().getStatusCode();

if (statusCode == 200) {

HttpEntity entity = execute.getEntity();

String json = EntityUtils.toString(entity);

Gson gson = new Gson();

fromJson = gson.fromJson(json, Datas.class);

books = fromJson.getResult().getData();

Log.i("bbb",json);

index++;

}

} catch (Exception e) {

e.printStackTrace();

}

return books;

}

}

/////给详情界面加适配器

package com.bwie.adapter;

import java.util.List;

import com.bwie.type.Book;

import com.bwie.yuekao.R;

import com.lidroid.xutils.BitmapUtils;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.TextView;

//自定义适配器

public class MyAdapter extends BaseAdapter {

List<Book> list;

Context context;

public MyAdapter(List<Book> list, Context context) {

super();

this.list = list;

this.context = context;

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return list.size();

}

@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return list.get(position);

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder viewHolder;

if(convertView==null){

viewHolder=new ViewHolder();

convertView=LayoutInflater.from(context).inflate(R.layout.list_item,null);

viewHolder.imageView=(ImageView) convertView.findViewById(R.id.image_item);

viewHolder.t1=(TextView) convertView.findViewById(R.id.text01);

viewHolder.t2=(TextView) convertView.findViewById(R.id.text02);

viewHolder.t3=(TextView) convertView.findViewById(R.id.text03);

convertView.setTag(viewHolder);

}else{

viewHolder=(ViewHolder) convertView.getTag();

}

//加载网络图片

BitmapUtils bitmapUtils=new BitmapUtils(context);

bitmapUtils.display(viewHolder.imageView,list.get(position).getImg());

viewHolder.t1.setText(list.get(position).getSub1());

viewHolder.t2.setText(list.get(position).getReading());

viewHolder.t3.setText(list.get(position).getBytime());

return convertView;

}

class ViewHolder{

ImageView imageView;

TextView t1,t2,t3;

}

}

///bean类

public class Types {

private String type;

private String id;

}

public class Book {

//封装类

private String sub1;

private String img;

private String reading;

private String bytime;

}

public class Books {

List<Book> data;

}

public class Datas {

private Books result;

}

////布局

gridview_layout

<?xml version="1.0" encoding="utf-8"?>

<com.bwie.pullre.PullToRefreshView xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/main_pull_refresh_view"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

>

<GridView

android:id="@+id/gridview"

android:numColumns="3"

android:verticalSpacing="10dip"

android:layout_width="fill_parent"

android:layout_height="fill_parent" />

</com.bwie.pullre.PullToRefreshView>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: