package com.todayinfo.ui.activity;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.content.Intent;
import android.os.Bundle;
import android.util.Xml;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.handmark.pulltorefresh.library.PullToRefreshAdapterViewBase.OnPreRefreshingAnimListener;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnLastItemVisibleListener;
import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.jinghua.todayinformation.R;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.todayinfo.model.BolgComment;
import com.todayinfo.ui.adapter.BolgCommentAdapter;
import com.todayinfo.ui.component.ErrorHintView;
import com.todayinfo.ui.component.ErrorHintView.OperateListener;
import com.todayinfo.utils.AsyncHttpUtil;
/**
* 博客评论
*
* @author zhou.ni 2015年5月17日
*/
public class BlogsCommentActivity extends SuperActivity {
private PullToRefreshListView mListView;
private ErrorHintView mErrorHintView;
private TextView mTitle;
private List<BolgComment> bolgList = new ArrayList<BolgComment>();
private List<BolgComment> list = new ArrayList<BolgComment>();
private BolgCommentAdapter adapter;
private int pageNext = 1; //下一页页码
private boolean flag = false;
private String id;
private LinearLayout footerView; //最后一条listview
private static final String STR_BEFORE = "http://wcf.open.cnblogs.com/blog/post/";
private static final String STR_AFTER = "/comments/";
public static int VIEW_LIST = 1;
/**显示断网**/
public static int VIEW_WIFIFAILUER = 2;
/** 显示加载数据失败 **/
public static int VIEW_LOADFAILURE = 3;
public static int VIEW_LOADING = 4;
public static int VIEW_NODATA = 5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bolg_comment);
getWindow().setBackgroundDrawable(null);
initLayout();
}
/**
* 初始化控件
*/
private void initLayout() {
RelativeLayout headView = (RelativeLayout) this.findViewById(R.id.head);
headView.findViewById(R.id.back_left).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
mTitle = (TextView) headView.findViewById(R.id.head_title);
mListView = (PullToRefreshListView) this.findViewById(R.id.list);
mErrorHintView = (ErrorHintView) this.findViewById(R.id.hintView);
Intent intent = getIntent();
id = intent.getStringExtra("id");
String title = intent.getStringExtra("title");
mTitle.setText(title);
setUpPullToList();
showLoading(VIEW_LOADING);
loadBolgCommentInfo(true);
}
/**
* 设置listview的下拉刷新
*/
private void setUpPullToList(){
adapter = new BolgCommentAdapter(mContext, bolgList);
mListView.setAdapter(adapter);
mListView.setOnRefreshListener(new OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
if (refreshView.isHeaderShown()){
pageNext = 1;
flag = false;
loadBolgCommentInfo(true);
}
}
});
mListView.setOnPreRefreshingAnimListener(new OnPreRefreshingAnimListener() {
@Override
public void onPreRefreshingAnim() {
mListView.setFooterLoadingViewHeaderText("加载更多评论");
}
});
mListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() {
@Override
public void onLastItemVisible() {
if ( pageNext==0 ) {
//没有下一页了
mListView.onRefreshComplete();
if ( footerView == null ) {
footerView = (LinearLayout) View.inflate(mContext, R.layout.item_pull_to_refresh_footer, null);
TextView footer = (TextView) footerView.findViewById(R.id.footer);
footer.setText("到底了呢-共" + bolgList.size() + "条评论");
mListView.getRefreshableView().addFooterView(footerView);
}
} else {
//滑动到底部自动刷新
flag = false;
loadBolgCommentInfo(false);
}
}
});
}
/**
* 加载评论内容
* @param url
*/
private void loadBolgCommentInfo(final boolean clean){
String url = STR_BEFORE + id + STR_AFTER + pageNext +"/20";
AsyncHttpUtil.get(url, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int code, Header[] headers, byte[] responseBody) {
if ( footerView!=null ){
mListView.getRefreshableView().removeFooterView(footerView);
footerView = null;
}
mListView.onRefreshComplete();
if ( responseBody!=null && responseBody.length>0 ){
try {
if ( clean ){
bolgList.clear();
}
list.clear();
ByteArrayInputStream inputStream = new ByteArrayInputStream(responseBody);
parseCommentXml(inputStream);
if ( list.size()==0 && list.size()<20 ) {
pageNext = 0;
} else {
pageNext ++;
}
bolgList.addAll(list);
if ( bolgList.size()==0 ) {
showLoading(VIEW_NODATA);
} else {
showLoading(VIEW_LIST);
adapter.notifyDataSetChanged();
}
} catch (Exception e) {
e.printStackTrace();
showLoading(VIEW_LOADFAILURE);
}
} else {
showLoading(VIEW_LOADFAILURE);
}
}
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
showLoading(VIEW_WIFIFAILUER);
}
});
}
/**
* 解析评论内容
*
* @param in
* @throws XmlPullParserException
* @throws IOException
*/
private void parseCommentXml(InputStream in) throws XmlPullParserException, IOException {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(in, "UTF-8");
int event = parser.getEventType();
BolgComment item = null;
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
if ("entry".equals(parser.getName())) {
flag = true;
item = new BolgComment();
}
if (flag) {
if ("id".equals(parser.getName())) {
String id = parser.nextText();
item.setId(id);
} else if ("title".equals(parser.getName())) {
String title = parser.nextText();
item.setTitle(title);
} else if ("published".equals(parser.getName())) {
String published = parser.nextText();
item.setPublished(published);
} else if ("updated".equals(parser.getName())) {
String updated = parser.nextText();
item.setUpdated(updated);
} else if("author".equals(parser.getName())){
} else if ("name".equals(parser.getName())) {
String name = parser.nextText();
item.setName(name);
} else if ("uri".equals(parser.getName())) {
String uri = parser.nextText();
item.setUri(uri);
} else if ("content".equals(parser.getName())) {
String content = parser.nextText();
item.setContent(content);
}
}
break;
case XmlPullParser.TEXT:
break;
case XmlPullParser.END_TAG:
if ("entry".equals(parser.getName())) {
list.add(item);
}
break;
}
event = parser.next();
}
}
private void showLoading(int i){
mErrorHintView.setVisibility(View.GONE);
mListView.setVisibility(View.GONE);
switch(i){
case 1:
mErrorHintView.hideLoading();
mListView.setVisibility(View.VISIBLE);
break;
case 2:
mErrorHintView.hideLoading();
mErrorHintView.netError(new OperateListener() {
@Override
public void operate() {
pageNext = 1;
flag = false;
showLoading(VIEW_LOADING);
loadBolgCommentInfo(true);
}
});
break;
case 3:
mErrorHintView.hideLoading();
mErrorHintView.loadFailure(new OperateListener() {
@Override
public void operate() {
pageNext = 1;
flag = false;
showLoading(VIEW_LOADING);
loadBolgCommentInfo(true);
}
});
break;
case 4:
mErrorHintView.loadingData();
break;
case 5:
mErrorHintView.hideLoading();
mErrorHintView.noData();
break;
}
}
@Override
public void retry() {
}
@Override
public void netError() {
}
@Override
protected void obtainInfo() {
}
}