匿名项目连载(三)--->说说列表


AtyTimeline(联系人说说的列表)

package com.jikexueyuan.secret.atys;

import java.util.List;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;

import com.jikexueyuan.secret.Config;
import com.jikexueyuan.secret.R;
import com.jikexueyuan.secret.ld.MyContacts;
import com.jikexueyuan.secret.net.Message;
import com.jikexueyuan.secret.net.Timeline;
import com.jikexueyuan.secret.net.UploadContacts;
import com.jikexueyuan.secret.tools.MD5Tool;

public class AtyTimeline extends ListActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.aty_timeline);

		adapter = new AtyTimelineMessageListAdapter(this);
		setListAdapter(adapter);

		/**获取intent值*/
		phone_num = getIntent().getStringExtra(Config.KEY_PHONE_NUM);
		token = getIntent().getStringExtra(Config.KEY_TOKEN);
		phone_md5 = MD5Tool.md5(phone_num);

		/***
		 * 提示进度条
		 */
		final ProgressDialog pd = ProgressDialog.show(this, getResources().getString(R.string.connecting), getResources().getString(R.string.connecting_to_server));
		/**
		 * 上传联系人jsonArr字符串到服务器
		 */
		new UploadContacts(phone_md5, token, MyContacts.getContactsJSONString(this), new UploadContacts.SuccessCallback() {
			/**
			 * 上传成功后的回调方法
			 */
			@Override
			public void onSuccess() {
				loadMessage();

				pd.dismiss();
			}
		}, new UploadContacts.FailCallback() {

			@Override
			public void onFail(int errorCode) {
				pd.dismiss();
				//这个demo,只返回了1成功的状态值,真是的开发中还有失败,或许还有失效的Token
				if (errorCode==Config.RESULT_STATUS_INVALID_TOKEN) {
					startActivity(new Intent(AtyTimeline.this, AtyLogin.class));
					finish();
				}else{
					loadMessage();
				}
			}
		});
	}
/**
 * 从服务器下载联系人联系人的消息数据
 */

	private void loadMessage(){
		final ProgressDialog pd = ProgressDialog.show(this, getResources().getString(R.string.connecting), getResources().getString(R.string.connecting_to_server));

		new Timeline(phone_md5, token, 1, 20, new Timeline.SuccessCallback() {

			@Override
			public void onSuccess(int page, int perpage, List<Message> timeline) {
				pd.dismiss();

				adapter.clear();
				adapter.addAll(timeline);
			}
		}, new Timeline.FailCallback() {

			@Override
			public void onFail(int errorCode) {
				pd.dismiss();

				if (errorCode==Config.RESULT_STATUS_INVALID_TOKEN) {
					startActivity(new Intent(AtyTimeline.this, AtyLogin.class));
					finish();
				}else{
					Toast.makeText(AtyTimeline.this, R.string.fail_to_load_timeline_data, Toast.LENGTH_LONG).show();
				}
			}
		});
	}

	/**
	 * 点击每一条item
	 */
	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
		super.onListItemClick(l, v, position, id);

		Message msg = adapter.getItem(position);
		Intent i = new Intent(this, AtyMessage.class);
		i.putExtra(Config.KEY_MSG, msg.getMsg());
		i.putExtra(Config.KEY_MSG_ID, msg.getMsgId());
		i.putExtra(Config.KEY_PHONE_MD5, msg.getPhone_md5());
		i.putExtra(Config.KEY_TOKEN, token);
		startActivity(i);
	}
	
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.menu_aty_timeline, menu);
		return true;
	}
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case R.id.menuShowAtyPublish:
			Intent i = new Intent(AtyTimeline.this, AtyPublish.class);
			
			i.putExtra(Config.KEY_PHONE_MD5, phone_md5);
			i.putExtra(Config.KEY_TOKEN, token);
			startActivityForResult(i, 0);
			break;
		default:
			break;
		}
		
		return true;
	}
	
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		switch (resultCode) {
		case Config.ACTIVITY_RESULT_NEED_REFRESH:
			//发布说说后,从新冲服务区获取说说
			loadMessage();
			break;
		default:
			break;
		}
	}

	
	private String phone_num,token,phone_md5;
	private AtyTimelineMessageListAdapter adapter=null;
}

AtyTimeline里面的MyContacts.getContactsJSONString(this)(将联系人列表封装Json数组)

package com.jikexueyuan.secret.ld;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.jikexueyuan.secret.Config;
import com.jikexueyuan.secret.tools.MD5Tool;

import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract.CommonDataKinds.Phone;

public class MyContacts {

	/**
	 * 将手机联系人转为一个jsonArr字符串
	 * @param context
	 * @return
	 */
	public static String getContactsJSONString(Context context){
		Cursor c = context.getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
		String phoneNum;
		JSONArray jsonArr = new JSONArray();
		JSONObject jsonObj;
		
		while(c.moveToNext()){
			phoneNum = c.getString(c.getColumnIndex(Phone.NUMBER));
			
			if (phoneNum.charAt(0)=='+'&&
					phoneNum.charAt(1)=='8'&&
					phoneNum.charAt(2)=='6') {
				phoneNum = phoneNum.substring(3);
			}
			
			jsonObj = new JSONObject();
			try {
				jsonObj.put(Config.KEY_PHONE_MD5, MD5Tool.md5(phoneNum));
			} catch (JSONException e) {
				e.printStackTrace();
			}
			
			jsonArr.put(jsonObj);
		}
		
		return jsonArr.toString();
	}
}


AtyTimeline里面的new UploadContacts(phone_md5, token, contacts, successCallback, failCallback)实现类如下

package com.jikexueyuan.secret.net;

import org.json.JSONException;
import org.json.JSONObject;

import com.jikexueyuan.secret.Config;

public class UploadContacts {

	/**
	 * 上传联系人列表到服务器的实现类
	 * 
	 * @param phone_md5
	 * @param token
	 * @param contacts
	 * @param successCallback
	 * @param failCallback
	 */
	public UploadContacts(String phone_md5, String token, String contacts,
			final SuccessCallback successCallback,
			final FailCallback failCallback) {

		new NetConnection(
				Config.SERVER_URL,
				HttpMethod.POST,
				new NetConnection.SuccessCallback() {

					@Override
					public void onSuccess(String result) {
						try {
							// 将返回的结果进行解析{\"status\":1} 这里服务器不支持只是返回状态码
							JSONObject obj = new JSONObject(result);

							switch (obj.getInt(Config.KEY_STATUS)) {
							case Config.RESULT_STATUS_SUCCESS:
								if (successCallback != null) {
									successCallback.onSuccess();
								}
								break;
							case Config.RESULT_STATUS_INVALID_TOKEN:
								if (failCallback != null) {
									failCallback
											.onFail(Config.RESULT_STATUS_INVALID_TOKEN);
								}
								break;
							default:
								if (failCallback != null) {
									failCallback
											.onFail(Config.RESULT_STATUS_FAIL);
								}
								break;
							}

						} catch (JSONException e) {
							e.printStackTrace();
							if (failCallback != null) {
								failCallback.onFail(Config.RESULT_STATUS_FAIL);
							}
						}
					}
				}, new NetConnection.FailCallback() {

					@Override
					public void onFail() {
						if (failCallback != null) {
							failCallback.onFail(Config.RESULT_STATUS_FAIL);
						}
					}
				}, Config.KEY_ACTION, Config.ACTION_UPLOAD_CONTACTS,
				Config.KEY_PHONE_MD5, phone_md5, Config.KEY_TOKEN, token,
				Config.KEY_CONTACTS, contacts);
		/* http://10.127.0.11:8090/NiMingServer/api.jsp?action=upload_contacts
			 &phone_md5=96e79218965eb72c92a549dd5a330112&token=asdasdasdsadasd
			 &contatcs=[{"phone_md5":"38af69663d2eaaa1e15df03f319eddd2"},{"phone_md5":"b217eadca0937ce7f18f14fed1552d38"}]*/

	}

	public static interface SuccessCallback {
		void onSuccess();
	}

	public static interface FailCallback {
		void onFail(int errorCode);
	}
}

页面加载进行的服务器下载说说的操作

Message

package com.jikexueyuan.secret.net;

public class Message {
	
	public Message(String msgId,String msg,String phone_md5) {
		this.msg = msg;
		this.msgId = msgId;
		this.phone_md5 = phone_md5;
	}

	private String msgId=null,msg=null,phone_md5=null;
	
	public String getMsg() {
		return msg;
	}
	
	public String getMsgId() {
		return msgId;
	}
	
	public String getPhone_md5() {
		return phone_md5;
	}
}


new Timeline(phone_md5, token, page, perpage, successCallback, failCallback)实现类如下

package com.jikexueyuan.secret.net;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.jikexueyuan.secret.Config;

public class Timeline {
/**
 * 进行服务器联系人数据的下载
 * @param phone_md5
 * @param token
 * @param page
 * @param perpage
 * @param successCallback
 * @param failCallback
 */
	public Timeline(String phone_md5,String token,int page,int perpage,final SuccessCallback successCallback,final FailCallback failCallback) {
		new NetConnection(Config.SERVER_URL	, HttpMethod.POST, new NetConnection.SuccessCallback() {
			/**
			 * 下载成功的回调方法
			 */
			@Override
			public void onSuccess(String result) {
				try {
					JSONObject obj = new JSONObject(result);
					
					switch (obj.getInt(Config.KEY_STATUS)) {
					case Config.RESULT_STATUS_SUCCESS:
						if (successCallback!=null) {
//							Message(String msgId,String msg,String phone_md5)
							List<Message> msgs = new ArrayList<Message>();
							/**
							 * out.print("{\"status\":1,\"page\":1,\"perpage\":20,\"timeline\":["
						+ "{\"msg\":\"Haha1\",\"phone_md5\":\"dasdasdbkas\",\"msgId\":\"1231234\"},"
						+ "{\"msg\":\"Haha2\",\"phone_md5\":\"dasdasdbkas\",\"msgId\":\"1231234\"},"
						+ "{\"msg\":\"Haha3\",\"phone_md5\":\"dasdasdbkas\",\"msgId\":\"1231234\"},"
						+ "{\"msg\":\"Haha4\",\"phone_md5\":\"dasdasdbkas\",\"msgId\":\"1231234\"},"
						+ "{\"msg\":\"Haha5\",\"phone_md5\":\"dasdasdbkas\",\"msgId\":\"1231234\"},"
						+ "{\"msg\":\"Haha6\",\"phone_md5\":\"dasdasdbkas\",\"msgId\":\"1231234\"},"
						+ "{\"msg\":\"Haha7\",\"phone_md5\":\"dasdasdbkas\",\"msgId\":\"1231234\"},"
						+ "{\"msg\":\"Haha8\",\"phone_md5\":\"dasdasdbkas\",\"msgId\":\"1231234\"}"
						+ "]}");
							 */
							JSONArray msgJsonArray = obj.getJSONArray(Config.KEY_TIMELINE);
							JSONObject msgObj;
							for (int i = 0; i <msgJsonArray.length(); i++) {
								msgObj = msgJsonArray.getJSONObject(i);
								msgs.add(new Message(
										msgObj.getString(Config.KEY_MSG_ID),
										msgObj.getString(Config.KEY_MSG),
										msgObj.getString(Config.KEY_PHONE_MD5)
										));
							}
							
							successCallback.onSuccess(obj.getInt(Config.KEY_PAGE), obj.getInt(Config.KEY_PERPAGE), msgs);
//							successCallback.onSuccess(1, 20, msgs);
						}
						break;
					case Config.RESULT_STATUS_INVALID_TOKEN:
						if (failCallback!=null) {
							failCallback.onFail(Config.RESULT_STATUS_INVALID_TOKEN);
						}
						break;
					default:
						if (failCallback!=null) {
							failCallback.onFail(Config.RESULT_STATUS_FAIL);
						}
						break;
					}
					
					
				} catch (JSONException e) {
					e.printStackTrace();
					if (failCallback!=null) {
						failCallback.onFail(Config.RESULT_STATUS_FAIL);
					}
				}
			}
		}, new NetConnection.FailCallback() {
			
			@Override
			public void onFail() {
				if (failCallback!=null) {
					failCallback.onFail(Config.RESULT_STATUS_FAIL);
				}
			}
		}, Config.KEY_ACTION,Config.ACTION_TIMELINE,
		Config.KEY_PHONE_MD5,phone_md5,
		Config.KEY_TOKEN,token,
		Config.KEY_PAGE,page+"",
		Config.KEY_PERPAGE,perpage+"");
	}
	
	public static interface SuccessCallback{
		void onSuccess(int page,int perpage,List<Message> timeline);
	}
	
	public static interface FailCallback{
		void onFail(int errorCode);
	}
}

说说数据请求完毕,进行页面填充

adapter.addAll(timeline);实现方法如下

AtyTimelineMessageListAdapter

package com.jikexueyuan.secret.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.jikexueyuan.secret.R;
import com.jikexueyuan.secret.net.Message;

public class AtyTimelineMessageListAdapter extends BaseAdapter{

	
	public AtyTimelineMessageListAdapter(Context context) {
		this.context = context;
	}
	
	@Override
	public int getCount() {
		return data.size();
	}
	
	@Override
	public Message getItem(int position) {
		return data.get(position);
	}
	
	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		if (convertView==null) {
			convertView = LayoutInflater.from(getContext()).inflate(R.layout.aty_timeline_list_cell, null);
			convertView.setTag(new ListCell((TextView) convertView.findViewById(R.id.tvCellLabel)));
		}
		
		ListCell lc = (ListCell) convertView.getTag();
		
		Message msg = getItem(position);
		
		lc.getTvCellLabel().setText(msg.getMsg());
		
		return convertView;
	}
	
	public Context getContext() {
		return context;
	}
	
	public void addAll(List<Message> data){
		this.data.addAll(data);
		notifyDataSetChanged();
	}
	
	public void clear(){
		data.clear();
		notifyDataSetChanged();
	}
	
	private List<Message> data = new ArrayList<Message>();
	private Context context=null;
	
	private static class ListCell{
		
		public ListCell(TextView tvCellLabel) {
			this.tvCellLabel = tvCellLabel;
		}
		
		private TextView tvCellLabel;
		
		public TextView getTvCellLabel() {
			return tvCellLabel;
		}
	}
}


你可能感兴趣的:(匿名项目连载(三)--->说说列表)