/** * */ package com.example.fudanbbs; import java.io.IOException; import java.net.SocketTimeoutException; import java.util.ArrayList; import java.util.HashMap; import java.util.concurrent.ExecutionException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import android.app.AlertDialog; import android.app.Fragment; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; /** * @author Joseph.Zhong * */ public class MyFavoriteFragment extends Fragment { private ListView listview; private ArrayList<HashMap<String, String>> boardlist; private FudanBBSApplication currentapplication; private HashMap<String, String> cookie; private boardlistAsyncTask asynctask; private SimpleAdapter adapter; private ProgressDialog progressdialog; private View view, errorloginview; private LinearLayout layout; private String TAG = "##################"+this.getClass().getName(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub // return super.onCreateView(inflater, container, savedInstanceState); currentapplication = (FudanBBSApplication) getActivity().getApplication(); layout = (LinearLayout) inflater.inflate(R.layout.myfavoritefragement, null); listview = (ListView) layout.findViewById(R.id.myfavoriteListView); errorloginview = inflater.inflate(R.layout.notloginmessage, null); layout.addView(errorloginview); if(!currentapplication.isCurrentUserGuest()){ layout.removeViewInLayout(errorloginview); asynctask = new boardlistAsyncTask(); asynctask.execute(); }else{ Button BtnGologin = (Button) errorloginview.findViewById(R.id.gologin); BtnGologin.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.setClassName(getActivity(), "com.example.fudanbbs.LoginActivity"); startActivityForResult(intent, 0); } }); } return layout; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if(data.getBooleanExtra("result", false)){ layout.removeViewInLayout(errorloginview); asynctask = new boardlistAsyncTask(); asynctask.execute(); } } public class boardlistAsyncTask extends AsyncTask{ private int responsecode; @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); if(null == progressdialog){ progressdialog = new ProgressDialog(getActivity()); progressdialog.setMessage(getString(R.string.loadingboardlist)); progressdialog.setCancelable(false); progressdialog.setCanceledOnTouchOutside(false); progressdialog.setProgressStyle(progressdialog.STYLE_SPINNER); } progressdialog.show(); // if(null == boardlist){ boardlist = new ArrayList<HashMap<String, String>>(); // }else{ // boardlist.clear(); // } Log.v(TAG, "onPreExecute"); } @Override protected void onPostExecute(Object result) { // TODO Auto-generated method stub super.onPostExecute(result); adapter = new SimpleAdapter(getActivity().getApplicationContext(), boardlist, R.layout.allboard, new String[]{"boardtitle", "boarddesc"}, new int[]{R.id.boardtitle, R.id.boarddesc}); listview.setAdapter(adapter); listview.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub TextView boardtitle = (TextView) view.findViewById(R.id.boardtitle); TextView boarddesc = (TextView) view.findViewById(R.id.boarddesc); String boardtitlestring = boardtitle.getText().toString().trim(); String boarddescstring = boarddesc.getText().toString().trim(); Intent intent = new Intent(); intent.setClassName(getActivity(), "com.example.fudanbbs.BoardActivity"); Bundle bundle = new Bundle(); String boardURL = "http://bbs.fudan.edu.cn/bbs/doc?board="+boardtitlestring.substring(1, boardtitlestring.length()-1); bundle.putString("boardURL", boardURL); bundle.putString("boardname", boarddescstring); intent.putExtras(bundle); startActivity(intent); }}); if(progressdialog.isShowing()){ progressdialog.dismiss(); } Log.v(TAG, "onPostExecute"); } @Override protected Object doInBackground(Object... params) { // TODO Auto-generated method stub cookie = new HashMap<String, String>(); cookie = currentapplication.get_cookie(); Log.v(TAG, "doInBackground"); // Log.v(TAG, cookie.get("utmpuser").isEmpty()?"cookie is empty":cookie.get("utmpuser")); try { Document doc = Jsoup.connect("http://bbs.fudan.edu.cn/bbs/fav").timeout(15000).cookies(cookie).get(); Elements boards = doc.getElementsByTag("brd"); for(Element board: boards){ String[] string = new String[2]; string[0] = board.attr("brd"); string[1] = board.text(); Log.v(TAG, string[1]); HashMap<String, String> map = new HashMap<String, String>(); map.put("boardtitle", "["+string[0]+"] "); map.put("boarddesc", string[1]); boardlist.add(map); } } catch(SocketTimeoutException e){ responsecode = 9999; }catch(Exception e){ e.printStackTrace(); } return null; } } }