package com.wise.wawc; import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.wise.data.Article; import com.wise.list.XListView; import com.wise.list.XListView.IXListViewListener; import com.wise.pubclas.BlurImage; import com.wise.pubclas.Constant; import com.wise.pubclas.GetSystem; import com.wise.pubclas.NetThread; import com.wise.pubclas.Variable; import com.wise.service.FriendArticleAdapter; import com.wise.sql.DBExcute; import com.wise.sql.DBHelper; import android.app.Activity; import android.app.ProgressDialog; import android.content.ContentValues; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.WindowManager; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import android.widget.AbsListView.OnScrollListener; /** * 好友主页 * @author 王庆文 */ public class FriendHomeActivity extends Activity implements IXListViewListener{ private XListView friendArticleList; private LinearLayout saySomething; private ImageView friendHead; //点击好友头像显示资料 private MyHandler myHandler = null; private ImageView cancle; private TextView friendName = null; private TextView commentContent = null; private Intent lastPageDatas = null; private DBExcute dBExcute = null; private List<Article> articleDataList = new ArrayList<Article>(); private ProgressDialog myDialog = null; private FriendArticleAdapter myAdapter = null; private static final int initDatas = 2; private static final int getArticleList = 3; private static final int commentArticle = 4; private static final int loadMoreAction = 5; private static final int loadMoreCode = 6; private static final int refreshCode = 7; private String cust_id = ""; private String user_logo = ""; private String user_name = ""; private int friendArticleTotalNum = 0; private boolean isLoadMore = false; private String Tag = "FriendHomeActivity"; private String commentMsg = null; public static int blogId = 0; private int minBlogId = 0; private int maxBlogId = 0; String TAG = "FriendHomeActivity"; boolean bol = false; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.friend_home); friendArticleList = (XListView) findViewById(R.id.friend_home_article_list); saySomething = (LinearLayout)findViewById(R.id.friend_home_say_something); myAdapter = new FriendArticleAdapter(FriendHomeActivity.this,saySomething,articleDataList); friendArticleList.setAdapter(myAdapter); friendHead = (ImageView) findViewById(R.id.friend_home_user_head); friendHead.setOnClickListener(new OnClickListener()); friendName = (TextView) findViewById(R.id.friend_home_name); commentContent = (TextView) findViewById(R.id.et_sendmessage); cancle = (ImageView) findViewById(R.id.friend_back); cancle.setOnClickListener(new OnClickListener()); lastPageDatas = getIntent(); dBExcute = new DBExcute(); cust_id = lastPageDatas.getStringExtra("cust_id"); user_logo = lastPageDatas.getStringExtra("user_logo"); user_name = lastPageDatas.getStringExtra("user_name"); myHandler = new MyHandler(); if(!new File(Constant.userIconPath + cust_id + ".jpg").exists()){ Message msg = new Message(); msg.what = initDatas; myHandler.sendMessage(msg); }else{ Bitmap userHead = BitmapFactory.decodeFile(Constant.userIconPath + cust_id + ".jpg"); friendHead.setImageBitmap(BlurImage.getRoundedCornerBitmap(userHead)); } friendName.setText(user_name); //显示用户数据 查询本地数据库时候存在数据 getArticleDatas(0); friendArticleList.setXListViewListener(this); //不设置上拉加载无效 friendArticleList.setPullLoadEnable(true); friendArticleList.setOnScrollListener(new OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { saySomething.setVisibility(View.GONE); myAdapter.isClick = false; } public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) { } }); friendArticleList.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { Article article = (Article) friendArticleList.getItemAtPosition(arg2); Intent intents = new Intent(FriendHomeActivity.this,ArticleDetailActivity.class); intents.putExtra("article", article); FriendHomeActivity.this.startActivity(intents); } }); } class OnClickListener implements android.view.View.OnClickListener{ public void onClick(View v) { switch(v.getId()){ case R.id.friend_home_user_head: Intent intent = new Intent(FriendHomeActivity.this,FriendInformationActivity.class); intent.putExtra("cust_id", cust_id); intent.putExtra("user_logo", user_logo); intent.putExtra("user_name", user_name); startActivity(intent); FriendHomeActivity.this.finish(); break; case R.id.friend_back: FriendHomeActivity.this.finish(); break; default: break; } } } class MyHandler extends Handler{ public void handleMessage(Message msg) { super.handleMessage(msg); switch(msg.what){ case initDatas: // 设置用户信息 new Thread(new Runnable() { public void run() { Bitmap userLogo = GetSystem.getBitmapFromURL(user_logo); if(userLogo != null){ GetSystem.saveImageSD(userLogo, Constant.userIconPath, cust_id + ".jpg",100); } friendHead.setImageBitmap(BlurImage.getRoundedCornerBitmap(userLogo)); } }).start(); break; case getArticleList: String commentResult = msg.obj.toString(); if(!"".equals(commentResult)){ jsonToList(msg.obj.toString()); getArticleDatas(0); } break; case loadMoreCode: String result = msg.obj.toString(); if(!"".equals(result)){ jsonToList(msg.obj.toString()); //存到数据库 isLoadMore = false; getArticleDatas(0); } onLoad(); break; case refreshCode: if(!"[]".equals(msg.obj.toString())){ // 更新数据库 JSONArray jsonArray = null; try { jsonArray = new JSONArray(msg.obj.toString()); if(jsonArray.length() > 1){ for(int i = 0 ; i < jsonArray.length() ; i ++){ if(Integer.valueOf(jsonArray.getJSONObject(i).getString("blog_id")) != maxBlogId){ ContentValues values = new ContentValues(); values.put("Cust_id", Integer.valueOf(jsonArray.getJSONObject(i).getString("cust_id"))); values.put("Blog_id", Integer.valueOf(jsonArray.getJSONObject(i).getString("blog_id"))); if(jsonArray.getJSONObject(i).opt("logo") != null){ values.put("UserLogo", jsonArray.getJSONObject(i).getString("logo")); }else{ values.put("UserLogo", ""); } values.put("Content", jsonArray.getJSONObject(i).toString().replaceAll("\\\\", "")); dBExcute.InsertDB(FriendHomeActivity.this,values,Constant.TB_VehicleFriend); } } //重新分页 TODO articleDataList.clear(); setArticleDataList(articleDataList); Constant.totalPage1 = 0; Constant.start1 = 0; // 开始页 Constant.pageSize1 =10; //每页数量 Constant.totalPage1 = 0; //数据总量 Constant.currentPage1 = 0; //当前页 getArticleDatas(0); onLoad(); } } catch (JSONException e) { e.printStackTrace(); } } onLoad(); break; default: break; } } } public void onLoadMore() { if(!isLoadMore){ getArticleDatas(loadMoreAction); }else{ // DBHelper dBHelper = new DBHelper(FriendHomeActivity.this); // SQLiteDatabase sQLiteDatabase = dBHelper.getReadableDatabase(); // Cursor cursor = sQLiteDatabase.rawQuery("select * from " + Constant.TB_VehicleFriend + " where Cust_id = ? order by Blog_id desc", new String[]{cust_id}); // if(cursor.moveToLast()){ // minBlogId = cursor.getInt(cursor.getColumnIndex("Blog_id")); // } if(articleDataList.size() != 0){ int[] blogId = new int[articleDataList.size()]; for(int i = 0 ; i < articleDataList.size() ; i ++){ blogId[i] = articleDataList.get(i).getBlog_id(); } int minBlogId = paiXu(blogId)[articleDataList.size() - 1]; new Thread(new NetThread.GetDataThread(myHandler, Constant.BaseUrl + "customer/" + cust_id + "/blog?auth_code=" + Variable.auth_code + "&min_id=" + minBlogId, loadMoreCode)).start(); } } } //获取数据 TODO public void getArticleDatas(int actionCode){ isLoadMore = false; DBHelper dBHelper = new DBHelper(FriendHomeActivity.this); SQLiteDatabase reader = dBHelper.getReadableDatabase(); Cursor cursor = reader.rawQuery("select * from " + Constant.TB_VehicleFriend + " where Cust_id = ?", new String[]{cust_id}); friendArticleTotalNum = cursor.getCount(); cursor.close(); reader.close(); if(friendArticleTotalNum > 0){ //查询数据库 Constant.totalPage1 = friendArticleTotalNum%Constant.pageSize1 > 0 ? friendArticleTotalNum/Constant.pageSize1 + 1 : friendArticleTotalNum/Constant.pageSize1; // if(Constant.totalPage1 - 1>= Constant.currentPage1){ // Constant.start1 = Constant.currentPage1*Constant.pageSize1; // if(Constant.totalPage1 >= Constant.pageSize1){ // Constant.currentPage1 ++ ; // } // articleDataList = dBExcute.getArticlePageDatas(FriendHomeActivity.this, "select * from " + Constant.TB_VehicleFriend + " where Cust_id = ? order by Blog_id desc limit ?,?", new String[]{cust_id,String.valueOf(Constant.start1),String.valueOf(Constant.pageSize1)}, articleDataList); // setArticleDataList(articleDataList); // } // if(Constant.totalPage1 == Constant.currentPage1){ // isLoadMore = true; // } //分页查询数据库 当前 总数据量(1 - 9)小于每页数据量(10) if(friendArticleTotalNum < Constant.pageSize1){ articleDataList.clear(); articleDataList = dBExcute.getArticlePageDatas(FriendHomeActivity.this, "select * from " + Constant.TB_VehicleFriend + " where Cust_id = ? order by Blog_id desc limit ?,?", new String[]{cust_id,String.valueOf(Constant.start1),String.valueOf(Constant.pageSize1)}, articleDataList); isLoadMore = true; bol = true; }else if(friendArticleTotalNum == Constant.pageSize1){ isLoadMore = false; articleDataList.clear(); Constant.start1 = Constant.currentPage1*Constant.pageSize1; if(Constant.currentPage1 < Constant.totalPage1){ Constant.currentPage1 ++ ; } articleDataList = dBExcute.getArticlePageDatas(FriendHomeActivity.this, "select * from " + Constant.TB_VehicleFriend + " where Cust_id = ? order by Blog_id desc limit ?,?", new String[]{cust_id,String.valueOf(Constant.start1),String.valueOf(Constant.pageSize1)}, articleDataList); }else{ if(bol){ bol = false; articleDataList.clear(); } isLoadMore = false; Constant.start1 = Constant.currentPage1*Constant.pageSize1; if(Constant.currentPage1 < Constant.totalPage1){ Constant.currentPage1 ++ ; } articleDataList = dBExcute.getArticlePageDatas(FriendHomeActivity.this, "select * from " + Constant.TB_VehicleFriend + " where Cust_id = ? order by Blog_id desc limit ?,?", new String[]{cust_id,String.valueOf(Constant.start1),String.valueOf(Constant.pageSize1)}, articleDataList); } if(Constant.totalPage1 == Constant.currentPage1){ isLoadMore = true; } }else{ myDialog = ProgressDialog.show(FriendHomeActivity.this, getString(R.string.dialog_title), getString(R.string.dialog_message)); myDialog.setCancelable(true); // TODO 获取文章列表 new Thread(new NetThread.GetDataThread(myHandler, Constant.BaseUrl + "customer/" + cust_id + "/blog?auth_code=" + Variable.auth_code, getArticleList)).start(); } myAdapter.refreshDates(articleDataList); if(loadMoreAction == actionCode){ onLoad(); } } //解析数据 public void jsonToList(String JSON){ try { JSONArray jsonArray = new JSONArray(JSON); // int[] blog_idAry = new int[jsonArray.length()]; for(int i = 0 ; i < jsonArray.length() ; i ++){ //存储到数据库 ContentValues values = new ContentValues(); values.put("Cust_id", Integer.valueOf(jsonArray.getJSONObject(i).getString("cust_id"))); values.put("Blog_id", Integer.valueOf(jsonArray.getJSONObject(i).getString("blog_id"))); values.put("Content", jsonArray.getJSONObject(i).toString().replaceAll("\\\\", "")); dBExcute.InsertDB(FriendHomeActivity.this,values,Constant.TB_VehicleFriend); // blog_idAry[i] = Integer.valueOf(jsonArray.getJSONObject(i).getString("blog_id")); } // for(int n = 0 ; n < blog_idAry.length ; n ++){ // for(int m = 0 ; m < n ; m ++){ // if(blog_idAry[m] < blog_idAry[n]){ // int temp = blog_idAry[m]; // blog_idAry[m] = blog_idAry[n]; // blog_idAry[n] = temp; // } // } // } //DBHelper dBHelper = new DBHelper(getApplicationContext()); //SQLiteDatabase db = dBHelper.getReadableDatabase(); //Cursor cursor = db.rawQuery("select * from " + Constant.TB_VehicleFriend + " where Cust_id = ?", new String[]{cust_id}); } catch (JSONException e) { e.printStackTrace(); } } public void onRefresh() { List<Article> articleTempList = new ArrayList<Article>(); articleTempList = dBExcute.getArticlePageDatas(FriendHomeActivity.this, "select * from " + Constant.TB_VehicleFriend + " where Cust_id = ?", new String[]{cust_id}, articleTempList); int[] blogIdList = new int[articleTempList.size()]; for (int i = 0; i < articleTempList.size(); i++) { blogIdList[i] = articleTempList.get(i).getBlog_id(); } maxBlogId = paiXu(blogIdList)[0]; String url = Constant.BaseUrl + "customer/" + cust_id + "/blog?auth_code=" + Variable.auth_code + "&max_id=" + maxBlogId; new Thread(new NetThread.GetDataThread(myHandler, url, refreshCode)).start(); } private void onLoad() { //获取当前时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); String temp = sdf.format(new Date()); String date = temp.substring(5, 16); friendArticleList.stopRefresh(); friendArticleList.stopLoadMore(); friendArticleList.setRefreshTime(date); } public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { FriendHomeActivity.this.finish(); } return super.onKeyDown(keyCode, event); } public List<Article> getArticleDataList() { return articleDataList; } public void setArticleDataList(List<Article> articleDataList) { this.articleDataList = articleDataList; } protected void onDestroy() { Constant.start1 = 0; // 开始页 Constant.pageSize1 = 10; //每页数量 Constant.totalPage1 = 0; //数据总量 Constant.currentPage1 = 0; //当前页 super.onDestroy(); } //索引最大 blog_id最小 public static int[] paiXu(int[] tempInt){ for(int m = 0 ; m < tempInt.length ; m ++){ for(int n = 0 ; n < m ; n ++){ int temp = 0; if(tempInt[m] > tempInt[n]){ temp = tempInt[m]; tempInt[m] = tempInt[n]; tempInt[n] = temp; } } } return tempInt; } }