package com.devtf_l.app.fragments; import java.util.ArrayList; import java.util.List; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import android.content.Intent; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewStub; import butterknife.InjectView; import com.android.volley.Request.Method; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.VolleyError; import com.devtf_l.app.R; import com.devtf_l.app.activity.WebViewActivity; import com.devtf_l.app.adapter.BaseRecyclerAdapter.OnItemClickListener; import com.devtf_l.app.adapter.BaseRecyclerAdapter.OnItemLongClickListener; import com.devtf_l.app.adapter.EmployRecycleAdapter; import com.devtf_l.app.base.BaseTabFragment; import com.devtf_l.app.entry.EmploymentItem; import com.devtf_l.app.net.HtmlDocumentRequest; import com.devtf_l.app.net.WebAPI; import com.devtf_l.app.util.Timber; import com.github.johnpersano.supertoasts.SuperToast.Duration; /** * @Desc: 招聘 tab页 * @author ljh * @date 2015-4-28 下午5:13:33 */ public class EmployFragment extends BaseTabFragment { @InjectView(R.id.swipeRefreshLayout) SwipeRefreshLayout mSwipeRefreshLayout; @InjectView(R.id.recyclerView) RecyclerView mRecyclerView; @InjectView(R.id.errorViewStub) ViewStub mErrorViewStub; View errorView; LinearLayoutManager linearLayoutManager; EmployRecycleAdapter rvAdapter; List<EmploymentItem> eiList = new ArrayList<EmploymentItem>(); @Override public int getFragmentLayout() { return R.layout.fragment_tab_employ_layout; } @Override public void init() { linearLayoutManager = new LinearLayoutManager(context); mRecyclerView.setLayoutManager(linearLayoutManager); mRecyclerView.setHasFixedSize(true); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); rvAdapter = new EmployRecycleAdapter(eiList); mRecyclerView.setAdapter(rvAdapter); rvAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(View view, int position) { Intent intent = new Intent(context, WebViewActivity.class); intent.putExtra("url", eiList.get(position).getJobDescAddress()); startActivity(intent); } }); rvAdapter.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(View view, int position) { Timber.i("itemClick%s", position); return true; } }); mSwipeRefreshLayout.setColorSchemeResources(ColorSchemeArr[0], ColorSchemeArr[1], ColorSchemeArr[2]); mSwipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { getData(); } }); mHandler.postDelayed(new Runnable() { @Override public void run() { mSwipeRefreshLayout.setRefreshing(true); getData(); } }, 1200); } @Override public void getData() { context.getRequestQueue().add(new HtmlDocumentRequest(Method.GET, WebAPI.EMPLOY_URL, new Listener<Document>() { @Override public void onResponse(final Document doc) { try { eiList = parseDocument(doc); } catch (Exception e) { mHandler.post(new Runnable() { public void run() { context.showToast("获取数据失败"); } }); } context.runOnUiThread(new Runnable() { public void run() { rvAdapter.setItemList(eiList); rvAdapter.notifyDataSetChanged(); mErrorViewStub.setVisibility(View.GONE); mSwipeRefreshLayout.setRefreshing(false); } }); } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if (eiList.isEmpty()) if (null == errorView) errorView = mErrorViewStub.inflate(); else mErrorViewStub.setVisibility(View.VISIBLE); mSwipeRefreshLayout.setRefreshing(false); context.showToast("加载失败", Duration.VERY_SHORT); } })); } @Override public void initPageViewListener() { } /** * @Description: 解析document文档对象到EmploymentItem对象列表 * @author (ljh) @date 2015-5-7 上午11:11:57 * @param doc * @return List<EmploymentItem> * @throws Exception */ private List<EmploymentItem> parseDocument(Document doc) throws Exception { List<EmploymentItem> itemList = new ArrayList<EmploymentItem>(); try { Elements trs = doc.getElementsByTag("table").get(0).select("tbody").select("tr"); for (Element tr : trs) { Elements tds = tr.select("td"); EmploymentItem eItem = new EmploymentItem(); eItem.setCompanyName(tds.get(0).text()); Elements td = tds.get(1).select("a"); eItem.setJobName(td.text()); eItem.setJobDescAddress(td.attr("href")); eItem.setPostTempt(tds.get(2).text()); eItem.setEmail(tds.get(3).text()); itemList.add(eItem); } } catch (Exception e) { throw new Exception("parse error in the method 'parseDocument' "); // Html页面结构变化可能导致解析NullPointException,这里catch一下不做处理 // TODO ...后期可以考虑添加日志记录,在收集异常日志的时候可以及时发现并修正错误 } return itemList; } }