精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

人人網官方Android客戶端源碼分析

移動開發 Android
本文針對最新人人網官方Android客戶端(4.2.1,該版本新增聊天功能)進行源碼分析,僅供Android學習交流使用!

ContentProvider是不同應用程序之間進行數據交換的標準API,ContentProvider以某種Uri的形式對外提供數據,允許其他應用訪問或修改數據;其他應用程序使用ContentResolver根據Uri去訪問操作指定數據。

人人網Android客戶端也是使用ContentProvider對需要保存于Android客戶端的數據進行管理。

1. renren.db

SQLLiteOpenHelper是Android提供的一個管理數據庫的工具類,可用于管理數據庫的創建和版本更新。一般的用法是創建SQLiteOpenHelper的子類,并擴展它的onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)方法。

人人網Android客戶端使用該方法創建及修改用戶手機中的人人網數據庫(renren.db)。

下面是RenRenProvider$DatabaseHelper的代碼:

  1. public class RenRenProvider$DatabaseHelper extends SQLiteOpenHelper {   
  2.     public RenRenProvider$DatabaseHelper(Context context) {   
  3.         super(context, "renren.db"null71);   
  4.     }   
  5.    
  6.     @Override   
  7.     public void onCreate(SQLiteDatabase db) {   
  8.         db.execSQL("CREATE TABLE pic (_id INTEGER PRIMARY KEY,url TEXT UNIQUE ON CONFLICT REPLACE,_data TEXT,size INTEGER);");   
  9.         db.execSQL("CREATE TABLE account (_id INTEGER PRIMARY KEY,uid INTEGET,account TEXT UNIQUE ON CONFLICT REPLACE,pwd TEXT,proxy INTEGER,sessionkey TEXT,srt_key TEXT,ticket TEXT,name TEXT,headphoto BLOB,isdefault INTEGER,last_login INTEGER,friend_count INTEGER);");   
  10.         db.execSQL("CREATE TABLE home (_id INTEGER PRIMARY KEY,item_id INTEGER UNIQUE ON CONFLICT REPLACE,data BLOB);");   
  11.         db.execSQL("CREATE TABLE profile (_id INTEGER PRIMARY KEY,type INTEGER UNIQUE ON CONFLICT REPLACE,data BLOB);");   
  12.         db.execSQL("CREATE TABLE friends (_id INTEGER PRIMARY KEY,uid INTEGER UNIQUE ON CONFLICT REPLACE,username TEXT,headurl TEXT,doing TEXT,nameindex TEXT,namepinyin TEXT,friendgroup TEXT,network TEXT,gender TEXT,isfriend INTEGER,suggest_text_1 TEXT,suggest_intent_query TEXT);");   
  13.         db.execSQL("CREATE TABLE messages (_id INTEGER PRIMARY KEY,messageid INTEGER UNIQUE ON CONFLICT REPLACE,message BLOB);");   
  14.         db.execSQL("CREATE TABLE favorites (_id INTEGER PRIMARY KEY,favoriteid BIGINT UNIQUE ON CONFLICT REPLACE,favoriteowner INTEGER,type INTEGER,favorite BLOB);");   
  15.         db.execSQL("CREATE TABLE emonticons (_id INTEGER PRIMARY KEY,url TEXT,emotion TEXT  UNIQUE ON CONFLICT REPLACE,img BLOB,size INTEGER,_data TEXT);");   
  16.         db.execSQL("CREATE TABLE favoritefriends (_id INTEGER PRIMARY KEY,owner INTEGER,uid INTEGER,name TEXT);");   
  17.         db.execSQL("CREATE TABLE chathistory (_id INTEGER PRIMARY KEY,uid INTEGER,tochatid INTEGER,chatmessage TEXT,comefrom INTEGER,chatname TEXT,chattime LONG);");   
  18.     }   
  19.    
  20.     @Override   
  21.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {   
  22.         db.execSQL("DROP TABLE IF EXISTS pic");   
  23.         db.execSQL("DROP TABLE IF EXISTS account");   
  24.         db.execSQL("DROP TABLE IF EXISTS home");   
  25.         db.execSQL("DROP TABLE IF EXISTS profile");   
  26.         db.execSQL("DROP TABLE IF EXISTS friends");   
  27.         db.execSQL("DROP TABLE IF EXISTS messages");   
  28.         db.execSQL("DROP TABLE IF EXISTS favorites");   
  29.         db.execSQL("DROP TABLE IF EXISTS emonticons");   
  30.         db.execSQL("DROP TABLE IF EXISTS favoritefriends");   
  31.         db.execSQL("DROP TABLE IF EXISTS favoritefriends");   
  32.         db.execSQL("DROP TABLE IF EXISTS chathistory");   
  33.         onCreate(db);   
  34.     }   
  35. }   

從代碼中我們可以看到人人網Android客戶端在用戶手機上創建了renren.db數據庫,數據庫中共有10張表,分別為pic、account、home、profile、friends、messages、favorites、emonticons、favoritefriends、chathistory。#p#

2. RenRenProvider

前面我們已經提到過ContentProvider,下面我們來看看人人網Android客戶端是如何開發ContentProvider的。開發ContentProvider的兩步:1)開發一個ContentProvider的子類,該子類需要實現增、刪、改、查等方法。2)在AndroidManifest.xml文件中注冊該ContentProvider。

下面是RenRenProvider核心代碼:

  1. public class RenRenProvider extends ContentProvider {   
  2.    
  3.     public static final String AUTHORITY = "com.renren.mobile.provider";   
  4.    
  5.     public static final class Account implements BaseColumns {   
  6.         public static final Uri ACCOUNT_CONTENT_URI = Uri   
  7.                 .parse("content://com.renren.mobile.provider/account");   
  8.     }   
  9.     public static final class ChatHistory implements BaseColumns {   
  10.         public static final Uri CHAT_HISTORY_CONTENT_URI = Uri   
  11.                 .parse("content://com.renren.mobile.provider/chathistory");   
  12.     }   
  13.     public static final class Emonticons implements BaseColumns {   
  14.         public static final Uri EMONTICONS_CONTENT_URI = Uri   
  15.                 .parse("content://com.renren.mobile.provider/emonticons");   
  16.     }   
  17.     public static final class Favorite implements BaseColumns {   
  18.         public static final Uri FAVORITE_CONTENTURI = Uri   
  19.                 .parse("content://com.renren.mobile.provider/favorites");   
  20.     }   
  21.     public static final class FavoriteFriends implements BaseColumns {   
  22.         public static final Uri FAVORITE_FRIENDS_CONTENT_URI = Uri   
  23.                 .parse("content://com.renren.mobile.provider/favoritefriends");   
  24.     }   
  25.     public static final class Friends implements BaseColumns {   
  26.         public static final Uri FRIENDS_CONTENT_URI = Uri   
  27.                 .parse("content://com.renren.mobile.provider/friends");   
  28.     }   
  29.     public static final class Home implements BaseColumns {   
  30.         public static final Uri HOME_CONTENT_URI = Uri   
  31.                 .parse("content://com.renren.mobile.provider/home");   
  32.     }   
  33.    
  34.     public static final class Messages implements BaseColumns {   
  35.         public static final Uri MESSAGES_CONTENT_URI = Uri   
  36.                 .parse("content://com.renren.mobile.provider/messages");   
  37.     }   
  38.    
  39.     public static final class Pic implements BaseColumns {   
  40.         public static final Uri PIC_CONTENT_URI = Uri   
  41.                 .parse("content://com.renren.mobile.provider/pic");   
  42.     }   
  43.     public static final class Profile implements BaseColumns {   
  44.         public static final Uri PROFILE_CONTENT_URI = Uri   
  45.                 .parse("content://com.renren.mobile.provider/profile");   
  46.     }   
  47.    
  48.     private static final UriMatcher URI_MATCHER;   
  49.     private RenRenProvider.DatabaseHelper renrenDatabaseHelper;   
  50.    
  51.     static {   
  52.         URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);   
  53.         URI_MATCHER.addURI(AUTHORITY, "pic"3);   
  54.         URI_MATCHER.addURI(AUTHORITY, "pic/#"4);   
  55.         URI_MATCHER.addURI(AUTHORITY, "account"5);   
  56.         URI_MATCHER.addURI(AUTHORITY, "account/#"6);   
  57.         URI_MATCHER.addURI(AUTHORITY, "home"7);   
  58.         URI_MATCHER.addURI(AUTHORITY, "home/#"8);   
  59.         URI_MATCHER.addURI(AUTHORITY, "profile"9);   
  60.         URI_MATCHER.addURI(AUTHORITY, "profile/#"10);   
  61.         URI_MATCHER.addURI(AUTHORITY, "friends"11);   
  62.         URI_MATCHER.addURI(AUTHORITY, "friends/#"12);   
  63.         URI_MATCHER.addURI(AUTHORITY, "search_suggest_query/*"1);   
  64.         URI_MATCHER.addURI(AUTHORITY, "search_suggest_query"2);   
  65.         URI_MATCHER.addURI(AUTHORITY, "messages"13);   
  66.         URI_MATCHER.addURI(AUTHORITY, "messages/#"14);   
  67.         URI_MATCHER.addURI(AUTHORITY, "favorites"15);   
  68.         URI_MATCHER.addURI(AUTHORITY, "favorites/#"16);   
  69.         URI_MATCHER.addURI(AUTHORITY, "emonticons"17);   
  70.         URI_MATCHER.addURI(AUTHORITY, "emonticons/#"18);   
  71.         URI_MATCHER.addURI(AUTHORITY, "favoritefriends"19);   
  72.         URI_MATCHER.addURI(AUTHORITY, "favortiefriends/#"20);   
  73.         URI_MATCHER.addURI(AUTHORITY, "chathistory"21);   
  74.         URI_MATCHER.addURI(AUTHORITY, "chathistory/#"22);   
  75.         URI_MATCHER.addURI(AUTHORITY, "chathistory/*/*"23);   
  76.     }   
  77.    
  78.     public boolean onCreate()   
  79.     {   
  80.         renrenDatabaseHelper = new RenRenProvider.DatabaseHelper(this.getContext());   
  81.         return true;   
  82.     }   
  83.    
  84.     //其它代碼省略...   
  85. }   

下面是人人網android客戶端在AndroidMantifest.xml中對該ContentProvider的注冊。 

  1. <providerandroid:nameproviderandroid:nameproviderandroid:nameproviderandroid:name=".contentprovider.RenRenProvider" android:permission="com.renren.mobile.android.permission.PERMISSION_ADD_ACCOUNT"    
  2. android:authorities="com.renren.mobile.provider" />   

從上面的分析我們了解到只要得到com.renren.mobile.android.permission.PERMISSION_ADD_ACCOUNT權限我們就可以通過特定Uri訪問人人網Android客戶端在用戶手機上創建的renren.db中特定表了。#p#

3. 開發Android應用訪問renren.db中的數據

從上面分析中我們已經知道renren.db中表結構,及訪問特定表對應的Uri,如我們可以通過content://com.renren.mobile.provider/account訪問renren.db中的account表等等。下面我們寫個很簡單的例子來訪問account表中的account和ticket字段。

main.xml根節點下簡單添加2個TextView,如下:

  1. <TextView   
  2.         android:id="@+id/textView1"   
  3.         android:layout_width="fill_parent"   
  4.         android:layout_height="wrap_content"   
  5.         android:text="TextView" />   
  6.    
  7.    
  8. <TextView   
  9.         android:id="@+id/textView2"   
  10.         android:layout_width="fill_parent"   
  11.         android:layout_height="wrap_content"   
  12.         android:text="TextView" />   

將account和ticket信息顯示到TextView中,類代碼如下

  1. public class RenRenExtActivity extends Activity {   
  2.    
  3.     private static final Uri ACCOUNT_CONTENT_URI = Uri   
  4.             .parse("content://com.renren.mobile.provider/account");   
  5.    
  6.     @Override   
  7.     public void onCreate(Bundle savedInstanceState) {   
  8.         super.onCreate(savedInstanceState);   
  9.         setContentView(R.layout.main);   
  10.    
  11.         TextView textView1 = (TextView) findViewById(R.id.textView1);   
  12.         textView1.setText("Sorry.");   
  13.         TextView textView2 = (TextView) findViewById(R.id.textView2);   
  14.         textView2.setText("Sorry2.");   
  15.    
  16.         Cursor cursor = getContentResolver().query(ACCOUNT_CONTENT_URI, null,   
  17.                 nullnullnull);   
  18.    
  19.         List<Map<String, String>> resultList = converCursorToList(cursor);   
  20.         if (!resultList.isEmpty()) {   
  21.             Map<String, String> map = resultList.get(0);   
  22.             textView1.setText(map.get("account"));   
  23.             textView2.setText(map.get("ticket"));   
  24.         }   
  25.     }   
  26.    
  27.     private List<Map<String, String>> converCursorToList(Cursor cursor) {   
  28.         List<Map<String, String>> result = new ArrayList<Map<String, String>>();   
  29.    
  30.         if (cursor == null) {   
  31.             return Collections.emptyList();   
  32.         }   
  33.    
  34.         // 遍歷Cursor結果集   
  35.         while (cursor.moveToNext()) {   
  36.             // 將結果集中的數據存入ArrayList中   
  37.             Map<String, String> map = new HashMap<String, String>();   
  38.             map.put("account",   
  39.                     cursor.getString(cursor.getColumnIndex("account")));   
  40.             map.put("ticket", cursor.getString(cursor.getColumnIndex("ticket")));   
  41.             result.add(map);   
  42.         }   
  43.         return result;   
  44.     }   
  45. }   

需要指出的是,上面的應用程序需要操作人人網android客戶端中的數據庫,因此要記得在AndroidMantifest.xml文件中為該應用程序授權。也就是在該文件的根元素中添加如下元素: 

  1. <uses-permission android:name="com.renren.mobile.android.permission.PERMISSION_ADD_ACCOUNT" />   

如果你android手機中安裝有人人網Android客戶端且曾經使用過,那么renren.db中應該有數據存在,把上面應用打包為apk文件安裝到你android手機中,運行它,應該能看到屏幕中將顯示你的人人網賬號及一串ticket,該ticket是人人網Andriod客戶端部分功能與人人網服務器通信的sid。

同理,也可以使用其它特定Uri訪問手機中renre.db中特定的表,如friends表等等,所有Uri詳見RenRenProvider代碼。

 

責任編輯:佚名 來源: Iteye
相關推薦

2011-10-31 17:29:27

人人網客戶端照片

2011-11-04 15:03:36

照片客戶端人人飛傳

2021-07-16 06:56:50

Nacos注冊源碼

2011-07-20 15:55:07

人人手機客戶端

2015-03-30 14:24:06

網易布局

2022-04-01 08:31:11

RabbitMQ客戶端Channel

2022-03-29 08:31:18

RabbitMQMQ客戶端

2015-01-09 11:49:26

Android源碼下載

2021-03-12 16:21:02

LinuxEvernote客戶端

2022-04-07 08:30:57

AMQP協議RabbitMQ客戶端源碼

2021-08-01 23:18:21

Redis Golang命令

2018-12-27 13:11:04

愛奇藝APP優化

2011-07-01 10:00:11

Ubuntu OneAndroid

2022-04-20 08:32:09

RabbitMQ流控制

2011-08-17 10:10:59

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端

2009-11-09 15:49:01

WCF異步調用

2012-08-29 09:40:12

SkyDrive An

2015-01-14 13:59:50

騰訊微博客戶端源碼下載

2022-07-05 15:18:51

Kuro開源
點贊
收藏

51CTO技術棧公眾號

蜜桃av免费在线观看| 免费在线观看毛片网站| 亚洲免费不卡视频| 国产精品一区亚洲| 久久精品99无色码中文字幕| 中文字幕亚洲日本| 亚洲黄色网址| 国产精品久久福利| 国产乱码精品一区二区三区日韩精品| 一级免费在线观看| 日韩精品免费一区二区三区| 精品国产一区二区三区久久久蜜月 | 久久精品视频免费观看| 成人看片人aa| 天堂网视频在线| 欧美激情第二页| 亚洲欧美日韩一区二区在线 | 成人av资源网站| 国产精品91久久久久久| 妺妺窝人体色www婷婷| 精品免费在线| 亚洲第一福利网| 亚洲激情在线看| 亚洲欧美韩国| 亚洲小说欧美激情另类| 亚洲精品一区二区三区av| 欧美亚洲精品在线观看| 国产一区在线看| 国产精品电影在线观看| 国产亚洲精品av| 久久精品影视| 中文字幕在线精品| 国产特黄级aaaaa片免| 亚洲一级大片| 91精品综合久久久久久| 香港日本韩国三级网站| 刘亦菲一区二区三区免费看| 性做久久久久久免费观看欧美| 一区二区在线不卡| 成人免费在线电影| 99精品欧美一区二区三区综合在线| 91久久久久久久久久久久久| 在线免费一区二区| 久久99伊人| 18久久久久久| 日韩精品视频免费看| 欧美视频网站| 欧美成人中文字幕| 懂色av懂色av粉嫩av| 日韩在线二区| 日韩中文字幕在线看| 亚洲av成人无码久久精品 | 国产福利91精品一区二区三区| 国产欧美精品xxxx另类| 国产一级片免费视频| 美女尤物久久精品| 国产福利精品视频| 最近国语视频在线观看免费播放| 久久久久久穴| 日本亚洲精品在线观看| 特级西西444www大精品视频免费看| 亚洲三级免费| 国外色69视频在线观看| www.99re7| 欧美黄色精品| 欧美日韩国产成人在线| 麻豆changesxxx国产| 亚洲欧美一区在线| 欧美激情中文网| 国产午夜精品一区二区理论影院| 亚洲国产1区| 97久久伊人激情网| 国产精品第5页| 蜜桃av一区二区在线观看| 国产综合久久久久| 精品人妻伦一二三区久久| 成人免费av资源| 精品在线不卡| 在线观看黄色av| 亚洲三级在线免费| 青青青青在线视频| 综合毛片免费视频| 欧美日韩视频一区二区| 日本一区二区三区在线免费观看| 1313精品午夜理伦电影| 亚洲国产精品99| jizz中文字幕| 综合天堂久久久久久久| 午夜精品理论片| 免费在线不卡av| 国产一区三区三区| 精品中文字幕一区| 日本在线免费看| 亚洲一区二区在线观看视频 | 美女色狠狠久久| 日韩一区二区免费电影| av鲁丝一区鲁丝二区鲁丝三区| 国产区精品区| 欧美成人免费网| 亚洲成人第一网站| 国产成人一区在线| 日韩欧美视频一区二区| 日本在线视频www鲁啊鲁| 好吊成人免视频| 国产无色aaa| 亚洲免费福利一区| 欧美激情国产日韩精品一区18| 久草视频一区二区| 国产高清亚洲一区| 日本在线一区| www在线观看黄色| 欧美日韩一区高清| 久久精品女同亚洲女同13| 五月天激情综合网| 日韩美女在线观看| 成人精品在线播放| 亚洲日本韩国一区| 欧美一级黄色影院| 欧美美女啪啪| 欧美成人免费全部观看天天性色| 糖心vlog精品一区二区| www.99精品| 黄色污污在线观看| 最新日韩一区| 亚洲视频免费一区| 一级aaa毛片| 国产精品亚洲第一| 伊人天天久久大香线蕉av色| 全球最大av网站久久| 亚洲日本欧美日韩高观看| 欧美不卡视频在线观看| 丁香啪啪综合成人亚洲小说| 天堂v在线视频| 久久久免费人体| 在线看片第一页欧美| 秋霞av一区二区三区| 91免费版在线看| 国产最新免费视频| 亚洲va久久| 2018日韩中文字幕| 四虎影视精品成人| 都市激情亚洲色图| 成人影视免费观看| 亚洲欧美bt| 欧美一区二区三区成人久久片| 色偷偷偷在线视频播放| 日韩高清不卡av| 日本一级淫片色费放| jizz一区二区| 亚欧无线一线二线三线区别| 欧美一级一片| 国产99久久久欧美黑人| 精品视频二区| 欧美三电影在线| 欧美日韩生活片| 极品销魂美女一区二区三区| 中文字幕在线亚洲精品| 免费成人毛片| 久久色精品视频| 91精品国自产| 自拍偷拍亚洲欧美日韩| 91蝌蚪视频在线| 久久久久国产| 91超碰在线免费观看| 国产黄a三级三级三级av在线看| 欧美色图在线观看| 国产精品成人在线视频| 免费不卡在线视频| 免费久久久久久| 国内不卡的一区二区三区中文字幕| 欧美日韩成人免费| av网站在线免费看| 亚洲欧美另类在线| xxxx视频在线观看| 国产免费成人| 日韩av一区二区三区在线观看| 欧美xxxx做受欧美护士| 一区二区三区动漫| 国产又粗又猛又爽又黄的| 亚洲女人的天堂| 精品人妻一区二区乱码| 国产综合网站| 麻豆传媒一区二区| 电影一区二区| 免费不卡在线观看av| 无码精品人妻一区二区三区影院| 欧美日韩在线免费观看| 黄色片在线观看免费| 国产一区二区三区免费看| 欧美三级午夜理伦三级老人| 亚洲日本va| 91高清视频在线免费观看| 欧美色综合一区二区三区| 欧美亚洲一区二区三区四区| 青娱乐国产盛宴| 91免费小视频| 色91精品久久久久久久久| 黑人一区二区三区四区五区| 国产欧美一区二区三区另类精品| 成人涩涩视频| 欧美国产日韩一区二区在线观看| 天天干天天摸天天操| 欧美午夜精品一区二区三区| 久久亚洲AV无码| 久久久亚洲精品一区二区三区| 亚洲欧美日韩精品一区| 亚洲第一精品影视| 污视频在线免费观看一区二区三区| 爱高潮www亚洲精品| 国产成人黄色av| gogo在线高清视频| 日韩精品一区二区三区第95| 国产精品无码一区二区桃花视频 | 国产盗摄女厕一区二区三区| 亚洲自偷自拍熟女另类| 午夜精品影院| 视频一区亚洲 | 成人在线看片| **日韩最新| 欧美在线视频播放| 男人天堂亚洲| 久久精品国产免费观看| 超碰免费97在线观看| 精品动漫一区二区三区在线观看| 国产女优在线播放| 午夜精品免费在线观看| 一级肉体全黄裸片| 91色在线porny| 日韩不卡的av| 看片的网站亚洲| 女人和拘做爰正片视频| 国产精品久久国产愉拍| 欧美黄网在线观看| 成人在线电影在线观看视频| 精品无码久久久久国产| 国产精品美女在线观看直播| 亚洲自拍偷拍一区| 成人在线免费av| 国产成人精品久久亚洲高清不卡| 黑森林国产精品av| 久久伊人色综合| www.91在线| 亚洲美女在线观看| 婷婷久久久久久| 精品久久久久久亚洲综合网 | 免费电影网站在线视频观看福利| 欧美成人剧情片在线观看| 91吃瓜网在线观看| 伊人久久久久久久久久久| 人成在线免费视频| 亚洲热线99精品视频| 无码h黄肉3d动漫在线观看| 日韩精品一区二区三区三区免费 | 不卡一二三区| 性视频1819p久久| 国产人成网在线播放va免费| 久久亚洲欧美日韩精品专区| 欧美日韩在线资源| 日韩在线精品视频| 伦xxxx在线| 久久亚洲国产精品成人av秋霞| 国产高清一区在线观看| 亚洲丝袜在线视频| av在线免费观看网| 久久福利网址导航| 在线观看操人| 欧美黑人xxxⅹ高潮交| 免费男女羞羞的视频网站在线观看| 欧美久久精品一级黑人c片| 亚洲夜夜综合| 色综合视频一区中文字幕| 丁香花在线观看完整版电影| 久久久亚洲国产| 精品3atv在线视频| 国产成一区二区| 中文成人激情娱乐网| 国产精品美乳一区二区免费 | 91精品国产综合久久香蕉922| 精品国产乱码一区二区三区| 亚洲aa中文字幕| 一区二区三区视频播放| 激情视频一区二区| 日韩毛片视频| 台湾无码一区二区| 国产欧美日本| 激情五月开心婷婷| 国产专区综合网| 天天躁日日躁狠狠躁免费麻豆| 2019国产精品| 四虎永久免费在线| 午夜不卡在线视频| 亚洲精品国产欧美在线观看| 3751色影院一区二区三区| 深夜福利视频一区| 日韩在线视频观看| 久久av色综合| 欧美一级电影久久| 国产精品一区二区精品| 国产精品一 二 三| 欧洲杯足球赛直播| 精品无码国产一区二区三区av| 亚洲免费综合| 午夜免费一级片| jvid福利写真一区二区三区| 国产福利视频网站| 欧美性xxxxxxx| 一区二区的视频| 国产亚洲精品日韩| 在线观看午夜av| 国产精品99蜜臀久久不卡二区| 国产精品白丝久久av网站| 日本一区二区免费看| 欧美特黄a级高清免费大片a级| 欧美一级片中文字幕| 黄一区二区三区| 日韩毛片无码永久免费看| 亚洲午夜激情av| 91禁在线观看| 国产亚洲欧美日韩一区二区| 波多野结衣在线播放| 国产在线精品一区免费香蕉| 欧美美女在线直播| wwwwww欧美| 久久精品久久久精品美女| 国产毛片毛片毛片毛片毛片毛片| 亚洲一区二区视频在线| 伊人免费在线观看高清版| 日韩av网址在线观看| 在线观看免费高清完整| 国产精品69av| 日本在线中文字幕一区| 午夜久久久久久久久久久| 另类人妖一区二区av| 久久久久久九九九九九| 亚洲成人一区在线| 精品国产区一区二| www国产精品com| 成人精品国产| 久久精品日韩精品| 亚洲在线成人| 在线免费看黄色片| 一区二区三区四区五区视频在线观看 | 亚洲欧洲av另类| 久久国产乱子伦精品| 国产一区二区三区18| 欧美日韩123区| 精品国产一区二区三区麻豆小说| 伊人成人在线视频| 久久久久亚洲av成人网人人软件| 亚洲视频一区二区免费在线观看| 国产黄色免费观看| 亚洲新声在线观看| 粉嫩一区二区三区| 日产国产精品精品a∨| 久久精品国产一区二区三区免费看 | 特级毛片在线免费观看| 美国一区二区三区在线播放| 91麻豆精品成人一区二区| 欧美日韩精品一区二区三区四区 | 99精品一区二区| 可以免费在线观看的av| 日韩av中文在线| 亚洲精品成人图区| 亚洲无玛一区| 国内精品视频666| 成年人午夜剧场| 亚洲电影免费观看高清完整版在线| 超级碰碰不卡在线视频| 国产日韩一区二区| 日韩综合在线视频| 九九热免费在线| 欧美性猛交xxxx乱大交退制版 | 国产91丝袜在线18| www.国产高清| 亚洲视频国产视频| 久久久久黄色| 草b视频在线观看| 91麻豆国产在线观看| 国产精品视频一区在线观看| 日韩中文字幕在线视频| 国产日韩在线观看视频| 国产黄色激情视频| 国产网站一区二区| 国产一区二区网站| 久久久人成影片一区二区三区| 欧美人与牛zoz0性行为| 在线观看亚洲色图| 亚洲人成小说网站色在线| 天堂а√在线8种子蜜桃视频| 国产成人极品视频| 91精品蜜臀一区二区三区在线| 在线免费观看污视频| 欧美色网一区二区| 久久99亚洲网美利坚合众国| 女女同性女同一区二区三区91| 久久精品二区亚洲w码| 国产在线拍揄自揄拍| 在线精品高清中文字幕| 亚洲无线观看| 国产精品人人爽人人爽|