@XQF
2016-08-03T14:45:14.000000Z
字数 6025
阅读 1079
匿名getTag()与getTag()我就看成是两个万能的仓库,再自己写个类封装一下数据,这里比较坑的是为什么不能直接通过这两个方法对数据进行缓存,,。,。?真是麻烦,还要写一个宿主,用来寄生
package com.example.secret1.atys;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.example.secret1.R;import com.example.secret1.net.Message;public class AtyTimelineMessageListAdapter extends BaseAdapter {private Context context;// 因此context很重要我們在類裏面可能要經常使用因此有必要進行好記錄private List<Message> dataList = new ArrayList<Message>();public Context getContext() {// 可以让它在外界可以访问到return context;}public AtyTimelineMessageListAdapter(Context context) {// TODO Auto-generated constructor stubthis.context = context;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn dataList.size();// 返回有多少项}@Overridepublic Message getItem(int position) {// TODO Auto-generated method stubreturn dataList.get(position);// List还有这个方法???????,返回在这个位置上的一条}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;// 就是保证在list里面的每一条内容唯一就行了,position就是唯一的}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubif (convertView == null) {// convertview专门用于缓存的,要是为空的话就说明之前美哟缓存过convertView = LayoutInflater.from(getContext()).inflate(R.layout.aty_timeline_listcell, null); // 加载我们传入的布局,相当于setContentView(),这里还是不知道root为null的意思ViewHolder viewHolder = new ViewHolder();viewHolder.tvCellLabel = (TextView) convertView.findViewById(R.id.tvCellLabel);convertView.setTag(viewHolder);}ViewHolder viewHolder = (ViewHolder) convertView.getTag();// 这里getTag()出来可能不是ViewHolder类型的对象Message msg = getItem(position);viewHolder.tvCellLabel.setText(msg.getMsg());return convertView;//放心的把列表项返回出去,我也看不出来什么时候不放心,listview会获取到这个列表项进行显示}private TextView findViewById(int tvcelllabel) {// TODO Auto-generated method stubreturn null;}public void addAll(List<Message> data) {// 这个是外面把数据传进来的入口dataList.addAll(data);notifyDataSetChanged();// 数据有改变,我们要更新列表,进行UI方面的刷新}public void clear() {dataList.clear();// 将数据清空,养成好习惯,有添加就必须有清空notifyDataSetChanged();}class ViewHolder {TextView tvCellLabel;}}
注意JSONArray的格式,原来这样才是一个JSONArray,我以前以为一条就是一个Array,其实这一条只是其中的一个元素,不难理解在解析JSONArry的时候先一个一个的JSONObject的取
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><%out.clear(); //清理一下输出的缓存String action = request.getParameter("action");//从客户端发过来的请求数据中获取action的Token,action对应的键值if (action != null) {if (action.equals("send_pass")) {//刚好就是我们前面所规定的Tokenout.print("{\"status\":1}");//action正确返回一个json格式的字符串}else if(action.equals("login")){out.print("{\"status\":1,\"token\":\"jifgjhhgtjr\"}");}else if(action.equals("upload_contacts")){out.print("{\"status\":1}");}else if(action.equals("timeline")){out.print("{\"status\":1,\"page\":1,\"perpage\":20,\"items\":["+//原来这样的才叫JSONArray"{\"msg\":\"Haha1\",\"phone_md5\":\"fjerkgjfrjkhgtrj\",\"msgId\":\"1541\"}"+"{\"msg\":\"Haha2\",\"phone_md5\":\"fjerkgjfrjkhgtrj\",\"msgId\":\"1541\"}"+"{\"msg\":\"Haha3\",\"phone_md5\":\"fjerkgjfrjkhgtrj\",\"msgId\":\"1541\"}"+"{\"msg\":\"Haha4\",\"phone_md5\":\"fjerkgjfrjkhgtrj\",\"msgId\":\"1541\"}"+"{\"msg\":\"Haha\",\"phone_md5\":\"fjerkgjfrjkhgtrj\",\"msgId\":\"1541\"}"+"{\"msg\":\"Haha\",\"phone_md5\":\"fjerkgjfrjkhgtrj\",\"msgId\":\"1541\"}"+"{\"msg\":\"Haha\",\"phone_md5\":\"fjerkgjfrjkhgtrj\",\"msgId\":\"1541\"}"+"]}");}}else {out.print("请指定action");}%>
package com.example.secret1.atys;import java.util.List;import android.app.ListActivity;import android.app.ProgressDialog;import android.content.Intent;import android.os.Bundle;import android.widget.Toast;import com.example.secret1.Config;import com.example.secret1.R;import com.example.secret1.ld.MyContacts;import com.example.secret1.net.Message;import com.example.secret1.net.Timeline;import com.example.secret1.net.UploadContacts;import com.example.secret1.tools.MD5Tool;public class AtyTimeline extends ListActivity {private String phoneNum, phone_md5;// 手机自己缓存可以是手机号,只是要服务器不保存手机号就是了private String token;private AtyTimelineMessageListAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.aty_timeline);adapter = new AtyTimelineMessageListAdapter(AtyTimeline.this);setListAdapter(adapter);// 呈现消息列表之前来上传联系人同步一下,因为联系人数据可能发生改变phoneNum = getIntent().getStringExtra(Config.KEY_PHONE);// System.out.println("AtyTimeline:phone "+phoneNum);token = getIntent().getStringExtra(Config.KEY_TOKEN);// System.out.println(Config.KEY_TOKEN);// System.out.println("AtyTimeline:token "+token);final ProgressDialog pd = ProgressDialog.show(AtyTimeline.this,getResources().getString(R.string.connecting), getResources().getString(R.string.connecting_to_sever));phone_md5 = MD5Tool.getMd5(phoneNum);new UploadContacts(phone_md5, token,MyContacts.getContactsJSONString(this),new UploadContacts.SuccessCallback() {@Overridepublic void onSuccess() {// TODO Auto-generated method stubloadMessage();pd.dismiss();}}, new UploadContacts.FailCallback() {@Overridepublic void onFail(int ErrorCode) {pd.dismiss();// TODO Auto-generated method stubif (ErrorCode == Config.RESULT_STATUS_INVILD_TOKEN) {// 要是登陆过期,就跳转重新登陆startActivity(new Intent(AtyTimeline.this,AtyLogin.class));finish();} else {// token有效,之前已经将token的情况进行了过滤,要不是过期就只能是成功了loadMessage();}}});}public void loadMessage() {final ProgressDialog pd = ProgressDialog.show(AtyTimeline.this,getResources().getString(R.string.connecting), getResources().getString(R.string.connecting_to_sever));new Timeline(phone_md5, token, 1, 20, new Timeline.SuccessCallback() {@Overridepublic void onSuccess(int page, int perpage, List<Message> timeline) {// TODO Auto-generated method stubpd.dismiss();// 成功就要就將內容顯示出來就可以了adapter.addAll(timeline);}}, new Timeline.FailCallback() {@Overridepublic void onFail() {// TODO Auto-generated method stubpd.dismiss();Toast.makeText(AtyTimeline.this,R.string.fail_to_load_timeline_data, Toast.LENGTH_SHORT).show();}});}}