mainActivity

package com.example.sharingcontact;import java.io.*;import java.net.Socket;import java.util.ArrayList;import java.util.HashMap;import com.example.sharingcontact.R;import com.example.sharingcontact.db.ContactInfo;import com.example.sharingcontact.db.Contacts;import com.example.sharingcontact.db.DatabaseOperation;import com.example.sharingcontact.ExitDialog;import android.opengl.Visibility;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.provider.ContactsContract;import android.provider.ContactsContract.PhoneLookup;import android.app.Activity;import android.app.AlertDialog;import android.app.ProgressDialog;import android.content.ContentResolver;import android.content.DialogInterface;import android.content.Intent;import android.database.Cursor;import android.graphics.Color;import android.graphics.drawable.Drawable;import android.text.Editable;import android.text.SpannableStringBuilder;import android.text.TextWatcher;import android.text.style.UpdateLayout;import android.util.Log;import android.view.Gravity;import android.view.KeyEvent;import android.view.LayoutInflater;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.AdapterView.OnItemLongClickListener;import android.widget.Button;import android.widget.CheckBox;import android.widget.EditText;import android.widget.GridView;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.ProgressBar;import android.widget.RelativeLayout;import android.widget.SimpleAdapter;import android.widget.Toast;public class MainActivity extends Activity {private static final String TAG = "MainActivity";GridView gv_menu;ListView lv;ArrayList<HashMap> list;Contacts userlist;SimpleAdapter adapter;SimpleAdapter searchadapter;EditText et_search;int ifsearch=0; LinearLayout searchLinearout; Button localserach; String condition;//搜索框内容 //同步对话框 AlertDialog.Builder builder; EditText et_phone; CheckBox cb_share; String phone; int share;//更多选项 的对话框AlertDialog mainMenuDialog;//更多选项的菜单View mainMenuView;GridView gv_more;AlertDialog confirmDialog; //存储标记条目的_id号 ArrayList deleteId; ContactInfo[] mycontact; ProgressDialog progressDialog; private Handler handler = new Handler(){ public void handleMessage(Message msg) { //关闭ProgressDialog progressDialog.dismiss(); //更新UI loadUserList(); //statusTextView.setText("Completed!"); } }; @Overrideprotected void onResume() {super.onResume();loadUserList();}@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() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {HashMap item = (HashMap)arg0.getItemAtPosition(arg2);Intent intent = new Intent(MainActivity.this, ModifyActivity.class);int id = Integer.parseInt(String.valueOf(item.get("id")));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", user);if(searchLinearout != null && searchLinearout.getVisibility()==View.VISIBLE) {searchLinearout.setVisibility(View.GONE);}/*将arg2作为请求码传过去 用于标识修改项的位置*/startActivityForResult(intent, arg2);}}); //删除多项标记 lv.setCacheColorHint(Color.TRANSPARENT); //设置ListView的背景为透明 lv.setOnItemLongClickListener(new OnItemLongClickListener(){@Overridepublic boolean onItemLongClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {if(deleteId == null) {deleteId = new ArrayList();}HashMap item = (HashMap)arg0.getItemAtPosition(arg2);Integer id = Integer.parseInt(String.valueOf(item.get("id")));RelativeLayout r = (RelativeLayout)arg1;ImageView markedView = (ImageView)r.getChildAt(2);if(markedView.getVisibility() == View.VISIBLE) {markedView.setVisibility(View.GONE);deleteId.remove(id);} else {markedView.setVisibility(View.VISIBLE);deleteId.add(id);}Log.d("delete", String.valueOf(id)); Log.d("delete", String.valueOf(deleteId.size()));return true;} }); loadsearch(); localserach = (Button) findViewById(R.id.btn_localsearch); localserach.setOnClickListener(new OnClickListener(){public void onClick(View arg0) {et_search = (EditText) findViewById(R.id.et_search);String condition = et_search.getText().toString();ListView lv = (ListView) findViewById(R.id.lv_userlist);Contacts userlist = new Contacts(MainActivity.this);ContactInfo[] searchuser = userlist.queryContacts(condition);if(condition.equals("")) {lv.setAdapter(adapter);setTitle("SharingContact");}else{ if(searchuser!=null){ //将ContactInfo[]转换成 list格式; int length = searchuser.length; Log.d(TAG,"length1 = " + searchuser.length); int k=0; list = new ArrayList<HashMap>(); 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);list.add(item); k++; }SimpleAdapter 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,显示给用户看setTitle( "共查到 " + searchuser.length+" 条记录"); }else{ lv.setAdapter(null); setTitle("没有查到任何数据"); }}}}); } private void loadUserList(){ Log.d(TAG,"loadUserList"); //userlist = new Contacts(MainActivity.this); ArrayList list = new ArrayList(); ContactInfo[] userinfo = userlist.readContacts(); if(userinfo != null ){//首次启动时,需要判断数据库是否为空 for(ContactInfo info : userinfo){ Log.d(TAG, info.toString()); } //将ContactInfo[]转换成 list格式; int length = userinfo.length; int k=0; 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);item.put("id", userinfo[k].ContactID);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);searchLinearout.setVisibility(View.GONE);}}if (keyCode == KeyEvent.KEYCODE_BACK) { ExitDialog.exitDialog(MainActivity.this);} 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(5); gv_menu.setGravity(Gravity.BOTTOM); // 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_delete); map.put("itemText", "删除"); data.add(map); map = new HashMap(); map.put("itemImage", R.drawable.menu_more); map.put("itemText", "更多"); data.add(map); SimpleAdapter menuadapter = 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(menuadapter); gv_menu.setOnItemClickListener(new OnItemClickListener() {@Overridepublic 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:{ loadupdate(); break;} //删除 case 3:{ if(searchLinearout != null && searchLinearout.getVisibility()==View.VISIBLE) {searchLinearout.setVisibility(View.GONE);}if(deleteId == null || deleteId.size() == 0) {Toast.makeText(MainActivity.this, " 没有标记任何记录\n长按一条记录即可标记", Toast.LENGTH_LONG).show();} else {new AlertDialog.Builder(MainActivity.this).setTitle("确定要删除标记的"+deleteId.size()+"条记录吗?").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Contacts userlist = new Contacts(MainActivity.this);int deletID[] = new int[deleteId.size()];for(int k=0;k<deleteId.size();k++){deletID[k]=deleteId.get(k);//userlist.deleteContacts( deleteId.get(k));}userlist.batDeleteContacts(deletID);ArrayList list = new ArrayList(); ContactInfo[] userinfo = userlist.readContacts(); if(userinfo == null ){//为空时清除LISTVIEW lv.setAdapter(null); }else{ //将ContactInfo[]转换成 list格式; int length = userinfo.length; int k=0; 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);item.put("id", userinfo[k].ContactID);list.add(item);k++;} if(length == 0){ setTitle("没有查到任何数据"); }else{ adapter = 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(adapter); } deleteId.clear(); }}}).setNegativeButton("取消", null).create().show() ;}break;} //更多 case 4:{if(searchLinearout != null && searchLinearout.getVisibility()==View.VISIBLE) {searchLinearout.setVisibility(View.GONE);}loadMainMenuDialog();mainMenuDialog.show(); break;}}}}); } private void loadsearch() { //本地查找功能searchLinearout = (LinearLayout) findViewById(R.id.ll_search);et_search = (EditText)findViewById(R.id.et_search);condition = et_search.getText().toString();et_search.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {// TODO Auto-generated method stub 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; Log.d(TAG,"length1 = " + searchuser.length); int k=0; list = new ArrayList<HashMap>(); 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);list.add(item); k++; }SimpleAdapter 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,显示给用户看setTitle( "共查到 " + searchuser.length+" 条记录"); }else{ lv.setAdapter(null); setTitle("没有查到任何数据"); } }@Overridepublic void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {// TODO Auto-generated method stub}@Overridepublic void afterTextChanged(Editable arg0) {}}); }private void loadMainMenuDialog() {if(mainMenuDialog == null) {LayoutInflater li = LayoutInflater.from(this);mainMenuView = li.inflate(R.layout.main_menu_grid, null); //根据主菜单视图,创建主菜单对话框 mainMenuDialog = new AlertDialog.Builder(this).setView(mainMenuView).create(); //根据主菜单视图,拿到视图文件中的GridView,然后再往里面放Adapter gv_more = (GridView)mainMenuView.findViewById(R.id.gridview); gv_more.setHorizontalSpacing(10); //创建Adapter String[] main_menu_itemName = { "显示所有", "导入联系人", "关于", "删除所有", "更新", "后退"}; int[] main_menu_itemSource = { R.drawable.showall, R.drawable.menu_backup, R.drawable.menu_quit, R.drawable.menu_delete, R.drawable.menu_fresh, R.drawable.menu_return}; SimpleAdapter menuAdapter = getMenuAdapter(main_menu_itemName, main_menu_itemSource); gv_more.setAdapter(menuAdapter); //响应点击事件 gv_more.setOnItemClickListener(new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {switch(arg2){ //显示所有case 0:{loadUserList();setTitle("SharingContact");mainMenuDialog.dismiss();break;}//导入手机联系人case 1:{ progressDialog=ProgressDialog .show(MainActivity.this, "请等待...", "正在导入手机联系人,请稍后...",true); new Thread(){ @Override public void run() { // TODO Auto-generated method stub getPhoneContacts(); //将手机上的联系人导入列表 handler.sendEmptyMessage(0); } }.start(); break;}case 2:{break;}//全部删除case 3:{AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); confirmDialog = builder.create();builder.setTitle("是否删除所有!?");builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) { ContactInfo[] alluser = userlist.readContacts(); if(alluser != null ){//首次启动时,需要判断数据库是否为空 userlist.clearContacts(); } lv.setAdapter(null); mainMenuDialog.dismiss();}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {confirmDialog.dismiss();}});builder.create().show();break;}//更新case 4:{contact[] test=getContact("11");Log.d("test",""+test.length);// mainMenuDialog.dismiss();break;}//后退case 5:{mainMenuDialog.dismiss();break;}}}});}}private void getPhoneContacts() { ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); //取得电话本中开始一项的光标 int localN = cursor.getCount(); if(localN == 0) { cursor.close(); return; } ContactInfo[] infos = new ContactInfo[localN]; cursor.moveToFirst(); int iInfo = 0; String name; String contactId; while (!cursor.isAfterLast()) { infos[iInfo] = new ContactInfo(); // 取得联系人名字 name = cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME)); infos[iInfo].Name = name; // 取得联系人ID contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); // 取得电话号码(可能存在多个号码) int len = phone.getCount(); String[] phones = null; if(len != 0) { phones = new String[len]; phone.moveToFirst(); int k=0; String strPhoneNumber; while (!phone.isAfterLast()) { strPhoneNumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); phones[k] = strPhoneNumber; phone.moveToNext(); k++; } } phone.close(); if(phones != null){ infos[iInfo].MobileTel = phones[0]; if(phones.length>1) { infos[iInfo].FixedTel = phones[1]; } } infos[iInfo].ImageId = R.drawable.image15; cursor.moveToNext(); iInfo++; } cursor.close(); Contacts c = new Contacts(MainActivity.this);c.readLocalContacts(infos); }private void loadupdate() { if(builder == null){LayoutInflater li = LayoutInflater.from(this);View textEntryView = li.inflate(R.layout.main_menu_update, null);final LinearLayout updatelayout = (LinearLayout) getLayoutInflater().inflate(R.layout.main_menu_update, null); builder = new AlertDialog.Builder(this);builder.setTitle("同步通讯录");builder.setView(textEntryView).create();builder.setPositiveButton("同步", new DialogInterface.OnClickListener() {public void onClick(DialogInterface arg0, int arg1) { //同步操作// shock = (CheckBox)musicDilog.findViewById(R.id.shock);et_phone = (EditText) updatelayout.findViewById(R.id.myname);cb_share = (CheckBox) updatelayout.findViewById(R.id.cb_find);phone = et_phone.getText().toString();Log.d(TAG, phone);if(cb_share.isChecked()){share=2;}else{share=1;}new Thread(new Runnable(){public void run(){if(phone==""){Toast toast=Toast.makeText(getApplicationContext(), "请先输入您的手机号码", Toast.LENGTH_SHORT); toast.show(); }else{userlist=new Contacts(MainActivity.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.d("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++;}Log.d("test", sync(phone,infosInsert));}if(userinfo[2]!=null){int k=0;int length1=userinfo[2].length;while(k<length1){Log.d("test", deleteContact(phone,userinfo[2][k].ContactID));k++;}}}finish();}}).start();} });builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {}});builder.show(); }}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 lengthdos.writeInt(2);dos.flush();dos.writeInt(count);dos.flush();//transmissionsos.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"+e;}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;}private SimpleAdapter getMenuAdapter(String[] menuNameArray,int[] imageResourceArray) {ArrayList<HashMap> data = new ArrayList<HashMap>();for (int i = 0; i < menuNameArray.length; i++) {HashMap map = new HashMap();map.put("itemImage", imageResourceArray[i]);map.put("itemText", menuNameArray[i]);data.add(map);}SimpleAdapter simperAdapter = new SimpleAdapter( this, data, R.layout.item_menu, new String[] { "itemImage", "itemText" }, new int[] { R.id.item_image, R.id.item_text });return simperAdapter;}public static contact[] getContact(String utel){int count;contact[] getArray=null;try{Socket socket=new Socket("109.131.14.239",10086);OutputStream os=socket.getOutputStream();InputStream is=socket.getInputStream();PrintWriter sos=new PrintWriter(os);DataOutputStream dos=new DataOutputStream(os);DataInputStream dis=new DataInputStream(is);BufferedReader sis=new BufferedReader(new InputStreamReader(is));dos.writeInt(4);dos.flush();sos.println(utel);sos.flush();count=dis.readInt();getArray=new contact[count];for(int i=0;i<count;i++){// getArray[i]=new contact();getArray[i].name=sis.readLine();getArray[i].tel=sis.readLine();getArray[i].contactId=dis.readInt();}os.close();is.close();sos.close();dos.close();dis.close();sis.close();socket.close();}catch(Exception e){System.out.println("ERROR "+e);}return getArray;}}class contact{public String name;public String tel;public int contactId;}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值