您的位置:首页 > 其它

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

2015-08-24 14:32 357 查看


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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: