package com.example.slidingmenu.yujing.client.activity.broadcast; import java.util.HashMap; import java.util.List; import org.json.JSONException; import android.app.ProgressDialog; import android.content.ContentValues; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.os.AsyncTask; import android.os.Bundle; import android.os.AsyncTask.Status; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.ContextMenu.ContextMenuInfo; import android.widget.AdapterView; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import com.example.slidingmenu.R; import com.example.slidingmenu.yujing.client.activity.controller.BaseActivity; import com.example.slidingmenu.yujing.client.application.ClientApplication; import com.example.slidingmenu.yujing.client.contentprovider.DataProvider; import com.example.slidingmenu.yujing.client.database.DatabaseHelper; import com.example.slidingmenu.yujing.client.database.table.Topic; import com.example.slidingmenu.yujing.client.network.Request; import com.example.slidingmenu.yujing.client.network.mode.RequestParam; import com.example.slidingmenu.yujing.client.network.mode.ResponseParam; import com.example.slidingmenu.yujing.client.network.mode.topic.GetAllTopicResponseParam; import com.example.slidingmenu.yujing.client.service.MsgRefresh; import com.example.slidingmenu.yujing.client.service.MsgService; import com.example.slidingmenu.yujing.client.utils.Utils; public class BroadCastActivity extends BaseActivity implements MsgRefresh { private ListView broadcastList; private BroadCastAdapter broadCastAdapter; private ReadTask mReadTask; private TextView loadText; private ProgressBar loadBar; private ViewGroup loadParent; private ClientApplication mApplication; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mApplication = (ClientApplication) getApplication(); setContentView(R.layout.broadcast_layout); broadcastList = (ListView) findViewById(R.id.broadcast_list); loadParent = (ViewGroup) findViewById(R.id.load_parent); loadText = (TextView) findViewById(R.id.load_text); loadBar = (ProgressBar) findViewById(R.id.load_progress); setListAdapter(); init(); broadcastList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { startComActivity(position); } }); registerForContextMenu(broadcastList); } public void onAddTopicClick(View v) { startActivityForResult(new Intent(this, SendBroadCastActivity.class), RequestParam.SEND_TOPIC); } private void startComActivity(int position) { HashMap<?, ?> map = (HashMap<?, ?>) broadCastAdapter.getItem(position); Intent intent = new Intent(BroadCastActivity.this, ReadBroadCastActivity.class); Bundle bundle = new Bundle(); bundle.putLong(Topic.ID, (Long) map.get(Topic.ID)); bundle.putString(Topic.content, (String) map.get(Topic.content)); bundle.putInt(Topic.time, (Integer) map.get(Topic.time)); bundle.putString(Topic.name, (String) map.get(Topic.name)); bundle.putString(Topic.photo, (String) map.get(Topic.photo)); intent.putExtra(Topic.tableName, bundle); startActivity(intent); } public void onRefrehClick(View view) { getTopicFromNetwork(); } private void getTopicFromNetwork() { DatabaseHelper dbHelper = mApplication.getDatabaseHelper(); int size = Topic.getCount(dbHelper); SharedPreferences shared = mApplication.getLoginUserInfo(); RequestParam sp = new RequestParam(); sp.setUserName(shared.getString(RequestParam.USER_NAME, "")); sp.setPassword(shared.getString(RequestParam.PASSWORD, "")); sp.setRandomKey("1234"); sp.setRequestType(RequestParam.GET_NEW_TOPIC); sp.setParams(new String[] {String.valueOf(size)}); mReadTask = new ReadTask(); mReadTask.execute(sp); } @Override protected void onDestroy() { if(mReadTask != null && mReadTask.getStatus() == Status.RUNNING) { mReadTask.cancel(true); mReadTask = null; } super.onDestroy(); } private void setListAdapter() { Cursor cs = managedQuery(DataProvider.Topic_CONTENT_URI, null, null, null, Topic.time + " DESC "); broadcastList.setAdapter(broadCastAdapter = new BroadCastAdapter(this, R.layout.broadcast_layout_item, cs, false)); } private void deleteTopic(int position) { HashMap<?, ?> map = broadCastAdapter.getItem(position); Topic.deleteTopic(((ClientApplication)this.getApplication()) .getDatabaseHelper(), (Integer) map.get(Topic._id)); broadCastAdapter.refresh(); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.add(0, 0, 0, R.string.delete); super.onCreateContextMenu(menu, v, menuInfo); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo menuInfo; menuInfo = ( AdapterView.AdapterContextMenuInfo ) item.getMenuInfo(); switch (item.getItemId()) { case 0: deleteTopic(menuInfo.position); break; default: break; } return super.onContextItemSelected(item); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == RequestParam.SEND_TOPIC && resultCode == RESULT_OK) { getTopicFromNetwork(); } super.onActivityResult(requestCode, resultCode, data); } public class ReadTask extends AsyncTask<RequestParam, Integer, Integer>{ ProgressDialog dialog; @Override protected void onPreExecute() { dialog = ProgressDialog.show(BroadCastActivity.this, "", getText(R.string.waiting)); super.onPreExecute(); } @Override protected Integer doInBackground(RequestParam... params) { RequestParam requestParam = params[0]; String res = Request.request(requestParam.getJSON()); if ("".equals(res)) { return -1; } try { GetAllTopicResponseParam response = new GetAllTopicResponseParam(res); // System.out.println("返回参数:" + response.toString()); if (response.getResult() != GetAllTopicResponseParam.RESULT_SUCCESS) { return -1; } insertToDataBase(response.getAllTopic()); } catch (JSONException e) { e.printStackTrace(); } return 0; } @Override protected void onPostExecute(Integer result) { dialog.dismiss(); if(result != ResponseParam.RESULT_SUCCESS) { Toast.makeText(BroadCastActivity.this, R.string.read_topic_fail, 0).show(); } else { Toast.makeText(BroadCastActivity.this, R.string.read_topic_succ, 0).show(); broadCastAdapter.refresh(); } super.onPostExecute(result); } private void insertToDataBase(List<HashMap<String, Object>> letters) { HashMap<String, Object> map = null; ContentValues values = null; for(int i = 0; i< letters.size(); i++) { map = letters.get(i); values = Utils.hashMapToContentValues(map); try { Topic.insertTopic(mApplication.getDatabaseHelper(), values); } catch (Exception e) { e.printStackTrace(); } } } } private void setLoadText(boolean begin) { if(begin) { if(broadCastAdapter.getCount() == 0) { return; } if(broadCastAdapter.getCount() > 0) { loadParent.setVisibility(View.GONE); return; } } if(broadCastAdapter.getCount() <= 0) { loadBar.setVisibility(View.INVISIBLE); loadText.setText("当前没有话题"); } else { loadParent.setVisibility(View.GONE); } } @Override public void init() { setLoadText(true); MsgService.acList.add(this); } @Override public void refresh(int what, Object... objects) { broadCastAdapter.refresh(); setLoadText(false); } }