package com.todayinfo.ui.activity;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONObject;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
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.loopj.android.http.RequestParams;
import com.todayinfo.model.ArticleComment;
import com.todayinfo.model.PhonePaging;
import com.todayinfo.ui.adapter.TechCommentAdapter;
import com.todayinfo.ui.component.ErrorHintView;
import com.todayinfo.ui.component.ErrorHintView.OperateListener;
import com.todayinfo.utils.AsyncHttpUtil;
import com.todayinfo.utils.Contacts;
import com.todayinfo.utils.JsonUtils;
import com.todayinfo.utils.MD5Utils;
/**
* 科技评论
*
* @author zhou.ni 2015年5月21日
*/
public class PhoneTechCommentActivity extends SuperActivity {
private PullToRefreshListView mListView;
private ErrorHintView mErrorHintView;
private List<ArticleComment> ArticleData = new ArrayList<ArticleComment>();
private TechCommentAdapter adapter;
private int offset = 0; //第N条数据
private boolean isPage = true; //是否还有下一页
private LinearLayout footerView; //最后一条listview
private String docid;
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_phone_tech_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();
}
});
TextView mTitle = (TextView) headView.findViewById(R.id.head_title);
mTitle.setText("更多评论");
mListView = (PullToRefreshListView) this.findViewById(R.id.list);
mErrorHintView = (ErrorHintView) this.findViewById(R.id.hintView);
Intent intent = getIntent();
docid = intent.getStringExtra("docid");
setUpPullToList();
showLoading(VIEW_LOADING);
loadPhoneTechComments(true);
}
/**
* 设置listview的下拉刷新
*/
private void setUpPullToList(){
adapter = new TechCommentAdapter(ArticleData, mContext);
mListView.setAdapter(adapter);
mListView.setOnRefreshListener(new OnRefreshListener<ListView>() {
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView) {
if (refreshView.isHeaderShown()){
defParams();
showLoading(VIEW_LOADING);
loadPhoneTechComments(true);
}
}
});
mListView.setOnPreRefreshingAnimListener(new OnPreRefreshingAnimListener() {
@Override
public void onPreRefreshingAnim() {
mListView.setFooterLoadingViewHeaderText("加载更多评论");
}
});
mListView.setOnLastItemVisibleListener(new OnLastItemVisibleListener() {
@Override
public void onLastItemVisible() {
if ( isPage ) {
//滑动到底部自动刷新
loadPhoneTechComments(false);
} else {
//没有下一页了
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("到底了呢-共" + ArticleData.size() + "条评论");
mListView.getRefreshableView().addFooterView(footerView);
}
}
}
});
}
private void loadPhoneTechComments(final boolean flag){
RequestParams params = new RequestParams();
String t = String.valueOf(System.currentTimeMillis() / 1000); //获取当前时间
params.put("timestamp", t); //当前时间戳
String token1 = MD5Utils.md5("d19cf361181f5a169c107872e1f5b722" + t);
params.put("token1", token1); //token1算法
params.put("apiid", 3);
params.put("module", "api_libraries_sjdbg_commentlist");
params.put("avatar", "middle");
params.put("docid", docid);
params.put("returnformat", "json");
params.put("encoding", "utf8");
// params.put("onetime", timeStamp); //分页用,传第一条新闻的时间戳,第一页下不用传值。
params.put("offset", offset ); //分页用,数据记录的起始行数。0为第一条记录。
params.put("rows", 10); //分页用,数据记录每次取得的行数。不传此参数则默认获取10条记录。
AsyncHttpUtil.get(Contacts.PHONE_URL, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
if ( footerView!=null ){
mListView.getRefreshableView().removeFooterView(footerView);
footerView = null;
}
mListView.onRefreshComplete();
if ( arg2!=null && arg2.length>0 ){
try {
JSONObject obj = new JSONObject(new String(arg2));
String status = obj.getString("status");
if ( TextUtils.equals("1", status) ) {
offset += 10;
JSONObject data = obj.getJSONObject("data");
JSONArray list = data.getJSONArray("result");
if ( list!=null ) {
List<ArticleComment> instance = JsonUtils.getInstance(ArticleComment.class, list);
if ( instance!=null && instance.size()>0) {
if ( flag ) {
ArticleData.clear();
}
ArticleData.addAll(instance);
if ( ArticleData.size()==0 ) {
showLoading(VIEW_NODATA);
} else {
showLoading(VIEW_LIST);
adapter.notifyDataSetChanged();
}
} else {
showLoading(VIEW_LOADFAILURE);
}
}
JSONObject paging = data.getJSONObject("paging");
if ( paging!=null ){
PhonePaging instance = JsonUtils.getInstance(PhonePaging.class, paging);
if( instance!=null ) {
try {
int total = Integer.parseInt(instance.getTotal());
if ( offset >= total ) {
isPage = false;
} else {
isPage = true;
}
} catch (Exception e) {
isPage = true;
}
}
}
} else {
showLoading(VIEW_LOADFAILURE);
}
} catch (Exception e) {
showLoading(VIEW_LOADFAILURE);
}
} else {
showLoading(VIEW_LOADFAILURE);
}
}
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
showLoading(VIEW_WIFIFAILUER);
}
});
}
/**
* 恢复默认参数
*/
private void defParams(){
offset = 0;
isPage = true;
}
/**
* 显示动态加载的view
*
* @param i
*/
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() {
defParams();
showLoading(VIEW_LOADING);
loadPhoneTechComments(true);
}
});
break;
case 3:
mErrorHintView.hideLoading();
mErrorHintView.loadFailure(new OperateListener() {
@Override
public void operate() {
defParams();
showLoading(VIEW_LOADING);
loadPhoneTechComments(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() {
}
}