。java,
分享于 点击 34816 次 点评:126
。java,
AddActivity.java内容
package com.example.shareingcontact;
import com.example.shareingcontact.db.ContactInfo;
import com.example.shareingcontact.db.Contacts;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Gallery;
import android.widget.ImageButton;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ImageView.ScaleType;
import android.widget.ViewSwitcher.ViewFactory;
public class AddActivity extends Activity implements ViewFactory {
EditText et_name;
EditText et_telePhone;
EditText et_Phone;
EditText et_nickname;
EditText et_company;
EditText et_address;
Button btn_save;
Button btn_return;
int privacy;//用于判断添加的用户是不是保密的
ImageButton imageButton;//头像按钮
View imageChooseView;//图像选择的视图
AlertDialog imageChooseDialog;//头像选择对话框
Gallery gallery;//头像的Gallery
ImageSwitcher is;//头像的ImageSwitcher
int currentImagePosition;//用于记录当前选中图像在图像数组中的位置
int previousImagePosition;//用于记录上一次图片的位置
boolean imageChanged;//判断头像有没有变化
/**
* 所有的图像图片
*/
private int[] images
= new int[]{R.drawable.icon
,R.drawable.image1,R.drawable.image2,R.drawable.image3
,R.drawable.image4,R.drawable.image5,R.drawable.image6
,R.drawable.image7,R.drawable.image8,R.drawable.image9
,R.drawable.image10,R.drawable.image11,R.drawable.image12
,R.drawable.image13,R.drawable.image14,R.drawable.image15
,R.drawable.image16,R.drawable.image17,R.drawable.image18
,R.drawable.image19,R.drawable.image20,R.drawable.image21
,R.drawable.image22,R.drawable.image23,R.drawable.image24
,R.drawable.image25,R.drawable.image26,R.drawable.image27
,R.drawable.image28,R.drawable.image29,R.drawable.image30};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add);
Intent intent = getIntent();
//先确定好保密类型
if(intent.getExtras()!=null && intent.getExtras().getInt("privacy") == 1) {
privacy = 1;
} else {
privacy = 0;
}
et_name = (EditText)findViewById(R.id.name);
et_nickname = (EditText) findViewById(R.id.nickname);
et_Phone = (EditText)findViewById(R.id.phone);
et_telePhone = (EditText)findViewById(R.id.telephone);
et_company = (EditText)findViewById(R.id.company);
et_address = (EditText)findViewById(R.id.address);
btn_save = (Button)findViewById(R.id.btn_save);
btn_return = (Button)findViewById(R.id.btn_cancell);
imageButton = (ImageButton)findViewById(R.id.image_button);
/**
* 响应点击事件
*/
btn_save.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
String name = et_name.getText().toString();
//判断姓名是否为空
if(name.trim().equals("")) {
Toast.makeText(AddActivity.this, "姓名不许为空", Toast.LENGTH_LONG).show();
return;
}
//从表单上获取数据
String phone = et_Phone.getText().toString();
String nickname = et_nickname.getText().toString();
String telephone = et_telePhone.getText().toString();
String company = et_company.getText().toString();
String address = et_address.getText().toString();
int imageid;
//判断头像是否改变,若改变,则用当前的位置,若没有改变,则用前一回的位置
if(imageChanged) {
imageid = images[currentImagePosition%images.length];
} else {
imageid = images[previousImagePosition%images.length];
}
// 新建一个联系人数据库操作对象
Contacts c = new Contacts(AddActivity.this);
// 创建一个联系人信息
ContactInfo infoInsert = new ContactInfo(name, nickname, phone, telephone, company, address,imageid);
// 保存一个联系人信息
c.insertContacts(infoInsert);
setTitle("用户添加成功!");
Intent intent = new Intent(AddActivity.this,MainActivity.class);
startActivity(intent);
//销毁当前视图
finish();
}
});
btn_return.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
finish();
}
});
imageButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
loadImage();//为gallery装载图片
initImageChooseDialog();//初始化imageChooseDialog
imageChooseDialog.show();
}
});
}
public void loadImage() {
if(imageChooseView == null) {
LayoutInflater li = LayoutInflater.from(AddActivity.this);
imageChooseView = li.inflate(R.layout.imageswitch, null);
//通过渲染xml文件,得到一个视图(View),再拿到这个View里面的Gallery
gallery = (Gallery)imageChooseView.findViewById(R.id.img_gallery);
//为Gallery装载图片
gallery.setAdapter(new ImageAdapter(this));
gallery.setSelection(images.length/2);
is = (ImageSwitcher)imageChooseView.findViewById(R.id.image_switcher);
is.setFactory(this);
is.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
//卸载图片的动画效果
is.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
gallery.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
//当前的头像位置为选中的位置
currentImagePosition = arg2;
//为ImageSwitcher设置图像
is.setImageResource(images[arg2 % images.length]);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}});
}
}
/**
* 自定义Gallery的适配器
* @author Administrator
*
*/
class ImageAdapter extends BaseAdapter {
private Context context;
public ImageAdapter(Context context) {
this.context = context;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
/**
* gallery从这个方法中拿到image
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iv = new ImageView(context);
iv.setImageResource(images[position%images.length]);
iv.setAdjustViewBounds(true);
iv.setLayoutParams(new Gallery.LayoutParams(80,80));
iv.setPadding(15, 10, 15, 10);
return iv;
}
}
@Override
public View makeView() {
ImageView view = new ImageView(this);
view.setBackgroundColor(0xff000000);
view.setScaleType(ScaleType.FIT_CENTER);
view.setLayoutParams(new ImageSwitcher.LayoutParams(90,90));
return view;
}
public void initImageChooseDialog() {
if(imageChooseDialog == null) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("请选择图像")
.setView(imageChooseView).setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
imageChanged = true;
previousImagePosition = currentImagePosition;
imageButton.setImageResource(images[currentImagePosition%images.length]);
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
currentImagePosition = previousImagePosition;
}
});
imageChooseDialog = builder.create();
}
}
}
/*package com.example.shareingcontact;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Gallery;
import android.widget.ImageButton;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
public class AddActivity extends Activity {
Button btn_cancell;
Button btn_save;
ImageButton btn_ImageButton;
AlertDialog imagechooseDialog;
int position;
private int[] images
= new int[]{R.drawable.icon
,R.drawable.image1,R.drawable.image2,R.drawable.image3
,R.drawable.image4,R.drawable.image5,R.drawable.image6
,R.drawable.image7,R.drawable.image8,R.drawable.image9
,R.drawable.image10,R.drawable.image11,R.drawable.image12
,R.drawable.image13,R.drawable.image14,R.drawable.image15
,R.drawable.image16,R.drawable.image17,R.drawable.image18
,R.drawable.image19,R.drawable.image20,R.drawable.image21
,R.drawable.image22,R.drawable.image23,R.drawable.image24
,R.drawable.image25,R.drawable.image26,R.drawable.image27
,R.drawable.image28,R.drawable.image29,R.drawable.image30};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.add);
btn_cancell = (Button) findViewById(R.id.btn_cancell);
btn_save =(Button) findViewById(R.id.btn_save);
btn_ImageButton = (ImageButton) findViewById(R.id.image_button);
btn_ImageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
initImagechooseDialog();
imagechooseDialog.show();
}
private void initImagechooseDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(AddActivity.this);
builder.setTitle("请选择图片");
LayoutInflater inflater = LayoutInflater.from(AddActivity.this);
View view = inflater.inflate(R.layout.imageswitch, null);
Gallery gallery = (Gallery) findViewById(R.id.img_gallery);
gallery.setAdapter(new ImageAdapter(null));
ImageSwitcher is = (ImageSwitcher) findViewById(R.id.image_switcher);
builder.setView(view);
imagechooseDialog = builder.create();
}
class ImageAdapter extends BaseAdapter {
private Context context;
public ImageAdapter(Context context){
this.context = context;
}
@Override
public int getCount() {
return images.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
ImageView iv = new ImageView(context);
iv.setImageResource(images[position]);
iv.setAdjustViewBounds(true);
iv.setLayoutParams(new LayoutParams(80,80));
iv.setPadding(15, 10, 15, 10);
return iv;
}}
});
btn_cancell.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
finish();
}
});
btn_save.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
finish();
}
});
}
}
*/
MainActivity.java内容:
package com.example.shareingcontact;
import java.util.ArrayList;
import java.util.HashMap;
import com.example.shareingcontact.UpdateActivity.contact;
import com.example.shareingcontact.db.ContactInfo;
import com.example.shareingcontact.db.Contacts;
import com.example.shareingcontact.db.DatabaseOperation;
import android.opengl.Visibility;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.text.style.UpdateLayout;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
GridView gv_menu;
ListView lv;
ArrayList list;
Contacts userlist;
SimpleAdapter adapter;
SimpleAdapter searchadapter;
EditText et_search;
int ifsearch=0;
LinearLayout searchLinearout;
Button localserach;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
userlist = new Contacts(MainActivity.this);
loadMenu();
lv =(ListView) findViewById(R.id.lv_userlist);
loadUserList();
//单击LISTVIEW打开修改界面
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// HashMap item = (HashMap)arg0.getItemAtPosition(arg2);
// int id = Integer.parseInt(String.valueOf(item.get("id")));
Intent intent = new Intent(MainActivity.this,Modify.class);
/* ContactInfo user = new ContactInfo();
user.ContactID = Integer.parseInt(String.valueOf(item.get("id")));
user.Name = String.valueOf(item.get("name"));
user.SubName = String.valueOf(item.get("nickname"));
user.MobileTel = String.valueOf(item.get("phone"));
user.FixedTel = String.valueOf(item.get("telephone"));
user.Company = String.valueOf(item.get("company"));
user.Address = String.valueOf(item.get("address"));
user.ImageId = Integer.parseInt(String.valueOf(item.get("imageid")));
// intent.putExtra("user", item);
*/
// if(searchLinearout != null && searchLinearout.getVisibility()==View.VISIBLE) {
// searchLinearout.setVisibility(View.GONE);
// }
/*将arg2作为请求码传过去 用于标识修改项的位置*/
startActivity(intent);
// startActivityForResult(intent, arg2);
}
});
//添加功能
localserach = (Button) findViewById(R.id.btn_localsearch);
localserach.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
et_search = (EditText) findViewById(R.id.et_search);
String condition = et_search.getText().toString();
if(condition.equals("")) {
lv.setAdapter(adapter);
}
//userlist = new Contacts(MainActivity.this);
ContactInfo[] searchuser = userlist.queryContacts(condition);
if(searchuser!=null){
//将ContactInfo[]转换成 list格式;
int length = searchuser.length;
int k=0;
while(k<length) {
HashMap item = new HashMap();
item.put("name", searchuser[k].Name);
item.put("nickname", searchuser[k].SubName);
item.put("phone", searchuser[k].MobileTel);
item.put("telephone", searchuser[k].FixedTel);
item.put("company", searchuser[k].Company);
item.put("address", searchuser[k].Address);
item.put("imageid", searchuser[k].ImageId);
item.put("id", searchuser[k].ContactID);
if(list==null){
list = new ArrayList<HashMap>();
}
list.add(item);
k++;
}
searchadapter = new SimpleAdapter(
MainActivity.this,
list,
R.layout.listitem,
new String[]{"imageid","name","phone"},
new int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone});
list.isEmpty();
lv.setAdapter(searchadapter); //将整合好的adapter交给listview,显示给用户看
setTitle( "共查到 " + searchuser.length+" 条记录");
}else{
setTitle("没有查到任何数据");
}
}
});
}
private void loadUserList(){
Log.d(TAG,"loadUserList");
//userlist = new Contacts(MainActivity.this);
ArrayList list = new ArrayList<HashMap>();
ContactInfo[] userinfo = userlist.readContacts();
if(userinfo != null ){//首次启动时,需要判断数据库是否为空
for(ContactInfo info : userinfo){
Log.d(TAG, info.toString());
}
//将ContactInfo[]转换成 list格式;
int length = userinfo.length;
int k=1;
while(k<length) {
HashMap item = new HashMap();
item.put("name", userinfo[k].Name);
item.put("nickname", userinfo[k].SubName);
item.put("phone", userinfo[k].MobileTel);
item.put("telephone", userinfo[k].FixedTel);
item.put("company", userinfo[k].Company);
item.put("address", userinfo[k].Address);
item.put("imageid", userinfo[k].ImageId);
list.add(item);
k++;
}
if(length == 0){
setTitle("没有查到任何数据");
}else{
adapter = new SimpleAdapter(this,
list,
R.layout.listitem,
new String[]{"imageid","name","phone"},
new int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone});
lv.setAdapter(adapter);
}
}
}
public boolean onKeyDown(int keyCode, KeyEvent event){
Log.d(TAG,"onKeyDown, keyCode = " + keyCode);
if(keyCode == KeyEvent.KEYCODE_MENU){
if(gv_menu == null){
loadMenu();
}
if(gv_menu.getVisibility() == View.GONE){
gv_menu.setVisibility(View.VISIBLE);
}else{
gv_menu.setVisibility(View.GONE);
}
}
return super.onKeyDown(keyCode, event);
}
private void loadMenu(){
gv_menu= (GridView) this.findViewById(R.id.gd_menu);
gv_menu.setBackgroundResource(R.drawable.channelgallery_bg);
gv_menu.setNumColumns(4);
gv_menu.setGravity(Gravity.CENTER);
gv_menu.setVerticalSpacing(10);
gv_menu.setHorizontalSpacing(10);
ArrayList data = new ArrayList();
HashMap map = new HashMap();
map.put("itemImage", R.drawable.menu_new_user);
map.put("itemText", "增加");
data.add(map);
map = new HashMap();
map.put("itemImage", R.drawable.menu_search);
map.put("itemText", "查找");
data.add(map);
map = new HashMap();
map.put("itemImage", R.drawable.menu_update);
map.put("itemText", "同步");
data.add(map);
map = new HashMap();
map.put("itemImage", R.drawable.menu_quit);
map.put("itemText", "退出");
data.add(map);
SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item_menu,
new String[]{"itemImage","itemText"}, new int[]{R.id.item_image,R.id.item_text});
gv_menu.setAdapter(adapter);
gv_menu.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//HashMap map = (HashMap) parent.getItemAtPosition(1);
switch(position) {
case 0:{
Intent intent = new Intent(MainActivity.this, AddActivity.class);
startActivity(intent);
break;
}
case 1:{
//设置搜索框是否可见;
if (searchLinearout == null){
searchLinearout = (LinearLayout) findViewById(R.id.ll_search);
}
if( ifsearch == 0){
searchLinearout.setVisibility(view.VISIBLE);
ifsearch = 1;
}else
{
searchLinearout.setVisibility(view.GONE);
ifsearch = 0;
}
//loadsearch();
break;
}
case 2:{
Intent intent = new Intent(MainActivity.this,UpdateActivity.class);
startActivity(intent);
break;
}
case 3:{
break;
}
}
}
});
}
private void loadsearch() {
if(searchLinearout == null) {
searchLinearout = (LinearLayout) findViewById(R.id.ll_search);
et_search = (EditText)findViewById(R.id.et_search);
et_search.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
String condition = et_search.getText().toString();
if(condition.equals("")) {
lv.setAdapter(adapter);
}
userlist = new Contacts(MainActivity.this);
ContactInfo[] searchuser = userlist.queryContacts(condition);
if(searchuser != null){
//将ContactInfo[]转换成 list格式;
int length = searchuser.length;
int k=1;
Log.d(TAG,"length = " + searchuser.length);
Log.d(TAG,"length = " + searchuser[0].Name);
while(k<length) {
HashMap item = new HashMap();
item.put("name", searchuser[k].Name);
item.put("nickname", searchuser[k].SubName);
item.put("phone", searchuser[k].MobileTel);
item.put("telephone", searchuser[k].FixedTel);
item.put("company", searchuser[k].Company);
item.put("address", searchuser[k].Address);
item.put("imageid", searchuser[k].ImageId);
if(list==null){
list = new ArrayList<HashMap>();
}
list.add(item);
k++;
}
searchadapter = new SimpleAdapter(
MainActivity.this,
list,
R.layout.listitem,
new String[]{"imageid","name","phone"},
new int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone});
lv.setAdapter(searchadapter); //将整合好的adapter交给listview,显示给用户看
}
/*
if(list.size() == 0) {
Drawable nodata_bg = getResources().getDrawable(R.drawable.nodata_bg);
mainLinearLayout.setBackgroundDrawable(nodata_bg);
setTitle("没有查到任何数据");
} else {
setTitle( "共查到 " + list.size()+" 条记录");
mainLinearLayout.setBackgroundDrawable(null);
}*/
return false;
}});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Modify.java内容:
package com.example.shareingcontact;
import java.util.HashMap;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class Modify extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.modify);
setContentView(R.layout.modify);
//Intent intent = getIntent();
// HashMap map = (HashMap) intent.getSerializableExtra("user");
}
}
UpdateActivity.java 内容:
package com.example.shareingcontact;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;
import com.example.shareingcontact.db.ContactInfo;
import com.example.shareingcontact.db.Contacts;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
public class UpdateActivity extends Activity {
Button btn_update_cancell;
Button btn_update;
EditText et_name;
EditText et_phone;
String name;
String phone;
Contacts userlist;
CheckBox ck_find;
int share;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.update);
setTitle("SharingContact");
btn_update_cancell = (Button) findViewById(R.id.btn_update_cancell);
btn_update =(Button) findViewById(R.id.btn_update);
et_name = (EditText) findViewById(R.id.name2);
et_phone = (EditText) findViewById(R.id.phone2);
ck_find = (CheckBox) findViewById(R.id.find);
btn_update_cancell.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
finish();
}
});
btn_update.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Log.d("test","test");
contact[] testcontact=new contact[10];
for(int i=0;i<10;i++){
testcontact[i]=new contact();
testcontact[i].contactId=i;
testcontact[i].name="12312561";
testcontact[i].tel="123456";
}
//sync("123456789",testcontact);
Log.d("test",sync("123456789",testcontact));
}
/* name = et_name.getText().toString();
phone = et_phone.getText().toString();
if(ck_find.isChecked()){
share = 2;
}else
{share = 1;
}
if(name == "" || phone == ""){
setTitle("请输入姓名和电话");
}
else{
userlist = new Contacts(UpdateActivity.this);
ContactInfo[][] userinfo = userlist.syncContactsPre();
register(phone, share);
contact[] infosInsert = null;
contact[] infosUpdate = null;
if(userinfo[0] != null){
int k=0;
int length1 = userinfo[0].length;
infosInsert = new contact[length1];
while(k<length1) {
infosInsert[k] = new contact();
infosInsert[k].name = userinfo[0][k].Name;
infosInsert[k].tel = userinfo[0][k].MobileTel;
infosInsert[k].contactId=userinfo[0][k].ContactID;
k++;
}
// log("test",sync(phone, infosInsert));
// System.out.println(sync(phone, infosInsert));
Log.d("test", "test");
sync(phone, infosInsert);
}
if(userinfo[1] != null){
int k=0;
int length1 = userinfo[1].length;
infosUpdate = new contact[length1];
while(k<length1) {
infosUpdate[k] = new contact();
infosUpdate[k].name = userinfo[1][k].Name;
infosUpdate[k].tel = userinfo[1][k].MobileTel;
infosUpdate[k].contactId=userinfo[1][k].ContactID;
k++;
}
sync(phone, infosUpdate);
}
if(userinfo[2] != null){
int k=0;
int length1 = userinfo[1].length;
while(k<length1) {
deleteContact(phone,userinfo[2][k].ContactID);
k++;
}
}
}
finish();
}*/
});
}
public static String register(String tel,int share){
String getMsg;
try{
Socket socket=new Socket("109.131.14.239",10086);
OutputStream os=socket.getOutputStream();
PrintWriter sos=new PrintWriter(os);
DataOutputStream dos=new DataOutputStream(os);
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
dos.writeInt(1);
dos.flush();
sos.println(tel);
sos.flush();
dos.writeInt(share);
sos.flush();
dos.flush();
os.close();sos.close();dos.close();is.close();socket.close();
getMsg=is.readLine();
}catch(Exception e){
getMsg="Connection ERROR";
}
return getMsg;
}
class contact{
public String name;
public String tel;
public int contactId;
}
//发送Update和insert表
public static String sync(String utel,contact[] contact){
String getMsg;
int count=contact.length;
try{
Socket socket=new Socket("109.131.14.239",10086);
OutputStream os=socket.getOutputStream();
PrintWriter sos=new PrintWriter(os);
DataOutputStream dos=new DataOutputStream(os);
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//set the symbol and length
dos.writeInt(2);
dos.flush();
dos.writeInt(count);
dos.flush();
//transmission
sos.println(utel);
sos.flush();
for(int i=0;i<count;i++){
sos.println(contact[i].name);
sos.println(contact[i].tel);
sos.flush();
dos.writeInt(contact[i].contactId);
dos.flush();
}
getMsg=is.readLine();
os.close();sos.close();dos.close();is.close();socket.close();
}catch(Exception e){
getMsg="Connection ERROR";
}
return getMsg;
}
//发送Delete表
public static String deleteContact(String utel,int contactId){
String getMsg;
try{
Socket socket=new Socket("109.131.14.239",10086);
OutputStream os=socket.getOutputStream();
PrintWriter sos=new PrintWriter(os);
DataOutputStream dos=new DataOutputStream(os);
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
dos.writeInt(3);
dos.flush();
sos.println(utel);
sos.flush();
dos.writeInt(contactId);
getMsg=is.readLine();
os.close();sos.close();dos.close();is.close();socket.close();
}catch(Exception e){
getMsg="Connection ERROR";
}
return getMsg;
}
}
ContactInfo.java 内容:
package com.example.shareingcontact.db;
public class ContactInfo {
public int ContactID = 0; // 联系人ID号
public String Name = null; // 姓名
public String SubName = null; // 昵称
public String MobileTel = null; // 移动电话
public String FixedTel = null; // 固定电话
public String Company = null; // 单位
public String Address = null; // 住址
public int ImageId = 0; // 图id
public ContactInfo(String name, String subName, String mobileTel, String fixedTel, String company, String address, int imageId){
Name = name;
SubName = subName;
MobileTel = mobileTel;
FixedTel = fixedTel;
Company = company;
Address = address;
ImageId = imageId;
}
public ContactInfo(){
}
}
Contacts.java 内容
package com.example.shareingcontact.db;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;
/* 数据库的组织方法
* local表----本地联系人信息表
* del表------删除表(未同步)
* ins表------新添表(未同步)
* upd表------更新表(未同步)
* remote表---服务器下的同步表名
* */
public class Contacts {
private DatabaseOperation dbOp = null;
private String dbName = "Contacts11.db";
private int Version = 1;
private String mainTable = "local";
private String deleteTable = "del";
private String insertTable = "ins";
private String updateTable = "upd";
private String remoteTable = "remote";
/* 功能:新建通讯录
* */
public Contacts(Context activityContext){
dbOp = new DatabaseOperation(activityContext);
dbOp.readWDb(dbName, Version);
createMainTable();
createInsertTable();
createDeleteTable();
createUpdateTable();
createRemoteTable();
}
/* 功能:关闭联系人操作
* */
public void closeContacts(){
dbOp.closeDb();
}
/* 功能:读取所有联系人信息
* */
public ContactInfo[] readContacts(){
String sqlQuery = "";
ContactInfo[] infos = null;
int nRecordCnt = 0;
int index = 0;
sqlQuery = "SELECT * FROM '"+mainTable+"';";
Cursor result = dbOp.queryDb(sqlQuery);
nRecordCnt = result.getCount();
if(nRecordCnt>0)
{
infos = new ContactInfo[nRecordCnt];
for(int j=0; j<nRecordCnt; j++)
infos[j] = new ContactInfo();
index = 0;
result.moveToFirst();
while(!result.isAfterLast()){
infos[index].ContactID = result.getInt(0);
infos[index].Name = result.getString(1);
infos[index].SubName = result.getString(2);
infos[index].MobileTel = result.getString(3);
infos[index].FixedTel = result.getString(4);
infos[index].Company = result.getString(5);
infos[index].Address = result.getString(6);
infos[index].ImageId = result.getInt(7);
index++;
result.moveToNext();
}
result.close();
}
return infos;
}
/* 功能:添加一条记录
* p:添加人信息
* */
public void insertContacts(ContactInfo info){
insertMainTable(info);
insertInsertTable(info);
}
/* 功能:删除一条记录
* Id:删除人ID号
* */
public void deleteContacts(int Id){
deleteTable(mainTable, Id);
insertDeleteTable(Id);
}
/* 功能:修改联系人信息
* p:修改后的联系人信息
* */
public void updateContacts(ContactInfo info){
UpdateMainTable(info);
insertUpdateTable(info);
}
/* 功能:查询记录
* keyValue:查询人名字或电话
* */
public ContactInfo[] queryContacts(String keyValue){
String sqlQuery = "";
ContactInfo[] infos = null;
int nRecordCnt = 0;
int index = 0;
sqlQuery = "SELECT * FROM '"+mainTable+"' WHERE Name LIKE '%"+keyValue+"%' OR MobileTel LIKE '%"+keyValue+"%'"+";";
Cursor result = dbOp.queryDb(sqlQuery);
nRecordCnt = result.getCount();
if(nRecordCnt>0)
{
infos = new ContactInfo[nRecordCnt];
for(int j=0; j<nRecordCnt; j++)
infos[j] = new ContactInfo();
index = 0;
result.moveToFirst();
while(!result.isAfterLast()){
infos[index].ContactID = result.getInt(0);
infos[index].Name = result.getString(1);
infos[index].SubName = result.getString(2);
infos[index].MobileTel = result.getString(3);
infos[index].FixedTel = result.getString(4);
infos[index].Company = result.getString(5);
infos[index].Address = result.getString(6);
infos[index].ImageId = result.getInt(7);
index++;
result.moveToNext();
}
result.close();
}
return infos;
}
/* 同步的前端操作,获取数据
* */
public ContactInfo[][] syncContactsPre(){
ContactInfo[][] infoss = syncContactsToServer();
return infoss;
}
/* 同步成功的后续操作
* */
public void syncContactsPost(String remoteTableName){
//insertRemoteTable(remoteTableName);
clearTable(insertTable);
clearTable(updateTable);
clearTable(deleteTable);
}
/* 服务器同步操作
* */
public void syncContacts(String tableName, ContactInfo[][] infoss){
synInsertContacts(tableName, infoss[0]);
synUpdateContacts(tableName, infoss[1]);
synDeleteContacts(tableName, infoss[2]);
}
/* 功能:在服务器中同步添加联系人信息
* tableName:表名
* p:联系人信息
* table
* */
private void synInsertContacts(String tableName, ContactInfo[] infos){
String sqlBatInsert = "INSERT INTO '"+tableName+"' (ContactID, Name, SubName, MobileTel, FixedTel, Company, Address, ImageId)"+" VALUES (?,?,?,?,?,?,?,?);";
contactsBat cbi = new contactsBat();
dbOp.batchInsertDb(sqlBatInsert, cbi, infos);
}
private void synUpdateContacts(String tableName, ContactInfo[] infos){
contactsBat cbu = new contactsBat();
dbOp.batchUpdateDb(tableName, cbu, infos);
}
private void synDeleteContacts(String tableName, ContactInfo[] infos){
contactsBat cbd = new contactsBat();
dbOp.batchDeleteDb(tableName, cbd, infos);
}
/* 功能:获取本地变动的联系人信息
* */
private ContactInfo[][] syncContactsToServer(){
ContactInfo[] infosInsert = traverseContacts(insertTable);
ContactInfo[] infosUpdata = traverseContacts(updateTable);
ContactInfo[] infosDelete = traverseContacts(deleteTable);
ContactInfo[][] infoss= new ContactInfo[3][];
infoss[0] = infosInsert;
infoss[1] = infosUpdata;
infoss[2] = infosDelete;
return infoss;
}
/* 功能:遍历表
* */
private ContactInfo[] traverseContacts(String tableName){
String sqlQuery = "";
ContactInfo[] infos = null;
int nRecordCnt = 0;
int index = 0;
sqlQuery = "SELECT * FROM '"+tableName+"';";
Cursor result = dbOp.queryDb(sqlQuery);
nRecordCnt = result.getCount();
if(nRecordCnt>0)
{
infos = new ContactInfo[nRecordCnt];
for(int j=0; j<nRecordCnt; j++)
infos[j] = new ContactInfo();
index = 0;
result.moveToFirst();
while(!result.isAfterLast()){
if(tableName!=deleteTable)
{
infos[index].ContactID = result.getInt(1);
infos[index].Name = result.getString(2);
infos[index].SubName = result.getString(3);
infos[index].MobileTel = result.getString(4);
infos[index].FixedTel = result.getString(5);
infos[index].Company = result.getString(6);
infos[index].Address = result.getString(7);
infos[index].ImageId = result.getInt(8);
}
else
{
infos[index].ContactID = result.getInt(1);
}
index++;
result.moveToNext();
}
result.close();
}
return infos;
}
/* MainTable
* */
private void createMainTable(){
String sqlCreate = "CREATE TABLE IF NOT EXISTS '"+mainTable+
"' (ContactID INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT, SubName TEXT, MobileTel TEXT, FixedTel TEXT," +
"Company TEXT, Address TEXT, ImageId INTEGER);";
dbOp.createDbTab(sqlCreate);
}
private void insertMainTable(ContactInfo info){
String sqlInsert = "INSERT INTO '"+mainTable+"' (Name, SubName, MobileTel, FixedTel, Company, Address, ImageId)"+" VALUES "+"('"+
info.Name+"','"+info.SubName+"','"+info.MobileTel+"','"+info.FixedTel+"','"+info.Company+"','"+info.Address+"',"+String.valueOf(info.ImageId)+");";
dbOp.insertDb(sqlInsert);
}
private void UpdateMainTable(ContactInfo info){
String sqlUpdate = "UPDATE '"+mainTable+"' SET "+
"Name='"+info.Name+"',SubName='"+info.SubName+"',MobileTel='"+info.MobileTel+"',FixedTel='"+info.FixedTel+"',Company='"+info.Company+"',Address='"+info.Address+
"',"+"ImageId="+String.valueOf(info.ImageId)+" WHERE ContactID="+String.valueOf(info.ContactID)+";";
dbOp.updataDb(sqlUpdate);
}
/* insertTable
* */
private void createInsertTable(){
String sqlCreate = "CREATE TABLE IF NOT EXISTS '"+insertTable+
"' (ID INTEGER PRIMARY KEY AUTOINCREMENT, ContactID INTEGER, Name TEXT, SubName TEXT, MobileTel TEXT, FixedTel TEXT," +
"Company TEXT, Address TEXT, ImageId INTEGER);";
dbOp.createDbTab(sqlCreate);
}
private void insertInsertTable(ContactInfo info){
String sqlQuery = "SELECT * FROM '"+mainTable+"';";
Cursor result= dbOp.queryDb(sqlQuery);
result.moveToLast();
info.ContactID = (int) result.getLong(0);
String sqlInsert = "INSERT INTO '"+insertTable+"' (ContactID, Name, SubName, MobileTel, FixedTel, Company, Address, ImageId)"+" VALUES "+"("+
String.valueOf(info.ContactID)+",'"+info.Name+"','"+info.SubName+"','"+info.MobileTel+"','"+info.FixedTel+"','"+info.Company+"','"+info.Address+"',"+String.valueOf(info.ImageId)+");";
dbOp.insertDb(sqlInsert);
}
/* updateTable
* */
private void createUpdateTable(){
String sqlCreate = "CREATE TABLE IF NOT EXISTS '"+updateTable+
"' (ID INTEGER PRIMARY KEY AUTOINCREMENT, ContactID INTEGER, Name TEXT, SubName TEXT, MobileTel TEXT, FixedTel TEXT," +
"Company TEXT, Address TEXT, ImageId INTEGER);";
dbOp.createDbTab(sqlCreate);
}
private void insertUpdateTable(ContactInfo info){
String sqlInsert = "INSERT INTO '"+updateTable+"' (ContactID, Name, SubName, MobileTel, FixedTel, Company, Address, ImageId)"+" VALUES "+"("+
String.valueOf(info.ContactID)+",'"+info.Name+"','"+info.SubName+"','"+info.MobileTel+"','"+info.FixedTel+"','"+info.Company+"','"+info.Address+"',"+String.valueOf(info.ImageId)+");";
dbOp.insertDb(sqlInsert);
}
/* deleteTable
* */
private void createDeleteTable(){
String sqlCreate = "CREATE TABLE IF NOT EXISTS '"+deleteTable+
"' (ID INTEGER PRIMARY KEY AUTOINCREMENT, ContactID INTEGER);";
dbOp.createDbTab(sqlCreate);
}
private void insertDeleteTable(int Id){
String sqlInsert = "INSERT INTO '"+deleteTable+"' (ContactID)"+" VALUES "+"("+String.valueOf(Id)+")";
dbOp.insertDb(sqlInsert);
}
/* remoteTable
* */
private void createRemoteTable(){
String sqlCreate = "CREATE TABLE IF NOT EXISTS '"+remoteTable+
"' (ID INTEGER PRIMARY KEY AUTOINCREMENT, remoteTableName TEXT);";
dbOp.createDbTab(sqlCreate);
}
private void insertRemoteTable(String tableName){
String sqlQuery = "SELECT * FROM '"+remoteTable+"';";
Cursor result = dbOp.queryDb(sqlQuery);
if(result.getCount()!=0)
return;
String sqlInsert = "INSERT INTO '"+remoteTable+"' (remoteTableName)"+" VALUES "+"('"+tableName+"')";
dbOp.insertDb(sqlInsert);
}
/* delete table record
* */
private void deleteTable(String tableName, int Id){
String key = "ContactID";
String sqlDelete = "DELETE FROM '"+tableName+"' WHERE "+key+"="+String.valueOf(Id)+";";
dbOp.deleteDb(sqlDelete);
}
/* clear table
* */
private void clearTable(String tableName){
String sqlDelete = "DELETE FROM '"+tableName+"';";
dbOp.deleteDb(sqlDelete);
String sqlUpdate = "UPDATE sqlite_sequence SET seq = 0 WHERE name= '"+tableName+"';";
dbOp.deleteDb(sqlUpdate);
}
}
/* 服务器端
* */
class contactsBat implements DbBat{
public void batInsert(SQLiteStatement stat, ContactInfo[] infos){
if(infos == null)
return;
for(int i=0; i<infos.length; i++)
{
int columns = 1;
stat.bindLong(columns, infos[i].ContactID);
columns++;
stat.bindString(columns, infos[i].Name);
columns++;
stat.bindString(columns, infos[i].SubName);
columns++;
stat.bindString(columns, infos[i].MobileTel);
columns++;
stat.bindString(columns, infos[i].FixedTel);
columns++;
stat.bindString(columns, infos[i].Company);
columns++;
stat.bindString(columns, infos[i].Address);
columns++;
stat.bindLong(columns, infos[i].ImageId);
stat.executeInsert();
}
}
public void batUpdate(String tableName, SQLiteDatabase db, ContactInfo[] infos){
if(infos == null)
return;
for(int i=0; i<infos.length; i++)
{
String sqlUpdate ="UPDATE '"+tableName+"' SET "+
"Name='"+infos[i].Name+"',SubName='"+infos[i].SubName+"',MobileTel='"+infos[i].MobileTel+"',FixedTel='"+infos[i].FixedTel+"',Company='"+infos[i].Company+"',Address='"+infos[i].Address+
"', ImageId="+String.valueOf(infos[i].ImageId)+" WHERE ContactID="+String.valueOf(infos[i].ContactID)+";";
db.execSQL(sqlUpdate);
}
}
public void batDelete(String tableName, SQLiteDatabase db, ContactInfo[] infos){
if(infos == null)
return;
for(int i=0; i<infos.length; i++)
{
String key = "ContactID";
String sqlDelete ="DELETE FROM '"+tableName+"' WHERE "+key+"="+String.valueOf(infos[i].ContactID)+";";
db.execSQL(sqlDelete);
}
}
}
DatabaseHelper.java 内容
package com.example.shareingcontact.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/* 1. SQL对大小写不敏感
* */
class DatabaseHelper extends SQLiteOpenHelper{
public DatabaseHelper(Context context, String Name, int Version){
super(context, Name, null, Version);
}
// 创建数据库时被调用
public void onCreate(SQLiteDatabase db){
// db.execSQL(sqlCreate);
}
// 升级数据库时被调用
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
// String sql = "DROP TABLE if exits local";
// db.execSQL(sql);
// onCreate(db);
}
}
DatabaseOperation.java 内容:
package com.example.shareingcontact.db;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;
import com.example.shareingcontact.db.DatabaseHelper;
public class DatabaseOperation {
private SQLiteDatabase db;
private DatabaseHelper dbHelper;
private Context context = null;
public DatabaseOperation(Context activityContext){
context = activityContext;
}
/* 功能:创建数据库
* context----Activity this
* dbName-----数据库名
* Version----版本号1,2,3...
* sqlCreate--创建数据库表sql命令
* */
public void readWDb(String dbName, int Version){
dbHelper = new DatabaseHelper(context, dbName, Version);
db = dbHelper.getWritableDatabase();
}
/* 功能:新建表
*
* */
public void createDbTab(String sql){
db.execSQL(sql);
}
/* 功能:关闭数据
*/
public void closeDb(){
db.close();
}
/* 功能:添加一条记录
* */
public void insertDb(String sql){
db.execSQL(sql);
}
/* 功能:更新记录
* sql = "UPDATE table_name SET <des_operation> WHERE <condition>"
* */
public void updataDb(String Sql){
db.execSQL(Sql);
}
/* 功能:删除记录
* sql = "DELETE FROM table_name WHERE <condition>;"
* */
public void deleteDb(String Sql){
db.execSQL(Sql);
}
/* 功能:批量插入
* */
public void batchInsertDb(String Sql, DbBat bi, ContactInfo[] infos){
SQLiteStatement stat = db.compileStatement(Sql);
db.beginTransaction();
// 插入操作
bi.batInsert(stat, infos);
db.setTransactionSuccessful();
db.endTransaction();
}
public void batchUpdateDb(String tableName, DbBat bu, ContactInfo[] infos){
db.beginTransaction();
// 更新操作
bu.batUpdate(tableName, db, infos);
db.setTransactionSuccessful();
db.endTransaction();
}
public void batchDeleteDb(String tableName, DbBat bd, ContactInfo[] infos){
db.beginTransaction();
// 删除操作
bd.batDelete(tableName, db, infos);
db.setTransactionSuccessful();
db.endTransaction();
}
/* 功能:查询记录
* sql = "SELECT <Fields> from table_name ORDER BY <Field>"
* */
public Cursor queryDb(String Sql){
return db.rawQuery(Sql, null);
}
}
interface DbBat{
public void batInsert(SQLiteStatement stat, ContactInfo[] infos);
public void batUpdate(String tableName, SQLiteDatabase db, ContactInfo[] infos);
public void batDelete(String tableName, SQLiteDatabase db, ContactInfo[] infos);
}
相关文章
- 暂无相关文章
用户点评