說明:此項目使用studio完成的、需要導入library作為依賴,使用了xuitls獲得網絡請求、使用Pull解析了XML
eclipse中的項目:
//注意:此刷新功能是使用的第三方的PullToRefreshScrollView,因此需要導入第三方library作為依賴
步驟:導入第三方library,依賴:點擊你的應用程序右擊,再點擊properties,再點擊Android,再點擊add,選中library,點擊OK
//請求網路需要配置完網絡權限 <uses-permission android:name="android.permission.INTERNET"/>
Android Studio中的項目:導入library,並依賴
導入:點擊File,New——>import Module 打開libray的位置,選中libray ,點擊OK
依賴:點擊Android studio工具欄中的有多個小方塊的那個,再點擊 app,再點擊Dependencies,再點擊+符號,再點擊Module dependency,選中libray,點擊OK,依賴成功
//布局文件
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
package com.bw.com.yuekao1;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.widget.ListView;
import android.widget.Toast;
import com.bw.com.yuekao1.com.bw.yuekao1.bean.News;
import com.bw.com.yuekao1.com.bw.yuekao1.bean.com.bw.yuekao1.adapter.MyAdapter;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
//封裝結合
private List<News> news=new ArrayList<News>();
//PullToRefreshListView用於上拉加載、上拉刷新
private PullToRefreshListView lv;
private MyAdapter adapter;
//定義一個頁數,分頁加載
private int ye=1;
//使用Handler更新UI
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
//獲得線程發來的數據
String text=(String) msg.obj;
//XML解析
toXml(text);
break;
default:
break;
}
}
};
private void toXml(String text) {
News newss=null;
try {
//將讀取到的結果碼 添加到XML里面
XmlPullParser Parser = Xml.newPullParser();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(text.getBytes());
Parser.setInput(byteArrayInputStream,"utf-8");
//通過parse獲得項目類型 相當於文件里面的屬性吧
int eventType = Parser.getEventType();
//判斷
while ((eventType != XmlPullParser.END_DOCUMENT)) {
String name = Parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if (name.equals("news")) {
newss = new News();
} else if (name.equals("id")) {
String id = Parser.nextText();
newss.setId(id);
} else if (name.equals("title")) {
String title = Parser.nextText();
newss.setTitle(title);
} else if (name.equals("body")) {
String body = Parser.nextText();
newss.setBody(body);
} else if (name.equals("commentCount")) {
String commentCount = Parser.nextText();
newss.setCommentCount(commentCount);
}
else if (name.equals("author")) {
String author = Parser.nextText();
newss.setAuthor(author);
}
else if (name.equals("pubDate")) {
String pubDate = Parser.nextText();
newss.setPubDate(pubDate);
}
break;
case XmlPullParser.END_TAG:
if (name.equals("news")) {
news.add(newss);
//更新適配器
if (adapter == null) {
adapter = new MyAdapter(news,this);
lv.setAdapter(adapter);
} else {
adapter .notifyDataSetChanged();
}
}
break;
default:
break;
}
eventType=Parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
};
//-------------onCreate中--------------
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到PullToRefreshListView的控件
lv= (PullToRefreshListView) findViewById(R.id.list_view);
//獲得網絡數據-傳一個頁數
huodeshuju(ye);
//設置適配器
adapter = new MyAdapter(news,this);
lv.setAdapter(adapter);
//設置PullToRefreshListView的模式,BOTH時,既可以刷新也可以加載
lv.setMode(PullToRefreshBase.Mode.BOTH);
//設置刷新的方法
lv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override//下拉刷新
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
//重新定義為第一頁
ye=1;
Toast.makeText(MainActivity.this,""+ye,Toast.LENGTH_SHORT).show();
//獲得數據
huodeshuju(ye);
//刷新適配器
adapter.notifyDataSetChanged();
//創建一個方法結束刷新
new FinishRefresh().execute();
}
@Override//上拉加載更多
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
//使頁數加1
ye++;
Toast.makeText(MainActivity.this,""+ye,Toast.LENGTH_SHORT).show();
huodeshuju(ye);
adapter.notifyDataSetChanged();
new FinishRefresh().execute();
}
});
}
//使用的是HttpUtils請求網絡數據——需要導入一個xuitls.jar包
private void huodeshuju(int ye) {
//創建HttpUtils
HttpUtils httpUtils=new HttpUtils();
//發送GET請求
httpUtils.send(HttpRequest.HttpMethod.GET, "http://www.oschina.net/action/api/news_list?catalog=1&pageIndex="+ye+"&pageSize=20", new RequestCallBack<String>() {
@Override//請求成功的方法
public void onSuccess(ResponseInfo<String> responseInfo) {
String str=responseInfo.result;
Message message=new Message();
message.what=0;
message.obj=str;
handler.sendMessage(message);
}
//請求失敗的方法
@Override
public void onFailure(HttpException e, String s) {
}
});
}
//完成刷新的方法
private class FinishRefresh extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(Void result){
//刷新完成
lv.onRefreshComplete();
}
}
}