package com.example.fudanbbs; import java.net.SocketTimeoutException; import java.util.ArrayList; import java.util.HashMap; import java.util.concurrent.ExecutionException; import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import android.app.Activity; import android.app.Fragment; import android.app.ProgressDialog; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.AdapterView.OnItemClickListener; import android.widget.TextView; import android.widget.Toast; /** * @author Joseph.Zhong * */ public class Top10Fragment extends Fragment { static final String TAG = "MainActivity"; private FudanBBSApplication currentApplication; private ArrayList<HashMap<String, String>> top10List; private SimpleAdapter adapter; private ListView top10ListView; private ProgressDialog progressdialog; @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View rootView = inflater.inflate(R.layout.top10fragment, container, false); progressdialog = new ProgressDialog(getActivity()); progressdialog.setMessage(getString(R.string.loadingtop10list)); progressdialog.setCancelable(false); progressdialog.setCanceledOnTouchOutside(false); progressdialog.setProgressStyle(progressdialog.STYLE_SPINNER); top10ListView = (ListView)rootView.findViewById(R.id.top10listview); top10AsycTask task = new top10AsycTask(); task.execute(); return rootView; } public class top10AsycTask extends AsyncTask<String, Integer, String>{ private int responsecode; @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); Log.v(TAG, "onPreExecute"); progressdialog.show(); if(null == top10List){ top10List = new ArrayList<HashMap<String, String>>(); }else{ top10List.clear(); } } @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub // super.onPostExecute(result); Log.v(TAG, "onPostExecute"); if(9999 == responsecode){ Toast.makeText(getActivity(),getResources().getString(R.string.connectfailed), Toast.LENGTH_LONG).show(); } adapter = new SimpleAdapter(getActivity().getApplicationContext(), top10List, R.layout.top10, new String[]{"owner","board","title"}, new int[]{R.id.top10owner, R.id.top10board, R.id.top10title}); top10ListView.setAdapter(adapter); OnItemClickListener listener = new OnItemClickListener(){ @Override public void onItemClick( AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub Log.v("Listview", "position"+position); String gid = top10List.get(position).get("gid"); String board = top10List.get(position).get("board"); String postURL = "http://bbs.fudan.edu.cn/bbs/tcon?new=1&board="+board+"&f=" +gid; Intent intent = new Intent(); intent.setClassName(getActivity(), "com.example.fudanbbs.PostActivity"); Bundle bundle = new Bundle(); bundle.putString("postURL", postURL); intent.putExtras(bundle); startActivity(intent); } }; top10ListView.setOnItemClickListener(listener); if(progressdialog.isShowing()){ progressdialog.dismiss(); } } @Override protected void onProgressUpdate(Integer... values) { // TODO Auto-generated method stub super.onProgressUpdate(values); } @Override protected String doInBackground(String... params) { // TODO Auto-generated method stub Log.v(TAG, "doInBackground start"); try { Document doc = Jsoup.connect("http://bbs.fudan.edu.cn/bbs/top10").timeout(15000).get(); Elements ele = doc.getElementsByTag("top"); for(Element e: ele){ HashMap<String, String> map = new HashMap(); map.put("owner",e.attr("owner").toString().trim()); map.put("board", e.attr("board").toString().trim()); map.put("gid", e.attr("gid").toString().trim()); map.put("title", e.text().toString().trim()); map.put("count", e.attr("count").toString().trim()); top10List.add(map); } }catch(SocketTimeoutException e){ responsecode = 9999; }catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.v(TAG, "doInBackground end"); return null; } } }