package com.usai.apex; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import com.usai.util.Network; import android.app.ListActivity; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.text.Html; import android.text.method.LinkMovementMethod; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AutoCompleteTextView; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.RadioGroup; import android.widget.TextView; import android.widget.Toast; public class MessageDetailActivity extends ListActivity { long msgcount = 0; String e_id = ""; String s_id = ""; int limit = 10; int offset = 0; private SearchTask m_task = null; SearchResult searchresult = new SearchResult(); BaseAdapter adapter = null; View view_page_footer; // String module_name = ""; public void requestdata() { if (m_task != null) { return; } // mStatusMessageView.setText(R.string.str_Loading); // showProgress(true); m_task = new SearchTask(); TextView text_page = (TextView) view_page_footer .findViewById(R.id.text_page); text_page.setText("Loading..."); text_page.setEnabled(false); m_task.execute(); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); Intent intent = new Intent(); intent.setClass(this, DetailActivity.class); intent.putExtra("action0", "Tracking"); intent.putExtra("function_name", "Cargo Tracking"); intent.putExtra("cargo_criterion", searchresult.getData().get(position) .get("url").toString()); intent.putExtra("actions_count", 1); intent.putExtra("_id", "dumb"); // String h_field; intent.putExtra("criterion_type", 1); // h_field = "container_no"; startActivity(intent); } @Override public void onDestroy() { if (m_task != null) m_task.cancel(false); super.onDestroy(); } @Override protected void onCreate(Bundle savedInstanceState) { // setTitle("Booking Result"); super.onCreate(savedInstanceState); setContentView(R.layout.message_list); adapter = new AnnouncementAdapter(searchresult, this); s_id = getIntent().getStringExtra("s_id"); e_id = getIntent().getStringExtra("e_id"); msgcount = getIntent().getLongExtra("msgcount", 0); view_page_footer = LayoutInflater.from(this).inflate( R.layout.view_page_footer, null); getListView().addFooterView(view_page_footer);// 添加底部视图 TextView text_page = (TextView) view_page_footer .findViewById(R.id.text_page); text_page.setOnClickListener(new View.OnClickListener() { // 点击按钮 追加数据 并通知适配器 @Override public void onClick(View v) { // TODO Auto-generated method stub // TextView tv = (TextView) v; // tv.setText("Loading..."); offset += 10; requestdata(); // tv.setText("下一页"); // adapter.notifyDataSetChanged(); } }); setListAdapter(adapter); // this.getListView().setBackgroundColor(Color.WHITE); requestdata(); } class SearchTask extends AsyncTask { int errorcode; boolean bfinish = false; @Override protected Boolean doInBackground(Void... params) { Log.d("SearchTask", "doInBackground"); if (!Network.NetworkIsAvailable()) { errorcode = Network.RESULT_NET_NOTAVAILABLE; return false; } String jstr = Network.get_push(e_id, s_id, limit, offset); if (jstr == null || jstr.length() <= 0) { // Log.d(TAG, "json is wrong"); errorcode = Network.RESULT_NET_ERROR; return false; } JSONObject jsobj; // // array = new JSONArray(json); try { jsobj = new JSONObject(jstr); // if (searchresult.get_fieldscount() == 0) // { // JSONObject objfields = jsobj.getJSONObject("fields"); // if (objfields != null) // searchresult.init_fields(objfields.toString()); // } int count = jsobj.getInt("total"); if (msgcount - offset <= limit) bfinish = true; JSONObject objrecords = jsobj.getJSONObject("records"); if (objrecords != null) searchresult.add_records(objrecords.toString(), count); errorcode = Network.RESULT_TRUE; return true; } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } errorcode = Network.RESULT_NET_ERROR; return false; } @Override protected void onPostExecute(Boolean success) { Log.i("onPostExecute", "entry"); m_task = null; // showProgress(false); switch (errorcode) { case Network.RESULT_NET_NOTAVAILABLE: { Toast toast = Toast.makeText( ApexTrackingApplication.get_instance(), getText(R.string.msg_connection_none), Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); break; } case Network.RESULT_NET_ERROR: { Toast toast = Toast.makeText( ApexTrackingApplication.get_instance(), getText(R.string.msg_net_error), Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); break; } case Network.RESULT_ERROR: // case Network.RESULT_RESPONSE_NULL: { Toast toast = Toast.makeText( ApexTrackingApplication.get_instance(), getText(R.string.msg_net_resulterror), Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); break; } default: break; } if (success) { if (bfinish) { // getListView().removeFooterView(view_page_footer); // Toast.makeText(AnnouncementActivity.this, "Load all!", // Toast.LENGTH_LONG).show(); TextView tv = (TextView) view_page_footer .findViewById(R.id.text_page); tv.setText("No more items"); tv.setEnabled(false); } else { TextView tv = (TextView) view_page_footer .findViewById(R.id.text_page); tv.setText("More..."); tv.setEnabled(true); } adapter.notifyDataSetChanged(); // getListAdapter().notifyDataSetChanged; // BaseAdapter mJson = null; // mJson.notifyDataSetChanged(); } super.onPostExecute(success); } @Override protected void onCancelled() { m_task = null; // showProgress(false); } } private class SearchResult { List> datalist = new ArrayList>(); public int get_count() { return datalist.size(); } public void add_records(String source, int count) { JSONObject objrecords; try { objrecords = new JSONObject(source); for (int i = 0; i < count; i++) { // offset++; JSONObject objrec = objrecords.getJSONObject("record" + i); String title = objrec.getString("title"); // String content = objrec.getString("content"); // String image = objrec.getString("image"); // String id = objrec.getString("id"); String url = objrec.getString("url"); // lastid = id; Map map = new HashMap(); map.put("title", title); // map.put("content", content); // map.put("image", image); // map.put("id", id); map.put("url", url); datalist.add(map); // Iterator it = rec.keys(); // HashMap record = new HashMap(); // while (it.hasNext()) // loop for each function // { // String field_name = (String) it.next(); // String val = rec.getString(field_name) // .replace("\n", ""); // record.put(field_name, val); // } // records.add(record); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public List> getData() { return datalist; } } private class AnnouncementAdapter extends BaseAdapter { private LayoutInflater mInflater; // 动态布局映射 private SearchResult result; // private Context context; // private int i = 0; public AnnouncementAdapter(SearchResult result, Context context) { this.result = result; // this.context = context; this.mInflater = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return result.get_count(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub convertView = mInflater.inflate(R.layout.message_detail_item, null);// 根据布局文件实例化view TextView title = (TextView) convertView.findViewById(R.id.tv_title);// 找某个控件 title.setText(Html.fromHtml(result.getData().get(position) .get("title").toString())); // title.setMovementMethod(LinkMovementMethod.getInstance()); // title.setText(result.getData().get(position).get("title") // .toString());// 给该控件设置数据(数据从集合类中来) // TextView content = (TextView) convertView // .findViewById(R.id.tv_content); // content.setText(result.getData().get(position).get("content") // .toString()); // if // (result.getData().get(position).get("image").toString().length() // > 0) // { // byte[] gzipBuff = Base64.decode(result.getData().get(position) // .get("image").toString(), 0); // // ByteArrayInputStream memstream = new ByteArrayInputStream( // gzipBuff, 0, gzipBuff.length); // // ByteArrayOutputStream baos = new ByteArrayOutputStream( // gzipBuff.length); // ImageView iv_thumb = (ImageView) convertView // .findViewById(R.id.iv_thumb); // try // { // baos.write(gzipBuff); // // Bitmap bmp = BitmapFactory.decodeStream(memstream); // // // ImageView image = new ImageView(this); // // iv_thumb.setImageBitmap(bmp); // } // catch (IOException e) // { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } // img.setBackgroundResource((Integer)jObject.get("img")); return convertView; } } }