Browse Source

1: 本地发送名片允许发送好友1.0

gongpm 9 years ago
parent
commit
6417405ed9

+ 0 - 1
WeiChat/src/main/AndroidManifest.xml

@@ -383,7 +383,6 @@
         <activity android:name=".ui.message.SelectCardActivity" >
         <activity android:name=".ui.message.SelectCardActivity" >
             <intent-filter>
             <intent-filter>
                 <action android:name="com.sk.weichat.ui.message.SelectCardActivity"/>
                 <action android:name="com.sk.weichat.ui.message.SelectCardActivity"/>
-                <!--<category android:name="android.intent.category.ALTERNATIVE"/>-->
             </intent-filter>
             </intent-filter>
         </activity>
         </activity>
     </application>
     </application>

+ 325 - 309
WeiChat/src/main/java/com/sk/weichat/bean/message/ChatMessage.java

@@ -8,10 +8,10 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.j256.ormlite.field.DatabaseField;
 import com.j256.ormlite.field.DatabaseField;
 import com.j256.ormlite.table.DatabaseTable;
 import com.j256.ormlite.table.DatabaseTable;
+import com.sk.weichat.db.dao.ChatMessageDao;
 import com.sk.weichat.db.dao.ChatMessageDaoImpl;
 import com.sk.weichat.db.dao.ChatMessageDaoImpl;
 
 
 /**
 /**
- * 
  * @项目名称: SkWeiChat-Baidu
  * @项目名称: SkWeiChat-Baidu
  * @包名: com.sk.weichat.bean.message
  * @包名: com.sk.weichat.bean.message
  * @作者:王阳
  * @作者:王阳
@@ -25,343 +25,359 @@ import com.sk.weichat.db.dao.ChatMessageDaoImpl;
 @DatabaseTable(daoClass = ChatMessageDaoImpl.class)
 @DatabaseTable(daoClass = ChatMessageDaoImpl.class)
 public class ChatMessage extends XmppMessage implements Parcelable {
 public class ChatMessage extends XmppMessage implements Parcelable {
 
 
-	public ChatMessage() {
-	}
+    public ChatMessage() {
 
 
-	public ChatMessage(String jsonData) {
-		parserJsonData(jsonData);
-	}
+    }
 
 
-	@DatabaseField
-	private String fromUserId;
+    public ChatMessage(String jsonData) {
+        parserJsonData(jsonData);
+    }
 
 
-	@DatabaseField
-	private String fromUserName;// 发送者名称
+    @DatabaseField
+    private String fromUserId;
 
 
+    @DatabaseField
+    private String fromUserName;// 发送者名称
 
 
-	/**
-	 * 在不同的消息类型里,代表不同的含义:<br/>
-	 * {@link XmppMessage#TYPE_TEXT} 文字 <br/>
-	 * {@link XmppMessage#TYPE_IMAGE} 图片的Url<br/>
-	 * {@link XmppMessage#TYPE_VOICE} 语音的Url <br/>
-	 * {@link XmppMessage#TYPE_LOCATION} 地理<br/>
-	 * {@link XmppMessage#TYPE_GIF} Gif图的名称 <br/>
-	 * {@link XmppMessage#TYPE_TIP} 系统提示的字<br/>
-	 * {@link XmppMessage#TYPE_FILE} 文件的url<br/>
-	 */
-	@DatabaseField
-	private String content;
+    /**
+     * 在不同的消息类型里,代表不同的含义:<br/>
+     * {@link XmppMessage#TYPE_TEXT} 文字 <br/>
+     * {@link XmppMessage#TYPE_IMAGE} 图片的Url<br/>
+     * {@link XmppMessage#TYPE_VOICE} 语音的Url <br/>
+     * {@link XmppMessage#TYPE_LOCATION} 地理<br/>
+     * {@link XmppMessage#TYPE_GIF} Gif图的名称 <br/>
+     * {@link XmppMessage#TYPE_TIP} 系统提示的字<br/>
+     * {@link XmppMessage#TYPE_FILE} 文件的url<br/>
+     */
+    @DatabaseField
+    private String content;
 
 
-	@DatabaseField
-	private String location_x;// 当为地理位置时,有效
+    @DatabaseField
+    private String location_x;// 当为地理位置时,有效
 
 
-	@DatabaseField
-	private String location_y;// 当为地理位置时,有效
+    @DatabaseField
+    private String location_y;// 当为地理位置时,有效
 
 
-	@DatabaseField
-	private int fileSize;// 当为图片、语音消息时,此节点有效。图片、语音文件的大小
+    @DatabaseField
+    private int fileSize;// 当为图片、语音消息时,此节点有效。图片、语音文件的大小
 
 
-	@DatabaseField
-	private int timeLen;// 当为语音消息时,此节点有效。语音信息的长度
+    @DatabaseField
+    private int timeLen;// 当为语音消息时,此节点有效。语音信息的长度
 
 
-	/* 本地额外存数数据 */
-	@DatabaseField(generatedId = true)
-	private int _id;
+    /* 本地额外存数数据 */
+    @DatabaseField(generatedId = true)
+    private int _id;
 
 
-	@DatabaseField
-	private int timeReceive;// 接收到消息回执的时间
+    @DatabaseField
+    private int timeReceive;// 接收到消息回执的时间
 
 
-	@DatabaseField
-	private String filePath;// 为语音视频图片文件的 本地路径(IOS端叫fileName),注意本地文件可能清除了,此节点代表的数据不一定有效
+    @DatabaseField
+    private String filePath;// 为语音视频图片文件的 本地路径(IOS端叫fileName),注意本地文件可能清除了,此节点代表的数据不一定有效
 
 
-	@DatabaseField
-	private boolean isUpload;// 当为图片和语音类型是,此节点有效,代表是否上传完成,默认false。isMySend=true,此节点有效,
+    @DatabaseField
+    private boolean isUpload;// 当为图片和语音类型是,此节点有效,代表是否上传完成,默认false。isMySend=true,此节点有效,
 
 
-	@DatabaseField
-	private boolean isDownload;// 当为图片和语音类型是,此节点有效,代表是否下载完成,默认false。isMySend=false,此节点有效
+    @DatabaseField
+    private boolean isDownload;// 当为图片和语音类型是,此节点有效,代表是否下载完成,默认false。isMySend=false,此节点有效
 
 
-	@DatabaseField
-	private int messageState;// 只有当消息是我发出的,此节点才有效。消息的发送状态,默认值=0,代表发送中
+    @DatabaseField
+    private int messageState;// 只有当消息是我发出的,此节点才有效。消息的发送状态,默认值=0,代表发送中
 
 
-	// 当为语音文件时,此节点代表语音是否已经读了。当为新朋友推送消息时,代表改推送消息是否已读。只在这两种情况下有效
-	@DatabaseField
-	private boolean isRead;// 默认为false 代表我未读
+    // 当为语音文件时,此节点代表语音是否已经读了。当为新朋友推送消息时,代表改推送消息是否已读。只在这两种情况下有效
+    @DatabaseField
+    private boolean isRead;// 默认为false 代表我未读
 
 
-	@DatabaseField
-	private int sipStatus;// 语音或者视频通话的状态,本地数据库存储即可
+    @DatabaseField
+    private int sipStatus;// 语音或者视频通话的状态,本地数据库存储即可
 
 
-	@DatabaseField
-	private int sipDuration;// 语音或者视频通话的时间,本地数据库存储即可
+    @DatabaseField
+    private int sipDuration;// 语音或者视频通话的时间,本地数据库存储即可
 
 
-	// //////推送特有的//////
-	@DatabaseField
-	private String objectId;// 用于商务圈推送,代表哪一条公共消息
+    // //////推送特有的//////
+    @DatabaseField
+    private String objectId;// 用于商务圈推送,代表哪一条公共消息
 
 
-	public int get_id() {
-		return _id;
-	}
 
 
-	public void set_id(int _id) {
-		this._id = _id;
-	}
+    private String cardId;
 
 
-	public String getFromUserId() {
-		return fromUserId;
-	}
+    public int get_id() {
+        return _id;
+    }
 
 
-	public void setFromUserId(String fromUserId) {
-		this.fromUserId = fromUserId;
-	}
+    public void set_id(int _id) {
+        this._id = _id;
+    }
 
 
-	// public String getToUserId() {
-	// return toUserId;
-	// }
-	//
-	// public void setToUserId(String toUserId) {
-	// this.toUserId = toUserId;
-	// }
+    public String getFromUserId() {
+        return fromUserId;
+    }
 
 
-	public String getContent() {
-		return content;
-	}
+    public void setFromUserId(String fromUserId) {
+        this.fromUserId = fromUserId;
+    }
 
 
-	public void setContent(String content) {
-		this.content = content;
-	}
+    public String getCardId() {
+        return cardId;
+    }
 
 
-	public String getFilePath() {
-		return filePath;
-	}
-
-	public void setFilePath(String filePath) {
-		this.filePath = filePath;
-	}
-
-	public String getLocation_x() {
-		return location_x;
-	}
-
-	public void setLocation_x(String location_x) {
-		this.location_x = location_x;
-	}
-
-	public String getLocation_y() {
-		return location_y;
-	}
-
-	public void setLocation_y(String location_y) {
-		this.location_y = location_y;
-	}
-
-	public int getFileSize() {
-		return fileSize;
-	}
-
-	public void setFileSize(int fileSize) {
-		this.fileSize = fileSize;
-	}
-
-	public int getTimeLen() {
-		return timeLen;
-	}
-
-	public void setTimeLen(int timeLen) {
-		this.timeLen = timeLen;
-	}
-
-	public int getMessageState() {
-		return messageState;
-	}
-
-	public void setRead(boolean isRead) {
-		this.isRead = isRead;
-	}
-
-	public void setMessageState(int messageState) {
-		this.messageState = messageState;
-	}
-
-	public boolean isRead() {
-		return isRead;
-	}
-
-	public String getObjectId() {
-		return objectId;
-	}
-
-	public void setObjectId(String objectId) {
-		this.objectId = objectId;
-	}
-
-	public String getFromUserName() {
-		return fromUserName;
-	}
-
-	public void setFromUserName(String fromUserName) {
-		this.fromUserName = fromUserName;
-	}
-
-	public boolean isUpload() {
-		return isUpload;
-	}
-
-	public void setUpload(boolean isUpload) {
-		this.isUpload = isUpload;
-	}
-
-	public boolean isDownload() {
-		return isDownload;
-	}
-
-	public void setDownload(boolean isDownload) {
-		this.isDownload = isDownload;
-	}
-
-	public int getTimeReceive() {
-		return timeReceive;
-	}
-
-	public void setTimeReceive(int timeReceive) {
-		this.timeReceive = timeReceive;
-	}
-
-	/**
-	 * 解析接收到的消息
-	 * 
-	 * @param jsonData
-	 */
-	private void parserJsonData(String jsonData) {
-		try {
-			JSONObject jObject = JSON.parseObject(jsonData);
-			type = getIntValueFromJSONObject(jObject, "type");
-			timeSend = getIntValueFromJSONObject(jObject, "timeSend");
-			fromUserId = getStringValueFromJSONObject(jObject, "fromUserId");
-			fromUserName = getStringValueFromJSONObject(jObject, "fromUserName");
-			content = getStringValueFromJSONObject(jObject, "content");
-			location_x = getStringValueFromJSONObject(jObject, "location_x");
-			location_y = getStringValueFromJSONObject(jObject, "location_y");
-			fileSize = getIntValueFromJSONObject(jObject, "fileSize");
-			timeLen = getIntValueFromJSONObject(jObject, "timeLen");
-			filePath=getStringValueFromJSONObject(jObject,"filePath");//增加解析文件路径
-			objectId=getStringValueFromJSONObject(jObject,"objectId");
-
-			// 表示未读
-			isRead = false;
-			isMySend = false;
-			isDownload = false;
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-
-	public String toJsonString(boolean isGroupChatMsg) {
-		String msg = "";
-		JSONObject object = new JSONObject();
-		object.put("type", this.type);
-		object.put("timeSend", this.timeSend);
-		if (isGroupChatMsg) {
-			object.put("fromUserId", this.fromUserId);
-		}
-
-		if (!TextUtils.isEmpty(this.fromUserName)) {
-			object.put("fromUserName", this.fromUserName);
-		}
-
-		if (!TextUtils.isEmpty(this.content)) {
-			object.put("content", this.content);
-		}
-
-		if (!TextUtils.isEmpty(this.location_x)) {
-			object.put("location_x", this.location_x);
-		}
-
-		if (!TextUtils.isEmpty(this.location_y)) {
-			object.put("location_y", this.location_y);
-		}
-
-		if (!TextUtils.isEmpty(this.objectId)) {
-			object.put("objectId", this.objectId);
-		}
-
-		if (this.fileSize > 0) {
-			object.put("fileSize", this.fileSize);
-		}
-		//增加filePath
-        if(!TextUtils.isEmpty(this.filePath)){
-        	object.put("filePath",this.filePath);
+    public void setCardId(String cardId) {
+        this.cardId = cardId;
+    }
+    // public String getToUserId() {
+    // return toUserId;
+    // }
+    //
+    // public void setToUserId(String toUserId) {
+    // this.toUserId = toUserId;
+    // }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getFilePath() {
+        return filePath;
+    }
+
+    public void setFilePath(String filePath) {
+        this.filePath = filePath;
+    }
+
+    public String getLocation_x() {
+        return location_x;
+    }
+
+    public void setLocation_x(String location_x) {
+        this.location_x = location_x;
+    }
+
+    public String getLocation_y() {
+        return location_y;
+    }
+
+    public void setLocation_y(String location_y) {
+        this.location_y = location_y;
+    }
+
+    public int getFileSize() {
+        return fileSize;
+    }
+
+    public void setFileSize(int fileSize) {
+        this.fileSize = fileSize;
+    }
+
+    public int getTimeLen() {
+        return timeLen;
+    }
+
+    public void setTimeLen(int timeLen) {
+        this.timeLen = timeLen;
+    }
+
+    public int getMessageState() {
+        return messageState;
+    }
+
+    public void setRead(boolean isRead) {
+        this.isRead = isRead;
+    }
+
+    public void setMessageState(int messageState) {
+        this.messageState = messageState;
+    }
+
+    public boolean isRead() {
+        return isRead;
+    }
+
+    public String getObjectId() {
+        return objectId;
+    }
+
+    public void setObjectId(String objectId) {
+        this.objectId = objectId;
+    }
+
+    public String getFromUserName() {
+        return fromUserName;
+    }
+
+    public void setFromUserName(String fromUserName) {
+        this.fromUserName = fromUserName;
+    }
+
+    public boolean isUpload() {
+        return isUpload;
+    }
+
+    public void setUpload(boolean isUpload) {
+        this.isUpload = isUpload;
+    }
+
+    public boolean isDownload() {
+        return isDownload;
+    }
+
+    public void setDownload(boolean isDownload) {
+        this.isDownload = isDownload;
+    }
+
+    public int getTimeReceive() {
+        return timeReceive;
+    }
+
+    public void setTimeReceive(int timeReceive) {
+        this.timeReceive = timeReceive;
+    }
+
+    /**
+     * 解析接收到的消息
+     *
+     * @param jsonData
+     */
+    private void parserJsonData(String jsonData) {
+        try {
+            JSONObject jObject = JSON.parseObject(jsonData);
+
+            type = getIntValueFromJSONObject(jObject, "type");
+            timeSend = getIntValueFromJSONObject(jObject, "timeSend");
+            fromUserId = getStringValueFromJSONObject(jObject, "fromUserId");
+            fromUserName = getStringValueFromJSONObject(jObject, "fromUserName");
+            content = getStringValueFromJSONObject(jObject, "content");
+            location_x = getStringValueFromJSONObject(jObject, "location_x");
+            location_y = getStringValueFromJSONObject(jObject, "location_y");
+            fileSize = getIntValueFromJSONObject(jObject, "fileSize");
+            timeLen = getIntValueFromJSONObject(jObject, "timeLen");
+            filePath = getStringValueFromJSONObject(jObject, "filePath");//增加解析文件路径
+            objectId = getStringValueFromJSONObject(jObject, "objectId");
+//            cardId=getStringValueFromJSONObject(jObject,"cardId");
+            // 表示未读
+            isRead = false;
+            isMySend = false;
+            isDownload = false;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public String toJsonString(boolean isGroupChatMsg) {
+        String msg = "";
+        JSONObject object = new JSONObject();
+        object.put("type", this.type);
+        object.put("timeSend", this.timeSend);
+        if (isGroupChatMsg) {
+            object.put("fromUserId", this.fromUserId);
+        }
+        if (!TextUtils.isEmpty(this.fromUserName)) {
+            object.put("fromUserName", this.fromUserName);
+        }
+
+        if (!TextUtils.isEmpty(this.content)) {
+            object.put("content", this.content);
+        }
+
+        if (!TextUtils.isEmpty(this.location_x)) {
+            object.put("location_x", this.location_x);
+        }
+
+        if (!TextUtils.isEmpty(this.location_y)) {
+            object.put("location_y", this.location_y);
         }
         }
-		if (this.timeLen > 0) {
-			object.put("timeLen", this.timeLen);
-		}
-
-		msg = object.toString();
-		return msg;
-	}
-
-	public boolean validate() {
-		return type != 0 && !TextUtils.isEmpty(fromUserId) && !TextUtils.isEmpty(fromUserName) && timeSend != 0;
-	}
-
-	@Override
-	public int describeContents() {
-		// TODO Auto-generated method stub
-		return 0;
-	}
-
-	@Override
-	public void writeToParcel(Parcel dest, int flags) {
-		dest.writeInt(_id);
-		dest.writeString(content);
-		dest.writeString(filePath);
-		dest.writeInt(fileSize);
-		dest.writeString(fromUserId);
-		dest.writeString(fromUserName);
-		dest.writeString(location_x);
-		dest.writeString(location_y);
-		dest.writeInt(messageState);
-		dest.writeString(objectId);
-		dest.writeString(packetId);
-		dest.writeInt(sipDuration);
-		dest.writeInt(sipStatus);
-		dest.writeInt(timeLen);
-		dest.writeInt(timeReceive);
-		dest.writeInt(timeSend);
-		dest.writeInt(type);
+
+        if (!TextUtils.isEmpty(this.objectId)) {
+            object.put("objectId", this.objectId);
+        }
+//        if (!TextUtils.isEmpty(this.cardId)) {
+//            object.put("cardId", this.cardId);
+//        }
+
+        if (this.fileSize > 0) {
+            object.put("fileSize", this.fileSize);
+        }
+        //增加filePath
+        if (!TextUtils.isEmpty(this.filePath)) {
+            object.put("filePath", this.filePath);
+        }
+        if (this.timeLen > 0) {
+            object.put("timeLen", this.timeLen);
+        }
+
+        msg = object.toString();
+        return msg;
+    }
+
+    public boolean validate() {
+        return type != 0 && !TextUtils.isEmpty(fromUserId) && !TextUtils.isEmpty(fromUserName) && timeSend != 0;
+    }
+
+    @Override
+    public int describeContents() {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(_id);
+        dest.writeString(content);
+        dest.writeString(filePath);
+        dest.writeInt(fileSize);
+        dest.writeString(fromUserId);
+        dest.writeString(fromUserName);
+        dest.writeString(location_x);
+        dest.writeString(location_y);
+        dest.writeInt(messageState);
+        dest.writeString(objectId);
+//        dest.writeString(cardId);
+        dest.writeString(packetId);
+        dest.writeInt(sipDuration);
+        dest.writeInt(sipStatus);
+        dest.writeInt(timeLen);
+        dest.writeInt(timeReceive);
+        dest.writeInt(timeSend);
+        dest.writeInt(type);
 //		dest.writeBooleanArray(val);
 //		dest.writeBooleanArray(val);
-	}
-	 public static final Creator<ChatMessage> CREATOR =new Creator<ChatMessage>() {
-
-		@Override
-		public ChatMessage createFromParcel(Parcel source) {
-			ChatMessage message=new ChatMessage();
-			message._id=source.readInt();
-			message.content=source.readString();
-			message.filePath=source.readString();
-			message.fileSize=source.readInt();
-			message.fromUserId=source.readString();
-			message.fromUserName=source.readString();
+    }
+
+    public static final Creator<ChatMessage> CREATOR = new Creator<ChatMessage>() {
+
+        @Override
+        public ChatMessage createFromParcel(Parcel source) {
+            ChatMessage message = new ChatMessage();
+            message._id = source.readInt();
+            message.content = source.readString();
+            message.filePath = source.readString();
+            message.fileSize = source.readInt();
+            message.fromUserId = source.readString();
+            message.fromUserName = source.readString();
 //			boolean[] val={message.isDownload,message.isMySend,message.isRead,message.isUpload};
 //			boolean[] val={message.isDownload,message.isMySend,message.isRead,message.isUpload};
 //			source.readBooleanArray(val);
 //			source.readBooleanArray(val);
-			message.location_x=source.readString();
-			message.location_y=source.readString();
-			message.messageState=source.readInt();
-			message.objectId=source.readString();
-			message.packetId=source.readString();
-			message.sipDuration=source.readInt();
-			message.sipStatus=source.readInt();
-			message.timeLen=source.readInt();
-			message.timeReceive=source.readInt();
-			message.timeSend=source.readInt();
-			message.type=source.readInt();
-	
-			return message;
-		}
-
-		@Override
-		public ChatMessage[] newArray(int size) {
-			
-			return new ChatMessage[size];
-		}
-		 
-	 };
+            message.location_x = source.readString();
+            message.location_y = source.readString();
+            message.messageState = source.readInt();
+            message.objectId = source.readString();
+//            message.cardId=source.readString();
+            message.packetId = source.readString();
+            message.sipDuration = source.readInt();
+            message.sipStatus = source.readInt();
+            message.timeLen = source.readInt();
+            message.timeReceive = source.readInt();
+            message.timeSend = source.readInt();
+            message.type = source.readInt();
+
+            return message;
+        }
+
+        @Override
+        public ChatMessage[] newArray(int size) {
+
+            return new ChatMessage[size];
+        }
+
+    };
 }
 }

+ 126 - 37
WeiChat/src/main/java/com/sk/weichat/ui/message/ChatActivity.java

@@ -23,12 +23,15 @@ import android.view.MenuItem;
 import android.widget.TextView;
 import android.widget.TextView;
 import android.widget.Toast;
 import android.widget.Toast;
 
 
+import com.android.volley.Response;
+import com.android.volley.VolleyError;
 import com.ipaulpro.afilechooser.FileUtils;
 import com.ipaulpro.afilechooser.FileUtils;
 import com.nostra13.universalimageloader.core.ImageLoader;
 import com.nostra13.universalimageloader.core.ImageLoader;
 import com.sk.weichat.AppConstant;
 import com.sk.weichat.AppConstant;
 import com.sk.weichat.MyApplication;
 import com.sk.weichat.MyApplication;
 import com.sk.weichat.R;
 import com.sk.weichat.R;
 import com.sk.weichat.bean.Friend;
 import com.sk.weichat.bean.Friend;
+import com.sk.weichat.bean.User;
 import com.sk.weichat.bean.message.ChatMessage;
 import com.sk.weichat.bean.message.ChatMessage;
 import com.sk.weichat.bean.message.XmppMessage;
 import com.sk.weichat.bean.message.XmppMessage;
 import com.sk.weichat.broadcast.MsgBroadcast;
 import com.sk.weichat.broadcast.MsgBroadcast;
@@ -50,6 +53,10 @@ import com.sk.weichat.view.ChatBottomView.ChatBottomListener;
 import com.sk.weichat.view.ChatContentView;
 import com.sk.weichat.view.ChatContentView;
 import com.sk.weichat.view.ChatContentView.MessageEventListener;
 import com.sk.weichat.view.ChatContentView.MessageEventListener;
 import com.sk.weichat.view.PullDownListView;
 import com.sk.weichat.view.PullDownListView;
+import com.sk.weichat.volley.FastVolley;
+import com.sk.weichat.volley.ObjectResult;
+import com.sk.weichat.volley.Result;
+import com.sk.weichat.volley.StringJsonObjectRequest;
 import com.sk.weichat.xmpp.CoreService;
 import com.sk.weichat.xmpp.CoreService;
 import com.sk.weichat.xmpp.CoreService.CoreServiceBinder;
 import com.sk.weichat.xmpp.CoreService.CoreServiceBinder;
 import com.sk.weichat.xmpp.ListenerManager;
 import com.sk.weichat.xmpp.ListenerManager;
@@ -80,6 +87,7 @@ import java.util.UUID;
 public class ChatActivity extends ActionBackActivity
 public class ChatActivity extends ActionBackActivity
         implements MessageEventListener, ChatBottomListener, ChatMessageListener {
         implements MessageEventListener, ChatBottomListener, ChatMessageListener {
     public static final String FRIEND = "friend";
     public static final String FRIEND = "friend";
+
     @SuppressWarnings("unused")
     @SuppressWarnings("unused")
     private TextView mAuthStateTipTv;
     private TextView mAuthStateTipTv;
     private ChatContentView mChatContentView;
     private ChatContentView mChatContentView;
@@ -89,10 +97,10 @@ public class ChatActivity extends ActionBackActivity
     private String mLoginNickName;
     private String mLoginNickName;
     private Friend mFriend;// 存储所有的当前聊天对象
     private Friend mFriend;// 存储所有的当前聊天对象
     private List<ChatMessage> mChatMessages;// 存储聊天消息
     private List<ChatMessage> mChatMessages;// 存储聊天消息
-    private Handler mHandler = new Handler(){
+    private Handler mHandler = new Handler() {
         @Override
         @Override
         public void handleMessage(Message msg) {
         public void handleMessage(Message msg) {
-            switch (msg.what){
+            switch (msg.what) {
                 case 5:
                 case 5:
 
 
                     break;
                     break;
@@ -105,8 +113,10 @@ public class ChatActivity extends ActionBackActivity
     private boolean mHasSend = false;// 有没有发送过消息,发送过需要更新界面
     private boolean mHasSend = false;// 有没有发送过消息,发送过需要更新界面
     private static final int REQUEST_CODE_SELECT_FILE = 4;
     private static final int REQUEST_CODE_SELECT_FILE = 4;
     private static final int REQUEST_CODE_SELECT_Locate = 5;
     private static final int REQUEST_CODE_SELECT_Locate = 5;
+    private static final int REQUEST_CODE_SELECT_CARD = 6;
     private ChatMessage instantMessage;//转发消息传过来的message
     private ChatMessage instantMessage;//转发消息传过来的message
     private String instantFilePath;//转发文件传过来的path
     private String instantFilePath;//转发文件传过来的path
+    private FastVolley mFastVolley;
 
 
 
 
     protected void onCreate(Bundle savedInstanceState) {
     protected void onCreate(Bundle savedInstanceState) {
@@ -151,15 +161,15 @@ public class ChatActivity extends ActionBackActivity
                 if (position == 10000) {
                 if (position == 10000) {
                     return;
                     return;
                 }
                 }
-                ChatMessage message= mChatMessages.get(position);
-               boolean isSuccess= ChatMessageDao.getInstance().deleteSingleChatMessage(mLoginUserId,mFriend.getUserId(),message);
-                if(isSuccess){
+                ChatMessage message = mChatMessages.get(position);
+                boolean isSuccess = ChatMessageDao.getInstance().deleteSingleChatMessage(mLoginUserId, mFriend.getUserId(), message);
+                if (isSuccess) {
 
 
-                mChatMessages.remove(position);
-                mChatContentView.notifyDataSetInvalidated(true);
+                    mChatMessages.remove(position);
+                    mChatContentView.notifyDataSetInvalidated(true);
                     MsgBroadcast.broadcastMsgUiUpdate(mContext);
                     MsgBroadcast.broadcastMsgUiUpdate(mContext);
-                }else{
-                    Toast.makeText(mContext,"删除失败",Toast.LENGTH_SHORT).show();
+                } else {
+                    Toast.makeText(mContext, "删除失败", Toast.LENGTH_SHORT).show();
                 }
                 }
             }
             }
 
 
@@ -196,7 +206,9 @@ public class ChatActivity extends ActionBackActivity
         mAuthStateTipTv = (TextView) findViewById(R.id.auth_state_tip);
         mAuthStateTipTv = (TextView) findViewById(R.id.auth_state_tip);
         mChatContentView = (ChatContentView) findViewById(R.id.chat_content_view);
         mChatContentView = (ChatContentView) findViewById(R.id.chat_content_view);
         mChatContentView.setToUserId(mFriend.getUserId());
         mChatContentView.setToUserId(mFriend.getUserId());
+
         mChatContentView.setData(mChatMessages);
         mChatContentView.setData(mChatMessages);
+
         mChatContentView.setMessageEventListener(this);
         mChatContentView.setMessageEventListener(this);
         mChatContentView.setRefreshListener(new PullDownListView.RefreshingListener() {
         mChatContentView.setRefreshListener(new PullDownListView.RefreshingListener() {
             @Override
             @Override
@@ -237,6 +249,8 @@ public class ChatActivity extends ActionBackActivity
     protected void onDestroy() {
     protected void onDestroy() {
         super.onDestroy();
         super.onDestroy();
         mChatBottomView.recordCancel();
         mChatBottomView.recordCancel();
+        if (mFastVolley!=null )
+        mFastVolley.cancelAll(FRIEND);
         ListenerManager.getInstance().removeChatMessageListener(this);
         ListenerManager.getInstance().removeChatMessageListener(this);
         unbindService(mConnection);
         unbindService(mConnection);
         unregisterReceiver(broadcastReceiver);
         unregisterReceiver(broadcastReceiver);
@@ -303,7 +317,7 @@ public class ChatActivity extends ActionBackActivity
                     } else if (messageType == XmppMessage.TYPE_VIDEO) {// 转发视频
                     } else if (messageType == XmppMessage.TYPE_VIDEO) {// 转发视频
                         sendVideo(new File(instantMessage.getFilePath()));
                         sendVideo(new File(instantMessage.getFilePath()));
                     } else if (messageType == XmppMessage.TYPE_FILE && instantFilePath != null) {//转发文件
                     } else if (messageType == XmppMessage.TYPE_FILE && instantFilePath != null) {//转发文件
-						File file=new File(instantFilePath);
+                        File file = new File(instantFilePath);
                         if (file.exists()) {
                         if (file.exists()) {
                             sendFile(file);
                             sendFile(file);
                         } else {
                         } else {
@@ -311,7 +325,7 @@ public class ChatActivity extends ActionBackActivity
                         }
                         }
                     }
                     }
                     /*
                     /*
-					 * else if(messageType==XmppMessage.TYPE_CARD){
+                     * else if(messageType==XmppMessage.TYPE_CARD){
 					 * sendCard(instantMessage.getObjectId()); }
 					 * sendCard(instantMessage.getObjectId()); }
 					 */
 					 */
                     instantMessage = null;
                     instantMessage = null;
@@ -412,7 +426,7 @@ public class ChatActivity extends ActionBackActivity
      * ChatBottomView的回调
      * ChatBottomView的回调
      ***************************************/
      ***************************************/
 
 
-    private void  sendMessage(final ChatMessage message) {
+    private void sendMessage(final ChatMessage message) {
         if (interprect(message)) {
         if (interprect(message)) {
             return;
             return;
         }
         }
@@ -430,11 +444,17 @@ public class ChatActivity extends ActionBackActivity
                 Log.d("roamer", "sendChatMessage....");
                 Log.d("roamer", "sendChatMessage....");
                 mService.sendChatMessage(mFriend.getUserId(), message);
                 mService.sendChatMessage(mFriend.getUserId(), message);
             }
             }
+        } else if (message.getType() == XmppMessage.TYPE_CARD) {
+            Log.i("gongpengming", "card");
+            mService.sendChatMessage(mFriend.getUserId(), message);
+            //进行百度推送
+            sendPushTask(mLoginUserId, mFriend.getUserId(), message.getContent());
         } else {
         } else {
             Log.d("roamer", "sendChatMessage");
             Log.d("roamer", "sendChatMessage");
             mService.sendChatMessage(mFriend.getUserId(), message);
             mService.sendChatMessage(mFriend.getUserId(), message);
             //进行百度推送
             //进行百度推送
-            sendPushTask(mLoginUserId,mFriend.getUserId(),message.getContent());
+            sendPushTask(mLoginUserId, mFriend.getUserId(), message.getContent());
+
         }
         }
     }
     }
 
 
@@ -600,20 +620,32 @@ public class ChatActivity extends ActionBackActivity
         sendMessage(message);
         sendMessage(message);
     }
     }
 
 
+    private String objectId;
+
+    //TODO 发送卡片
     public void sendCard(String ObjectId) {
     public void sendCard(String ObjectId) {
-        ChatMessage message = new ChatMessage();
-        message.setType(XmppMessage.TYPE_CARD);
-        message.setFromUserName(mLoginNickName);
-        message.setFromUserId(mLoginUserId);//名片ID
-        message.setTimeSend(TimeUtils.sk_time_current_time());
-        message.setObjectId(ObjectId);
-        message.setContent(MyApplication.getInstance().mLoginUser.getSex() + "");// 性别
+        this.objectId = ObjectId;
+//        ChatMessage message = new ChatMessage();
+//        message.setType(XmppMessage.TYPE_CARD);
+//        message.setFromUserName(mLoginNickName);
+//        message.setFromUserId(mLoginUserId);
+//        message.setTimeSend(TimeUtils.sk_time_current_time());
+        //TODO 选择名片用户
+        Intent intent = new Intent(this, SelectCardActivity.class);
+//        intent.setAction("");
+        startActivityForResult(intent, REQUEST_CODE_SELECT_CARD);
+        //TODO 以下在返回里写
+
+//        message.setObjectId(ObjectId);
+//        message.setContent(MyApplication.getInstance().mLoginUser.getSex() + "");// 性别
         // 0表示女,1表示男
         // 0表示女,1表示男
-        mChatMessages.add(message);
-        mChatContentView.notifyDataSetInvalidated(true);
-        sendMessage(message);
+//        mChatMessages.add(message);
+//        mChatContentView.notifyDataSetInvalidated(true);
+//        sendMessage(message);
+
     }
     }
 
 
+
     @Override
     @Override
     public void clickPhoto() {
     public void clickPhoto() {
         Log.d("roamer", "clickphoto");
         Log.d("roamer", "clickphoto");
@@ -642,9 +674,8 @@ public class ChatActivity extends ActionBackActivity
 //    	Log.d("wang","usid.getUserId..."+mFriend.getUserId());
 //    	Log.d("wang","usid.getUserId..."+mFriend.getUserId());
 //    	intent.putExtra(Constants.AUDIO_PHONENUMBER, mFriend.getUserId());
 //    	intent.putExtra(Constants.AUDIO_PHONENUMBER, mFriend.getUserId());
 //    	intent.putExtra(Constants.IS_AUDIO_OR_VIDEO, true);//true为语音
 //    	intent.putExtra(Constants.IS_AUDIO_OR_VIDEO, true);//true为语音
-//
 //    	startActivity(intent);
 //    	startActivity(intent);
-    	
+
     }
     }
 
 
     @Override
     @Override
@@ -655,6 +686,7 @@ public class ChatActivity extends ActionBackActivity
 //    	intent.putExtra(Constants.IS_AUDIO_OR_VIDEO, false);//true为语音
 //    	intent.putExtra(Constants.IS_AUDIO_OR_VIDEO, false);//true为语音
 //    	startActivity(intent);
 //    	startActivity(intent);
     }
     }
+
     @Override
     @Override
     public void clickFile() {
     public void clickFile() {
         // Intent intent = new Intent(mContext, MemoryFileManagement.class);
         // Intent intent = new Intent(mContext, MemoryFileManagement.class);
@@ -761,6 +793,7 @@ public class ChatActivity extends ActionBackActivity
 
 
     @Override
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+
         Log.d("roamer", "进入到activityResult...");
         Log.d("roamer", "进入到activityResult...");
         if (requestCode == REQUEST_CODE_CAPTURE_PHOTO) {// 拍照返回
         if (requestCode == REQUEST_CODE_CAPTURE_PHOTO) {// 拍照返回
             if (resultCode == Activity.RESULT_OK) {
             if (resultCode == Activity.RESULT_OK) {
@@ -830,9 +863,67 @@ public class ChatActivity extends ActionBackActivity
             } else {
             } else {
                 ToastUtil.showToast(mContext, "请把定位开启!");
                 ToastUtil.showToast(mContext, "请把定位开启!");
             }
             }
+        } else if (requestCode == REQUEST_CODE_SELECT_CARD && resultCode == RESULT_OK) {//选择名片返回
+            Friend card = (Friend) data.getSerializableExtra("card");
+
+            ChatMessage message = new ChatMessage();
+            message.setType(XmppMessage.TYPE_CARD);
+            message.setFromUserName(card.getNickName());
+            message.setCardId(card.getUserId());
+            message.setFromUserId(mLoginUserId);
+            message.setMySend(true);
+            message.setTimeSend(TimeUtils.sk_time_current_time());
+            message.setObjectId(objectId);
+
+            loadCardInfo(card.getUserId(), message);
+
+            mChatMessages.add(message);
+            mChatContentView.notifyDataSetInvalidated(true);
+//            message.setContent(MyApplication.getInstance().mLoginUser.getSex() + "");// 性别
+//            // 0表示女,1表示男
+//            sendMessage(message);
         }
         }
     }
     }
 
 
+    private void loadCardInfo(String userId, final ChatMessage message) {
+        //TODO 发送名片时候 访问网络获取性别
+        mFastVolley = MyApplication.getInstance().getFastVolley();
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("access_token", MyApplication.getInstance().mAccessToken);
+        params.put("userId", userId);
+        Log.i("LoginInfo", "发送网络数据:userid=" + userId);
+        StringJsonObjectRequest<User> request = new StringJsonObjectRequest<User>(mConfig.USER_GET_URL,
+                new Response.ErrorListener() {
+                    @Override
+                    public void onErrorResponse(VolleyError arg0) {
+                        Log.i("gongpengming", "获取失败");
+                        message.setContent(-1 + "");//   当失败时候显示保密
+                        // 0表示女,1表示男
+                        sendMessage(message);
+                    }
+                }, new StringJsonObjectRequest.Listener<User>() {
+
+            @Override
+            public void onResponse(ObjectResult<User> result) {
+
+                boolean success = Result.defaultParser(mContext, result, true);
+                if (success && result.getData() != null) {
+                    User mUser = result.getData();
+                    message.setContent(mUser.getSex()+ "");//   成功时候显示性别
+                    // 0表示女,1表示男
+                    sendMessage(message);
+                } else {
+                    Log.i("gongpengming", "获取失败");
+                    message.setContent(-1+ "");//   当失败时候显示保密
+                    // 0表示女,1表示男
+                    sendMessage(message);
+                }
+            }
+        }, User.class, params);
+        mFastVolley.addDefaultRequest(FRIEND , request);
+    }
+
+
     @Override
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
     public boolean onCreateOptionsMenu(Menu menu) {
         getMenuInflater().inflate(R.menu.menu_muc_chat, menu);
         getMenuInflater().inflate(R.menu.menu_muc_chat, menu);
@@ -842,7 +933,7 @@ public class ChatActivity extends ActionBackActivity
     @Override
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == R.id.room_info) {
         if (item.getItemId() == R.id.room_info) {
-            Intent intent =new Intent(this, BasicInfoActivity.class);
+            Intent intent = new Intent(this, BasicInfoActivity.class);
             intent.putExtra(AppConstant.EXTRA_USER_ID, mFriend.getUserId());
             intent.putExtra(AppConstant.EXTRA_USER_ID, mFriend.getUserId());
             startActivity(intent);
             startActivity(intent);
             return true;
             return true;
@@ -851,23 +942,21 @@ public class ChatActivity extends ActionBackActivity
     }
     }
 
 
 
 
-
-
     /**
     /**
      * @desc:推送给百度服务
      * @desc:推送给百度服务
      * @author:Administrator on 2016/3/14 19:37
      * @author:Administrator on 2016/3/14 19:37
      */
      */
-    public void sendPushTask(String from,String to,String body){
+    public void sendPushTask(String from, String to, String body) {
         //http://113.105.74.140:8092/tigase/notify?from=100118&to=100254&body=rrrrr&ts=1
         //http://113.105.74.140:8092/tigase/notify?from=100118&to=100254&body=rrrrr&ts=1
         //http://192.168.253.244:8092/tigase/notify
         //http://192.168.253.244:8092/tigase/notify
-        String url="http://113.105.74.140:8092/tigase/notify";
-        Map<String,Object> params=new HashMap<String,Object>();
-        params.put("from",from);
-        params.put("to",to);
-        params.put("body",body);
-        params.put("ts",1);
-        Log.i("push","推送百度 from:"+from+"to:"+to+"body:"+body);
-        ViewUtil.httpSendRequest(this,url,params,mHandler,null,5,null,null,"get");
+        String url = "http://113.105.74.140:8092/tigase/notify";
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("from", from);
+        params.put("to", to);
+        params.put("body", body);
+        params.put("ts", 1);
+        Log.i("push", "推送百度 from:" + from + "to:" + to + "body:" + body);
+        ViewUtil.httpSendRequest(this, url, params, mHandler, null, 5, null, null, "get");
     }
     }
 
 
 }
 }

+ 1 - 2
WeiChat/src/main/java/com/sk/weichat/ui/message/SelectCardActivity.java

@@ -4,8 +4,8 @@ import android.app.ProgressDialog;
 import android.content.ComponentName;
 import android.content.ComponentName;
 import android.content.Intent;
 import android.content.Intent;
 import android.content.ServiceConnection;
 import android.content.ServiceConnection;
-import android.os.IBinder;
 import android.os.Bundle;
 import android.os.Bundle;
+import android.os.IBinder;
 import android.util.Log;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View;
@@ -17,7 +17,6 @@ import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.ListView;
 import android.widget.TextView;
 import android.widget.TextView;
 
 
-
 import com.sk.weichat.MyApplication;
 import com.sk.weichat.MyApplication;
 import com.sk.weichat.R;
 import com.sk.weichat.R;
 import com.sk.weichat.bean.Friend;
 import com.sk.weichat.bean.Friend;

+ 12 - 8
WeiChat/src/main/java/com/sk/weichat/view/ChatContentView.java

@@ -174,8 +174,9 @@ public class ChatContentView extends PullDownListView implements OnMediaStateCha
     public void setData(List<ChatMessage> chatMessages) {
     public void setData(List<ChatMessage> chatMessages) {
         mChatMessages = chatMessages;
         mChatMessages = chatMessages;
         mChatContentAdapter = new ChatContentAdapter();
         mChatContentAdapter = new ChatContentAdapter();
-        setAdapter(mChatContentAdapter);
+                setAdapter(mChatContentAdapter);
         mChatContentAdapter.notifyDataSetInvalidated();
         mChatContentAdapter.notifyDataSetInvalidated();
+        Log.i("gongpengming",mChatMessages.size()+"zhangdu");
     }
     }
 
 
     /**
     /**
@@ -306,7 +307,7 @@ public class ChatContentView extends PullDownListView implements OnMediaStateCha
                         return VIEW_FROM_ME_CARD;
                         return VIEW_FROM_ME_CARD;
                 }
                 }
             } else {
             } else {
-                switch (messageType) {//接收消息
+                switch (messageType) {
                     case XmppMessage.TYPE_TEXT:
                     case XmppMessage.TYPE_TEXT:
                         return VIEW_TO_ME_TEXT;
                         return VIEW_TO_ME_TEXT;
                     case XmppMessage.TYPE_IMAGE:
                     case XmppMessage.TYPE_IMAGE:
@@ -522,7 +523,11 @@ public class ChatContentView extends PullDownListView implements OnMediaStateCha
                 } else {// 其他
                 } else {// 其他
                     AvatarHelper.getInstance().displayAvatar(mLoginUserId, contentViewHolder.chat_head_iv, true);
                     AvatarHelper.getInstance().displayAvatar(mLoginUserId, contentViewHolder.chat_head_iv, true);
                 }
                 }
-
+                if (viewType==VIEW_FROM_ME_CARD){
+                    Log.i("gongpengmingIV","进入名片userId="+message.getContent());
+                    CardViewHolder imageViewHolder= (CardViewHolder) contentViewHolder;
+                    AvatarHelper.getInstance().displayAvatar(message.getCardId(), imageViewHolder.chat_warp_head, true);
+                }
                 contentViewHolder.chat_head_iv.setOnClickListener(new OnClickListener() {
                 contentViewHolder.chat_head_iv.setOnClickListener(new OnClickListener() {
                     @Override
                     @Override
                     public void onClick(View v) {
                     public void onClick(View v) {
@@ -579,10 +584,8 @@ public class ChatContentView extends PullDownListView implements OnMediaStateCha
                     contentViewHolder.nick_name.setText(mRoomNickName);
                     contentViewHolder.nick_name.setText(mRoomNickName);
                 }
                 }
             } else {
             } else {
-
 //                    contentViewHolder.nick_name.setText(FriendDao.getInstance().getFriend(mLoginUserId, message.getFromUserId()).getNickName());
 //                    contentViewHolder.nick_name.setText(FriendDao.getInstance().getFriend(mLoginUserId, message.getFromUserId()).getNickName());
                 Friend friend=FriendDao.getInstance().getFriend(mLoginUserId,message.getFromUserId());
                 Friend friend=FriendDao.getInstance().getFriend(mLoginUserId,message.getFromUserId());
-
                 contentViewHolder.nick_name.setText(friend==null?message.getFromUserName():(friend.getRemarkName()!=null?friend.getRemarkName():friend.getNickName()));
                 contentViewHolder.nick_name.setText(friend==null?message.getFromUserName():(friend.getRemarkName()!=null?friend.getRemarkName():friend.getNickName()));
             }
             }
             View longView = null;
             View longView = null;
@@ -769,7 +772,6 @@ public class ChatContentView extends PullDownListView implements OnMediaStateCha
                         cardViewHolder.chat_person_name.setText("昵称:" + message.getFromUserName());
                         cardViewHolder.chat_person_name.setText("昵称:" + message.getFromUserName());
                         if (message.getContent().equals("0")) {
                         if (message.getContent().equals("0")) {
                             cardViewHolder.chat_person_sex.setText("性别:女");
                             cardViewHolder.chat_person_sex.setText("性别:女");
-
                         } else {
                         } else {
                             cardViewHolder.chat_person_sex.setText("性别:男");
                             cardViewHolder.chat_person_sex.setText("性别:男");
                         }
                         }
@@ -972,7 +974,8 @@ public class ChatContentView extends PullDownListView implements OnMediaStateCha
                         mContext.startActivity(intent);
                         mContext.startActivity(intent);
                     }
                     }
                 });
                 });
-            } else if (viewType == VIEW_TO_ME_CARD || viewType == VIEW_FROM_ME_CARD) {
+            }
+            else if (viewType == VIEW_TO_ME_CARD || viewType == VIEW_FROM_ME_CARD) {
                 final CardViewHolder cardViewHolder = (CardViewHolder) contentViewHolder;
                 final CardViewHolder cardViewHolder = (CardViewHolder) contentViewHolder;
                 cardViewHolder.relativeLayout.setOnClickListener(new OnClickListener() {
                 cardViewHolder.relativeLayout.setOnClickListener(new OnClickListener() {
 
 
@@ -987,7 +990,7 @@ public class ChatContentView extends PullDownListView implements OnMediaStateCha
                             }
                             }
                         }
                         }
                         Intent intent = new Intent(mContext, BasicInfoActivity.class);
                         Intent intent = new Intent(mContext, BasicInfoActivity.class);
-                        intent.putExtra(AppConstant.EXTRA_USER_ID, message.getFromUserId());
+                        intent.putExtra(AppConstant.EXTRA_USER_ID, message.getCardId());
                         mContext.startActivity(intent);
                         mContext.startActivity(intent);
 
 
                     }
                     }
@@ -1334,6 +1337,7 @@ public class ChatContentView extends PullDownListView implements OnMediaStateCha
     abstract class ContentViewHolder {
     abstract class ContentViewHolder {
         TextView time_tv;
         TextView time_tv;
         ImageView chat_head_iv;
         ImageView chat_head_iv;
+
         ProgressBar progress;// 只有From的item有
         ProgressBar progress;// 只有From的item有
         ImageView failed_img_view;// 只有From的item有
         ImageView failed_img_view;// 只有From的item有
         TextView nick_name;
         TextView nick_name;