日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

安卓端简易FTP客户端APP开发

發布時間:2024/1/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓端简易FTP客户端APP开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先上效果圖:

本文的FTP客戶端基于commons-net-3.3.jar庫實現。

實現了ftp服務器登錄。

單個文件的下載和上傳,以及本地復制和刪除文件。

一、登錄服務器活動模塊編寫:

這塊呢首先是要編寫一個登錄的界面的。

我的界面XML如下:

主要就是利用TextInputLayout這個控件來編寫的。不清楚這個控件的可以 百度/Google?學習一下。

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".FtpConnectActivity"><android.support.design.widget.TextInputLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><EditTextandroid:id="@+id/address"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="地址"android:maxLines="1"android:singleLine="true" /></android.support.design.widget.TextInputLayout><android.support.design.widget.TextInputLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><EditTextandroid:id="@+id/port"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="端口/默認21"android:maxLines="1"android:singleLine="true" /></android.support.design.widget.TextInputLayout><android.support.design.widget.TextInputLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><EditTextandroid:id="@+id/user"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="賬戶"android:maxLines="1"android:singleLine="true" /></android.support.design.widget.TextInputLayout><android.support.design.widget.TextInputLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><EditTextandroid:id="@+id/password"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="密碼"android:inputType="textPassword"android:maxLines="1"android:singleLine="true" /></android.support.design.widget.TextInputLayout><Buttonandroid:id="@+id/connect_button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="連接"/> </LinearLayout>

接下來看一下我的登錄模塊活動的Java代碼:

public class FtpConnectActivity extends AppCompatActivity {private FTPClient mFtpClient;private Button Connect_Button;private String address,password,user;private int port=0;private EditText addressInput,portInput,userInput,passwordInput;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_ftp_connect);SharedPreferences pref =getSharedPreferences("connectData",MODE_PRIVATE);address=pref.getString("address","X");password=pref.getString("password","X");user=pref.getString("user","X");port=pref.getInt("port",0);addressInput=(EditText)findViewById(R.id.address);portInput=(EditText)findViewById(R.id.port);userInput=(EditText)findViewById(R.id.user);passwordInput=(EditText)findViewById(R.id.password);if(address!=null&&!address.equals("X")){addressInput.setText(address);}if(password!=null&&!password.equals("X")){passwordInput.setText(password);}if(user!=null&&!user.equals("X")){userInput.setText(user);}if(port!=0){portInput.setText(" "+port);}Connect_Button=(Button)findViewById(R.id.connect_button);Connect_Button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {address=addressInput.getText().toString();try {port = Integer.parseInt(portInput.getText().toString().trim());}catch (NumberFormatException e){port=0;e.printStackTrace();}user=userInput.getText().toString();password=passwordInput.getText().toString();//信息保存SharedPreferences.Editor editor=getSharedPreferences("connectData",MODE_PRIVATE).edit();editor.putString("address",address);editor.putString("user",user);editor.putString("password",password);editor.putInt("port",port);editor.apply();attemptLogin();}});}private void attemptLogin(){if(address.equals("")||port==0||user.equals("")||password.equals("")){Toast.makeText(this,"請填寫完整的信息",Toast.LENGTH_SHORT).show();return;}else{FtpLogin(address,port,user,password);}}private void FtpLogin(final String address, final int port, final String user, final String password ){FtpUtil.Init(address,port,user,password);if(FtpUtil.Connect()){//備注:后續,這里可以試著模仿okhttp的回調模式//如果連接成功Intent intent=new Intent();intent.setAction("com.app.bhk.connected");sendBroadcast(intent);runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(FtpConnectActivity.this, "success", Toast.LENGTH_SHORT).show();}});}else {//連接失敗runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(FtpConnectActivity.this, "failure", Toast.LENGTH_SHORT).show();}});}}}

? ? ? 首先一般登錄模塊都會有記住密碼功能所以這里我實現了記住密碼功能,不過這里我并沒有添加記住密碼的這個勾選框,也就是默認記住密碼的,有需要的朋友的可以自己添加。記住密碼主要是利用SharePreference實現的。大概邏輯如下:當用戶點擊連接時,獲取到用戶的輸入信息將其存放在SharePreference數據庫內。下次啟動這個登錄活動時自動提取出上次的輸入信息,就可以了。具體可看代碼。

? ? ?然后就是說一下attemptLogin()這個方法,這個方法用于做登錄之前的準備,包括用戶輸入信息的格式判斷。有興趣研究登錄模塊編寫的朋友可以看我的另一篇博客《Android登錄模塊代碼解析》。

? ? ?最后FtpLogin()就是正式的關于連接ftp服務器的一些操作了。這里我寫了一個FtpUtil類專門來處理關于Ftp服務器的一些操作。這里直接調用相關方法進行登錄就行了。如果登錄成功這里還要寫一個廣播去通知主活動我們登錄成功了,還有將獲取到的FTPClient對象保存在FtpUtil中以便其他地方獲取!

二、工具類

? ? ? 在看主活動代碼之前我們先看一下我的兩個工具類:FileUtil(本地文件操作工具類)、FtpUtil(服務器文件操作工具類)的代碼。

public class FileUtil {private static File saveFile=null;private static FTPClient ftpClient;public static FTPClient getFtpClient() {return ftpClient;}public static void setFtpClient(FTPClient ftpClient) {FileUtil.ftpClient = ftpClient;}public static File getSaveFile() {return saveFile;}public static void setSaveFile(File saveFile) {FileUtil.saveFile = saveFile;}public static void Copy(File file, File directory){FileOutputStream outputStream=null;FileInputStream inputStream=null;if(!directory.isDirectory()||!file.isFile()||file.getParentFile().equals(directory))return;try {File newFile=new File(directory,file.getName());if(!newFile.exists()){newFile.createNewFile();}outputStream=new FileOutputStream(newFile);inputStream = new FileInputStream(file);byte[] buf = new byte[1024];int bytesRead;while((bytesRead=inputStream.read(buf))>0){outputStream.write(buf,0,bytesRead);}inputStream.close();outputStream.close();}catch (Exception e){e.printStackTrace();}} } public class FtpUtil {private static FTPClient mClient;private static String hostname;private static int port=21;//端口號默認21private static String account;private static String password;private static boolean check;private static FTPFile lists[];private static StringBuffer CurrentFile=new StringBuffer();private static FTPFile ftpFile;public static FTPFile getFtpFile() {return ftpFile;}public static void setFtpFile(FTPFile ftpFile) {FtpUtil.ftpFile = ftpFile;}public static void LastDirectory(){//切換目錄,沒用的原因是多個子線程沒法同步控制有待改進。思考可以用鎖來實現留待后續。try {int i = CurrentFile.toString().lastIndexOf('/');if (i >= 0) {CurrentFile.delete(i, CurrentFile.length());boolean f = mClient.changeToParentDirectory();Log.d("test1234", " " + f + " " + CurrentFile);}}catch (IOException e){e.printStackTrace();}}public static void NextDirectoty(final FTPFile file){//切換目錄,沒用的原因是多個子線程沒法同步控制有待改進。思考可以用鎖來實現留待后續。new Thread(new Runnable() {@Overridepublic void run() {try {CurrentFile.append("/" + file.getName());boolean f = mClient.changeWorkingDirectory(CurrentFile.toString());}catch (IOException e){e.printStackTrace();}}}).start();}public static void Init(String hostname1,int port1,String account1,String password1){hostname=hostname1;port=port1;account=account1;password=password1;if(mClient==null) {mClient = new FTPClient();}if(mClient.isConnected()){try {mClient.disconnect();}catch (IOException e){e.printStackTrace();}}}public static FTPClient getmClient() {return mClient;}public static boolean Connect(){check=true;new Thread(new Runnable() {@Overridepublic void run() {try {if (!mClient.isConnected()) {mClient.connect(hostname,port);boolean status = mClient.login(account, password);if (status) {check=true;try {mClient.setFileTransferMode(org.apache.commons.net.ftp.FTP.COMPRESSED_TRANSFER_MODE);// 使用被動模式設為默認mClient.enterLocalPassiveMode();// 二進制文件支持mClient.setFileType(FTP.BINARY_FILE_TYPE);//設置緩存mClient.setBufferSize(1024);//設置編碼格式,防止中文亂碼//中文亂碼問題后期再說吧mClient.setControlEncoding("UTF-8");//設置連接超時時間mClient.setConnectTimeout(10 * 1000);//設置數據傳輸超時時間mClient.setDataTimeout(10 * 1000);}catch (IOException e){e.printStackTrace();}}}} catch (IOException e) {e.printStackTrace();check=false;}}}).start();return check;}/*** 上傳.** @param localFilePath 需要上傳的本地文件路徑* @return 上傳結果* @throws IOException*/public static boolean uploadFile(String localFilePath) throws IOException {boolean flag = false;// 二進制文件支持mClient.setFileType(FTPClient.BINARY_FILE_TYPE);// 設置模式mClient.setFileTransferMode(FTPClient.STREAM_TRANSFER_MODE);File localFile = new File(localFilePath);if (localFile.exists() && localFile.isFile()) {flag = uploadingSingle(localFile);}// 返回值return flag;}private static boolean uploadingSingle(File localFile) throws IOException {boolean flag;// 創建輸入流InputStream inputStream = new FileInputStream(localFile);// 上傳單個文件flag = mClient.storeFile(localFile.getName(), inputStream);// 關閉文件流inputStream.close();return flag;}public boolean downloadFile(String localPath,FTPFile ftpFile) throws IOException {boolean result = false;//在本地創建對應文件夾目錄File localFile= new File(localPath);if (!localFile.exists()) {localFile.createNewFile();}result = downloadSingle(localFile, ftpFile);return result;}/*** 下載單個文件,此時ftpFile必須在ftp工作目錄下** @param localFile 本地目錄* @param ftpFile FTP文件* @return true下載成功, false下載失敗* @throws IOException*/public static boolean downloadSingle(File localFile, FTPFile ftpFile) throws IOException {boolean flag;// 創建輸出流File file=new File(localFile,ftpFile.getName());if(!file.exists()){file.createNewFile();}OutputStream outputStream = new FileOutputStream(file);// 下載單個文件flag = mClient.retrieveFile(ftpFile.getName(), outputStream);// 關閉文件流outputStream.close();return flag;}}

?? 上述注釋基本都比較詳細就不再贅述其中細節了。下面進入核心的主活動以及其相關代碼部分

三、主活動代碼

先說明我的代碼的一個重要部分。我們面臨這樣一個問題:因為服務器的文件是用FTPFile類表示的,而本地的文件是用File表示的。這樣我們主活動上用于顯示文件列表的Recyclerview就不能用一個適配器來解決了。因為這個兩各類沒有父子關系和亦或是同一個接口或者父類的子類關系。我的解決方法是:既然不能用一個適配器那就寫兩個適配器,在需要在服務器文件列表和本地文件列表之間切換時,主活動的recyclerview就使用setAdapter()進行切換。這樣就像一個插口一樣既可以插這個適配器,又可以插那個適配器。以下是我的主活動代碼:

public class MainActivity extends AppCompatActivity {private RecyclerView recyclerView;private FileAdapter adapter;private FtpFileAdapter adapter1;private List<File> FileList;private ProgressDialog progressDialog;private DrawerLayout mDrawerLayout;private ConnectBroadcastReceiver connectBroadcastReceiver;private FTPClient mClient;private List<FTPFile> Ftplist=new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getPermissions();mDrawerLayout=(DrawerLayout)findViewById(R.id.drawer_layout);ActionBar actionBar=getSupportActionBar();if(actionBar!=null){actionBar.setDisplayHomeAsUpEnabled(true);actionBar.setHomeAsUpIndicator(R.drawable.menu);}NavigationView navigationView=(NavigationView) findViewById(R.id.nav_view);navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem item) {switch (item.getItemId()){case R.id.nav_setting:Intent intent=new Intent(MainActivity.this,FtpConnectActivity.class);startActivity(intent);break;case R.id.nav_FtpServerDirectory:if(mClient!=null&&mClient.isConnected()){new Thread(new Runnable() {@Overridepublic void run() {try {FTPFile files[] = mClient.listDirectories();for (int i = 0; i < files.length; i++) {boolean check = false;for (FTPFile ftpFile : Ftplist) {if (ftpFile.getName().equals(files[i].getName()))check = true;}if (!check)Ftplist.add(files[i]);}runOnUiThread(new Runnable() {@Overridepublic void run() {recyclerView.setAdapter(adapter1);adapter1.notifyDataSetChanged();}});} catch (IOException e) {e.printStackTrace();}}}).start();}break;case R.id.nav_LocalDirectory:recyclerView.setAdapter(adapter);adapter.notifyDataSetChanged();break;}return true;}});progressDialog=new ProgressDialog(this);progressDialog.setTitle("正在復制...");InitData();recyclerView=(RecyclerView)findViewById(R.id.file_list);LinearLayoutManager layoutManager=new LinearLayoutManager(this);recyclerView.setLayoutManager(layoutManager);adapter=new FileAdapter(FileList);adapter1=new FtpFileAdapter(Ftplist,this);recyclerView.setAdapter(adapter);IntentFilter intentFilter=new IntentFilter();intentFilter.addAction("com.app.bhk.connected");connectBroadcastReceiver=new ConnectBroadcastReceiver();registerReceiver(connectBroadcastReceiver,intentFilter);}private void getPermissions(){if(ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);}if(ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION)!=PackageManager.PERMISSION_GRANTED)ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},2);}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode){case 1:if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){}else{Toast.makeText(this,"沒有權限打開相冊",Toast.LENGTH_SHORT).show();}case 2:}}private void InitData(){File file =Environment.getExternalStorageDirectory();FileList=new ArrayList<File>( Arrays.asList(file.listFiles()));}@Overridepublic void onBackPressed(){if(recyclerView.getAdapter()==adapter){adapter.LastFile();}else{adapter1.LastFile();}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main,menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item){switch (item.getItemId()){case R.id.copy:if(FileUtil.getSaveFile()!=null) {progressDialog.show();new Thread(new Runnable() {@Overridepublic void run() {if(recyclerView.getAdapter()==adapter) {FileUtil.Copy(FileUtil.getSaveFile(), adapter.getCurrentFile());runOnUiThread(new Runnable() {@Overridepublic void run() {progressDialog.dismiss();FileList.add(FileUtil.getSaveFile());adapter.notifyDataSetChanged();}});}else{try {FtpUtil.uploadFile(FileUtil.getSaveFile().getPath());Ftplist.clear();Ftplist.addAll( Arrays.asList(FtpUtil.getmClient().listFiles()));runOnUiThread(new Runnable() {@Overridepublic void run() {progressDialog.dismiss();adapter1.notifyDataSetChanged();}});}catch (IOException e){e.printStackTrace();}}}}).start();}break;case android.R.id.home:mDrawerLayout.openDrawer(GravityCompat.START);break;case R.id.copy_from_server:if(recyclerView.getAdapter()==adapter&&FtpUtil.getFtpFile()!=null) {progressDialog.show();new Thread(new Runnable() {@Overridepublic void run() {try {boolean result= FtpUtil.downloadSingle(adapter.getCurrentFile(), FtpUtil.getFtpFile());runOnUiThread(new Runnable() {@Overridepublic void run() {progressDialog.dismiss();}});if(result) {runOnUiThread(new Runnable() {@Overridepublic void run() {FileList.clear();FileList.addAll(Arrays.asList(adapter.getCurrentFile().listFiles()));adapter.notifyDataSetChanged();}});}else{runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(MainActivity.this,"復制失敗",Toast.LENGTH_SHORT).show();}});}}catch (IOException e){e.printStackTrace();}}}).start();}break;}return true;}class ConnectBroadcastReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {switch (intent.getAction().toString()){case "com.app.bhk.connected":Toast.makeText(MainActivity.this,"連接上了",Toast.LENGTH_SHORT).show();new Thread(new Runnable() {@Overridepublic void run() {mClient=FtpUtil.getmClient();adapter1.setFtpClient(mClient);}}).start();break;}}} } 其中:NavigationView是右滑的導航欄。需要提醒的一點是所有的關于ftp服務器的操作都必須要在子線程內進行否則就會報錯的,畢竟這是網絡操作,為了避免主線程阻塞是需要在子線程操作的。這里我寫了廣播接受器,用來接收登錄成功的廣播以便獲取FTPClient對象。關于退回上一級目錄的功能我是用重寫手機的返回鍵實現的,具體看onBackPressed()這個方法。?

? 下面看看兩個適配器類:?

public class FtpFileAdapter extends RecyclerView.Adapter<FtpFileAdapter.ViewHolder> {private List<FTPFile> FtpFilelist;private StringBuffer CurrentFile=new StringBuffer();private FTPClient ftpClient;private MainActivity mainActivity;public void LastFile(){//切換到父目錄new Thread(new Runnable() {@Overridepublic void run() {try {int i= CurrentFile.toString().lastIndexOf('/');if(i>=0) {CurrentFile.delete(i, CurrentFile.length());boolean f=FtpUtil.getmClient().changeToParentDirectory();Log.d("test1234"," "+f+" "+CurrentFile);}FTPFile files[]=FtpUtil.getmClient().listFiles();FtpFilelist.clear();FtpFilelist.addAll(Arrays.asList(files));mainActivity.runOnUiThread(new Runnable() {@Overridepublic void run() {notifyDataSetChanged();return;}});}catch (Exception e){e.printStackTrace();}}}).start();}public FTPClient getFtpClient() {return ftpClient;}public void setFtpClient(FTPClient ftpClient) {this.ftpClient = ftpClient;}static class ViewHolder extends RecyclerView.ViewHolder{private ImageView File_imageview;private TextView File_textView;public ViewHolder(View v){super(v);File_imageview=(ImageView) v.findViewById(R.id.file_image);File_textView=(TextView) v.findViewById(R.id.file_name);}}public FtpFileAdapter(List<FTPFile> list,MainActivity activity){FtpFilelist=list;this.mainActivity=activity;}@Overridepublic int getItemCount() {return FtpFilelist.size();}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.file_item1,parent,false);final ViewHolder viewHolder=new ViewHolder(view);view.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {final FTPFile file=FtpFilelist.get(viewHolder.getAdapterPosition());if(file.isDirectory()) {new Thread(new Runnable() {@Overridepublic void run() {try {CurrentFile.append("/"+file.getName());boolean f= FtpUtil.getmClient().changeWorkingDirectory(CurrentFile.toString()); //更新文件列表FTPFile files[] = FtpUtil.getmClient().listFiles();FtpFilelist.clear();FtpFilelist.addAll(Arrays.asList(files));Log.d("test123", "11212"+f+" "+CurrentFile);mainActivity.runOnUiThread(new Runnable() {@Overridepublic void run() {notifyDataSetChanged();return;}});}catch (Exception e){e.printStackTrace();}}}).start();Log.d("ftpfile1","good");// Toast.makeText(getContext(),"hello",Toast.LENGTH_SHORT).show();}}});view.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {//創建彈出式菜單對象(最低版本11)PopupMenu popup = new PopupMenu(getContext(), v);//第二個參數是綁定的那個view//獲取菜單填充器final MenuInflater inflater = popup.getMenuInflater();//填充菜單inflater.inflate(R.menu.operation_ftp, popup.getMenu());//綁定菜單項的點擊事件popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {@Overridepublic boolean onMenuItemClick(MenuItem item) {FTPFile file=FtpFilelist.get(viewHolder.getAdapterPosition());switch (item.getItemId()){case R.id.copy_operate:FtpUtil.setFtpFile(file);break;}//notifyDataSetChanged();return true;}});popup.show();//顯示(這一行代碼不要忘記了)return true;}});return viewHolder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {FTPFile ftpFile=FtpFilelist.get(position);holder.File_textView.setText(ftpFile.getName());if(ftpFile.isDirectory()){holder.File_imageview.setImageDrawable(getContext().getDrawable(R.drawable.directory));}else{holder.File_imageview.setImageDrawable(getContext().getDrawable(R.drawable.file));}}}

?

public class FileAdapter extends RecyclerView.Adapter<FileAdapter.ViewHolder> {private List<File> arraylist;public File getCurrentFile() {return CurrentFile;}private File CurrentFile=Environment.getExternalStorageDirectory();//當前的文件夾static class ViewHolder extends RecyclerView.ViewHolder{ImageView imageView;TextView textView;public ViewHolder(View v){super(v);imageView=(ImageView)v.findViewById(R.id.file_image);textView=(TextView)v.findViewById(R.id.file_name);}}public FileAdapter(List<File> arraylist){this.arraylist=arraylist;}@Overridepublic FileAdapter.ViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.file_item,parent,false);final ViewHolder holder =new ViewHolder(view);view.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {File file=arraylist.get(holder.getAdapterPosition());if(file.isDirectory()) {CurrentFile=file;arraylist.clear();arraylist.addAll(Arrays.asList(file.listFiles()));notifyDataSetChanged();}}});view.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View v) {//創建彈出式菜單對象(最低版本11)PopupMenu popup = new PopupMenu(getContext(), v);//第二個參數是綁定的那個view//獲取菜單填充器final MenuInflater inflater = popup.getMenuInflater();//填充菜單inflater.inflate(R.menu.operation, popup.getMenu());//綁定菜單項的點擊事件popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {@Overridepublic boolean onMenuItemClick(MenuItem item) {File file=arraylist.get(holder.getAdapterPosition());switch (item.getItemId()){case R.id.copy_operate:FileUtil.setSaveFile(file);break;case R.id.delete_operate:arraylist.remove(file);file.delete();break;}notifyDataSetChanged();return true;}});popup.show();//顯示(這一行代碼不要忘記了)return true;}});return holder;}@Overridepublic void onBindViewHolder(@NonNull FileAdapter.ViewHolder holder, int position) {File file=arraylist.get(position);holder.textView.setText(file.getName());if(file.isFile()){holder.imageView.setImageDrawable(getContext().getDrawable(R.drawable.file));}else{holder.imageView.setImageDrawable(getContext().getDrawable(R.drawable.directory));}}@Overridepublic int getItemCount() {return arraylist.size();}public void LastFile(){if (!CurrentFile.equals(Environment.getExternalStorageDirectory())){CurrentFile=CurrentFile.getParentFile();arraylist.clear();arraylist.addAll(Arrays.asList(CurrentFile.listFiles()));notifyDataSetChanged();}} }

?

?在這兩個適配器類里我都定義了一個CurrentFile用來保存當前目錄地址,方便回到上一個目錄,以及下載文件和上傳文件的時的操作。

本地文件適配器主要編寫了長按復制以及刪除的功能。復制功能大概實現邏輯是,先把想要復制的文件存放到FileUtil中然后到了想要粘貼的目錄后再進行IO操作(我的粘貼功能寫在menu的觸發事件里),如果是要復制到服務器上就必須使用相關FtpUtil的上傳方法了,這里就需要在主活動里通過對當前recyclerview的適配器進行判斷以便判斷是復制到服務器還是本地以決定作何操作。刪除就很簡單了不贅述。

服務器文件適配器主要編寫了長按復制功能,這里主要是復制到本地文件。和本地差不多不過是先保存到FtpUtil然后切換到本地文件到想要的目錄進行調用FTPUtil的方法就可以了。

源碼有人需要可以評論。看情況更新文章。

項目地址:https://github.com/DhyanaCoder/FileFtp

給本文章或者github項目點個贊!(*^__^*) 嘻嘻……

總結

以上是生活随笔為你收集整理的安卓端简易FTP客户端APP开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲欧美国产精品 | 日韩在线无 | 中文字幕乱码在线播放 | 99福利影院 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产精品一区二区久久精品爱涩 | 色九色| 丁香六月色 | 中文字幕在线观看第三页 | av在线电影播放 | 国产午夜三级一二三区 | 热久久99这里有精品 | 免费看网站在线 | 亚洲欧美日韩精品久久久 | 免费观看视频的网站 | 日韩视频一区二区 | 91精品国产自产91精品 | 成人97人人超碰人人99 | 国产一二区免费视频 | 久久久久久久久久久久久9999 | 视频国产在线 | 国产精品激情偷乱一区二区∴ | 久久视频免费观看 | 成片视频在线观看 | 人人干在线 | 五月天久久综合网 | 久久手机免费视频 | 久久福利在线 | 97色在线| 国产三级视频在线 | 亚洲一级黄色av | 狠狠色伊人亚洲综合网站野外 | 久久福利电影 | 中文字幕一区三区 | 婷婷视频导航 | 99热最新精品 | 亚洲香蕉在线观看 | 四虎成人在线 | 久久狠狠干 | 日韩精品字幕 | 一区二区精品久久 | 亚洲综合最新在线 | 免费观看www小视频的软件 | 成人av资源站 | 欧美激情亚洲综合 | 成年人免费看片网站 | 中文字幕免费久久 | 五月开心六月婷婷 | 在线精品观看国产 | 久久久高清视频 | 亚洲永久av| 五月婷婷六月丁香激情 | 亚洲综合一区二区精品导航 | 毛片美女网站 | 粉嫩av一区二区三区四区在线观看 | 久久久久亚洲最大xxxx | 欧美日韩另类在线观看 | 91激情| 亚洲精品免费在线视频 | 婷婷久久精品 | 久久在线影院 | 久久草在线视频国产 | 人人看看人人 | 国产人成在线视频 | 国产又粗又猛又爽又黄的视频先 | 国产亚洲精品日韩在线tv黄 | 欧美专区日韩专区 | 久久久免费播放 | 超碰激情在线 | 99精品国产免费久久 | 亚洲欧美国产精品va在线观看 | 亚洲日日夜夜 | 日韩理论电影在线观看 | 在线观看黄网站 | 夜夜高潮夜夜爽国产伦精品 | 欧美日韩视频在线一区 | 欧美午夜性生活 | 欧美日韩在线播放一区 | 国产精品综合av一区二区国产馆 | 国产这里只有精品 | 色999视频 | 伊人国产在线播放 | 五月天色综合 | 国产黄色在线 | 亚洲资源在线观看 | 日本在线观看一区二区三区 | 欧美精品免费在线观看 | 天天做天天干 | 狠狠狠狠狠狠天天爱 | 日本不卡一区二区三区在线观看 | 激情小说 五月 | 夜夜高潮夜夜爽国产伦精品 | 久久深夜福利免费观看 | 精品国产诱惑 | 国产高清在线看 | 97日日碰人人模人人澡分享吧 | 黄色在线观看免费 | 亚洲在线视频观看 | 日日日天天天 | 日韩色中色 | 日韩毛片在线免费观看 | 国产区精品在线观看 | 国内外成人在线视频 | 一区二区三区在线看 | 六月婷操 | 午夜精品视频一区二区三区在线看 | 国产色拍拍拍拍在线精品 | 欧亚日韩精品一区二区在线 | 日韩三级视频在线观看 | 成人免费观看大片 | 久人人| 亚洲欧洲成人精品av97 | 国产欧美久久久精品影院 | 国产精品久久9 | 福利网在线 | 国内丰满少妇猛烈精品播 | 亚洲欧美国产精品va在线观看 | 99在线免费观看视频 | 波多野结衣一区二区三区中文字幕 | 成人激情开心网 | 久草精品视频 | 中文在线www | 91桃色免费观看 | 国产精品亚洲a | 亚洲精品在线视频网站 | 婷婷色在线播放 | 国产手机免费视频 | 中文字幕在线一二 | 日本中文字幕电影在线免费观看 | 中文字幕免费高 | 亚洲精品乱码白浆高清久久久久久 | 色99导航 | 人人超碰在线 | 国产99久久久久 | 美女久久 | 免费三级大片 | 免费网站看v片在线a | 伊人国产在线观看 | 久久精品99国产精品 | 国产精品一区二区久久精品 | 97超碰超碰久久福利超碰 | 亚洲人天堂| 少妇高潮流白浆在线观看 | 中文字幕4 | 亚洲一区二区天堂 | 狠狠撸电影 | 美女视频黄是免费的 | 中文字幕一区二区三 | 99视频一区 | 日韩高清不卡一区二区三区 | 中文字幕中文字幕 | 精品一区二区久久久久久久网站 | 久操免费视频 | 在线免费黄 | 精品欧美一区二区在线观看 | 日日干激情五月 | 欧美日韩视频精品 | 中文字幕精品一区二区三区电影 | 一区二区三区四区影院 | 黄色免费电影网站 | 99亚洲精品 | 欧美午夜久久 | av电影一区二区 | 精品亚洲va在线va天堂资源站 | 天天操夜夜拍 | 在线天堂v | 人人舔人人 | 欧美日韩一区二区三区不卡 | 日日夜夜天天久久 | 久亚洲 | 日韩视频免费 | 午夜精品久久久久久中宇69 | 亚洲免费视频观看 | 97视频在线看 | 99精品色 | 97超碰人人澡 | 天天干天天操天天干 | 夜夜骑日日 | 91成人精品观看 | 国产尤物一区二区三区 | 欧美精品久久久久久久久免 | 在线看片中文字幕 | 色的网站在线观看 | 日本最大色倩网站www | 国产蜜臀av | 久热爱 | 国产精品激情在线观看 | 最近免费中文字幕 | 欧洲亚洲国产视频 | 激情五月婷婷综合 | 天天色天天射天天综合网 | 人人视频网站 | 亚洲aⅴ一区二区三区 | 亚洲色视频 | 99中文字幕视频 | 九九九热 | 日本成人中文字幕在线观看 | 欧美激情综合网 | 国产特级毛片aaaaaa毛片 | 国产精品久久久久久久久久久不卡 | 中文字幕亚洲综合久久五月天色无吗'' | 久久久国产精品麻豆 | 久久精品毛片基地 | 四虎海外影库www4hu | 国产99黄 | 午夜18视频在线观看 | 欧美色就是色 | 五月开心网 | 手机成人免费视频 | 精品久久久久久电影 | 久草在线视频中文 | 成人av资源在线 | 亚洲精品在线资源 | 日韩爱爱片| 婷婷色婷婷| 亚洲精品免费观看视频 | 97国产电影 | 新版资源中文在线观看 | 在线国产激情视频 | 日韩精品免费一线在线观看 | 麻豆va一区二区三区久久浪 | 久草精品视频在线看网站免费 | 天天色天天射天天干 | 欧美日韩亚洲在线 | 久久久久国产免费免费 | 色综合久久精品 | 亚洲国产剧情av | 操久| 久操视频在线观看 | 免费亚洲视频 | 久久精品女人毛片国产 | 欧美作爱视频 | 在线中文字幕电影 | 亚洲一区视频在线播放 | 成全在线视频免费观看 | 欧美一区二区三区不卡 | 免费黄在线观看 | 国产xx视频| a在线观看视频 | 日日爽天天爽 | 精品亚洲视频在线 | 成人免费观看电影 | 91成人在线观看高潮 | 久久久网页 | 日韩精品一区二区电影 | 天天爽人人爽夜夜爽 | 97色国产 | 97超碰免费| 激情婷婷在线 | 亚洲精品播放 | 免费在线看v | 免费看黄在线看 | 中文字幕第 | 天天爱天天草 | 18久久久| 国产在线观看91 | 天天综合网天天 | 欧美黄色高清 | 91久久国产自产拍夜夜嗨 | 色五月色开心色婷婷色丁香 | 人人澡人人草 | 美女网站视频免费黄 | 欧美激情精品久久久久久免费 | 999视频在线播放 | 伊人狠狠| 欧美日韩p片 | 日韩av网页| 欧美日韩三区二区 | 91中文视频| 91免费在线视频 | 99视频在线观看免费 | 国产在线黄色 | avove黑丝| 视频91在线| 久久免费黄色大片 | 精品国产欧美 | 99精品偷拍视频一区二区三区 | 国产精品嫩草影院99网站 | 韩国精品在线观看 | 欧美精选一区二区三区 | 免费一级片在线观看 | 夜夜天天干| 日韩在线影视 | 91av在线国产 | 欧美色综合 | 99久久精品国产网站 | 免费在线黄色av | 欧美男同视频网站 | 国产91勾搭技师精品 | 毛片永久新网址首页 | 久久久国产精品一区二区中文 | 久久久久久久久久久久久久免费看 | 91精品在线免费视频 | 国产精品久久99精品毛片三a | 免费在线观看黄网站 | 国产精品99页| 国产不卡一区二区视频 | 在线观看国产www | 99自拍视频在线观看 | 麻豆视频在线看 | 久久免费国产视频 | 久久久www成人免费精品 | 娇妻呻吟一区二区三区 | av中文字幕在线电影 | 国产手机在线观看视频 | 在线免费观看黄网站 | 久久69av| 欧美性黑人 | 国产一卡久久电影永久 | 国产亚洲午夜高清国产拍精品 | 久久久久久免费视频 | 激情欧美一区二区三区免费看 | 96久久欧美麻豆网站 | 成人av在线亚洲 | 国产中文伊人 | 日本三级大片 | 国产精品理论片在线播放 | 麻豆精品视频在线 | 在线成人免费电影 | www黄色av| 伊人五月天综合 | 免费a现在观看 | 夜色资源站国产www在线视频 | 精品产品国产在线不卡 | 五月天婷婷在线播放 | 国产精品久久久999 国产91九色视频 | 在线一区av | 日韩在线不卡视频 | 999亚洲国产996395 | 特级黄色片免费看 | av亚洲产国偷v产偷v自拍小说 | 992tv人人网tv亚洲精品 | 特级a毛片 | 正在播放国产一区二区 | 伊人亚洲综合网 | 国产成人免费精品 | 国产高清视频在线 | 成人影音av| 成人四虎 | 美女视频黄免费网站 | 婷婷色网视频在线播放 | 人人天天夜夜 | 久久中文欧美 | 国产剧情一区 | 国产成人精品免高潮在线观看 | 精品一区 精品二区 | 国产成人精品一区二区三区网站观看 | 国产中文字幕视频在线 | 欧亚久久 | 成人在线视| 一区二区三区在线观看中文字幕 | 国产人成一区二区三区影院 | 久久久久久片 | 青青射| 美女视频久久黄 | 久草综合视频 | 在线免费观看黄网站 | 国产无套一区二区三区久久 | 中文字幕韩在线第一页 | 91精品区 | 亚洲一级黄色大片 | 人人草人人草 | 99久久久国产精品免费99 | www91在线| 亚洲 欧美变态 另类 综合 | 99综合久久 | 在线观看国产中文字幕 | 国产人成看黄久久久久久久久 | 免费中文字幕在线观看 | 又黄又刺激的视频 | 国语精品免费视频 | a√天堂中文在线 | 久久毛片高清国产 | 人人擦| 美国人与动物xxxx | 九九热在线播放 | 99精品福利视频 | 999久久久精品视频 日韩高清www | 国产91亚洲 | 亚洲精品免费观看视频 | 狠狠综合久久 | 日韩精品一二三 | 天天干人人干 | 成 人 黄 色视频免费播放 | 四虎成人精品永久免费av | 最近久乱中文字幕 | 波多野结衣视频一区二区三区 | 日日干天天射 | japanesexxxhd奶水 91在线精品一区二区 | 在线看国产视频 | 天堂久色| 久久久久久99精品 | 天天干,夜夜操 | 日韩欧美一区二区不卡 | 开心色停停 | 国产理论一区二区三区 | 黄色一级大片免费看 | 高清一区二区 | 国产中文字幕网 | 最新av电影网站 | 国产精品自在欧美一区 | 久久小视频 | 国产精品一区二区果冻传媒 | 人人射人人澡 | 成人在线超碰 | 极品美女被弄高潮视频网站 | 91精品国产电影 | 国产亚洲婷婷 | 一级成人免费视频 | 性色av免费在线观看 | 韩国精品福利一区二区三区 | 国产精品视频永久免费播放 | 日韩欧美在线免费 | 国产精品系列在线播放 | 婷婷九月丁香 | 操天天操 | 中文字幕色婷婷在线视频 | 日韩欧美在线观看一区二区 | 亚洲国产精品久久 | 久久久久久久国产精品影院 | 亚洲视频电影在线 | 日韩免费在线视频 | 在线电影日韩 | bbbb操bbbb | 日韩丝袜在线观看 | 亚洲国产欧美在线看片xxoo | 韩日电影在线免费看 | 日日夜夜精品免费 | 久久久久国产精品一区二区 | 激情小说 五月 | 超碰在线98 | 国产一区二区三区视频在线 | 国产精品美女免费 | 天天操比| 国产h在线播放 | 麻花传媒mv免费观看 | 久久精品三级 | 亚洲最大成人免费网站 | 中文国产字幕在线观看 | 中文字幕在线观看第三页 | 天天躁日日躁狠狠躁av中文 | 日韩乱码在线 | 96视频免费在线观看 | 日本丰满少妇免费一区 | 国产91丝袜在线播放动漫 | 日本中文一级片 | 欧美另类交人妖 | 成人黄色毛片 | av 一区二区三区四区 | 91视频免费网站 | 97操操操 | 精品国产美女在线 | 色婷婷激情电影 | 国内丰满少妇猛烈精品播放 | 国产一区私人高清影院 | 美女网站视频一区 | 国产精品18久久久久久不卡孕妇 | 伊人伊成久久人综合网小说 | 婷婷午夜| 一区视频在线 | 狠日日| 精品亚洲成人 | 精品一区二区精品 | 97在线公开视频 | 国产一区二区在线观看视频 | 久久黄色片 | 成年在线观看 | 丁香花在线视频观看免费 | 日韩成人精品一区二区三区 | 亚洲精品午夜久久久久久久 | 日韩欧美视频免费看 | 91精品免费在线视频 | 久久一区精品 | 久久公开视频 | 国产在线观看你懂的 | 欧美一级爽 | 婷婷丁香色| 亚洲精品一区二区三区新线路 | 97在线观看免费观看 | 日韩综合在线观看 | 精品国产一区二区三区久久久蜜月 | 九九热中文字幕 | 九色视频网站 | 黄色软件在线观看免费 | 黄色一级大片在线观看 | 色天天综合久久久久综合片 | 亚洲高清视频一区二区三区 | 人人干人人艹 | 久久国产视频网 | 中文字幕乱码亚洲精品一区 | 日韩电影一区二区在线观看 | 97视频久久久| 亚洲一区二区黄色 | 2022国产精品视频 | 国内精品视频免费 | 国产中文视 | 深夜成人av | www.天天干.com | 久久久av电影 | 国产精品 国内视频 | 久久久久国产精品免费 | 精品亚洲一区二区三区 | 国产精品青草综合久久久久99 | 国产精品 9999 | 日本最大色倩网站www | 91欧美国产| 91丨九色丨蝌蚪丨对白 | 国产成人精品一区二 | 亚洲视频一级 | 亚洲最新av在线网址 | 久久精品久久久久 | 国产精品k频道 | 91在线观看欧美日韩 | 涩涩爱夜夜爱 | 九九三级毛片 | 中文字幕免费看 | 日韩在线高清视频 | 欧美成人中文字幕 | 日韩精品一区二区三区在线视频 | 三级动图| 在线免费av电影 | 99精品观看 | 国产精品岛国久久久久久久久红粉 | 偷拍福利视频一区二区三区 | 美女精品久久久 | 国内精品久久影院 | 久久影视一区 | 视色网站 | 深爱五月网 | 亚洲国产精品500在线观看 | 精品久久久久一区二区国产 | 久久综合免费视频 | av观看久久久 | 人人舔人人插 | 日韩中文字幕国产精品 | 日韩免费在线播放 | 久久久久免费视频 | 亚洲精品一区中文字幕乱码 | 五月婷婷播播 | 99久热在线精品视频 | 国产精品中文字幕av | 久久久www免费电影网 | 成人91在线| 黄色成品视频 | 日本aaa在线观看 | 最新色视频 | 午夜三级大片 | 五月婷亚洲 | 在线性视频日韩欧美 | 美女网站在线免费观看 | 亚洲mv大片欧洲mv大片免费 | 成人app在线播放 | 日韩欧美成人网 | 日韩在线三级 | 午夜久久电影网 | 免费视频久久 | 欧美网址在线观看 | 国产麻豆视频 | 精品久久久久久国产 | 国产亚洲精品v | 精品国产免费观看 | 国产精品一区二区久久 | 一级性视频 | 在线观看日本韩国电影 | av解说在线 | 国产精品视频久久 | 99精品国产在热久久下载 | 天堂在线免费视频 | 久久公开视频 | 日韩一二三区不卡 | 免费麻豆 | 国产护士av | 久久久99精品免费观看 | 国内精品久久久久影院日本资源 | 在线免费av播放 | www毛片com| 波多野结衣久久资源 | 久久精品欧美视频 | 国产日韩一区在线 | 欧美日韩国产伦理 | 免费午夜av | 五月开心激情 | 最新中文字幕 | 久久综合久久综合九色 | 色偷偷88888欧美精品久久久 | 99色在线 | 亚洲国产精品一区二区久久hs | 色999精品| 亚洲男男gⅴgay双龙 | 久久久精品国产免费观看同学 | 黄色精品一区二区 | 国产视频日韩 | 国产精品99久久久精品免费观看 | 在线视频你懂得 | 国产精品美女久久久久久久久久久 | 98涩涩国产露脸精品国产网 | 91视频网址入口 | 在线a视频免费观看 | 亚洲女欲精品久久久久久久18 | 黄色免费看片网站 | 亚洲永久精品在线观看 | 天堂麻豆 | 在线观看你懂的网站 | 国产成人精品女人久久久 | 国产精品网在线观看 | 精品国产乱码一区二区三区在线 | 久草在线这里只有精品 | 黄a网站| 欧美一区免费在线观看 | 婷婷亚洲激情 | 麻豆一区二区三区视频 | 五月激情天 | 999久久久久久 | 草久久影院 | 亚洲精品综合一二三区在线观看 | 国产日产亚洲精华av | 69视频在线| 久久99免费 | 天堂中文在线视频 | 国产真实精品久久二三区 | 国产精品久久久亚洲 | 中文字幕网址 | 久久久 精品 | 午夜精品电影 | 丁香色天天 | 亚洲欧美在线综合 | 国产黄色av影视 | 国产青青青 | 中文字幕av免费在线观看 | 婷婷色在线 | 欧美一级片免费观看 | 成人免费毛片aaaaaa片 | 久久久久久久久久免费视频 | 色综合中文综合网 | 日本久久影视 | 中文字幕色站 | 久久不卡电影 | av线上看 | 亚洲黄色小说网址 | www.五月天婷婷.com | 日韩精品一卡 | 中文字幕在线人 | 91桃色免费观看 | 日本久久久久久 | 免费看成人av | 天天色天天干天天 | 一色屋精品视频在线观看 | 玖玖在线视频观看 | a天堂在线看 | 日本精品xxxx | 成人av网站在线观看 | 九九免费观看视频 | 精品国产精品国产偷麻豆 | 一级成人在线 | 91超在线 | 91久久人澡人人添人人爽欧美 | 99国内精品久久久久久久 | 日日夜夜精品免费观看 | 色偷偷97 | 又黄又刺激又爽的视频 | 五月婷婷在线视频 | 综合激情久久 | 最新日韩视频 | 香蕉视频在线看 | 中文国产在线观看 | 99久久精品免费一区 | 成人av直播| 欧美一级久久久久 | 九九综合久久 | 亚洲第一色| 中文字幕丝袜美腿 | www.777奇米 | 日本久久91 | 久草影视在线观看 | 久久中国精品 | 日韩精品久久中文字幕 | 天天天天天天天操 | 国产精品一区免费在线观看 | 91热这里只有精品 | 久久你懂的 | www国产精品com | 亚洲精品在线网站 | 亚州国产精品视频 | 伊人婷婷在线 | 在线天堂8√ | 久久国产影院 | 黄色www免费 | 国产精品一级在线 | 久久午夜国产精品 | 国产最顶级的黄色片在线免费观看 | 欧美激情综合五月色丁香 | 国产精品久久在线 | 国产成人一区二区三区在线观看 | 成人小视频免费在线观看 | 日本丶国产丶欧美色综合 | 97国产在线 | 亚洲免费av片 | 女人高潮特级毛片 | 久久久电影网站 | 国产最新在线 | 亚洲精品中文在线资源 | 国产成人一区二区三区影院在线 | 激情欧美一区二区三区免费看 | 成人国产综合 | 一级α片| 999久久国产精品免费观看网站 | 免费看一级特黄a大片 | 国产中文字幕在线播放 | 中文字幕在线免费观看 | 日韩视频在线观看视频 | 久久国产欧美日韩 | 亚洲精品视频免费观看 | 国产日韩精品在线观看 | 麻花天美星空视频 | 日韩成人xxxx | 国产精品欧美 | 91色在线观看 | 青青网视频 | 99久久99久久免费精品蜜臀 | 中文字幕一区二 | 在线三级av | 国产 字幕 制服 中文 在线 | 狠狠狠狠狠狠天天爱 | 999视频在线播放 | 五月天亚洲综合 | 97超碰国产精品女人人人爽 | 免费a视频在线 | 国产成人三级三级三级97 | 九九免费在线视频 | 日韩免费视频一区二区 | 欧美成人久久 | 91免费观看视频在线 | 成人福利在线 | 国产精品1000| 91麻豆精品国产91久久久久久久久 | 天天操天天射天天舔 | 一区中文字幕电影 | 国产一区精品在线 | 美女福利视频在线 | 五月婷亚洲 | 精品久久一二三区 | 日韩特黄一级欧美毛片特黄 | 精品999在线观看 | 91天天视频 | 尤物一区二区三区 | 麻豆传媒视频在线免费观看 | 国产成人a亚洲精品 | 日韩视频免费播放 | 午夜精品一区二区三区免费视频 | 精品视频久久 | 亚洲综合欧美激情 | 日本久久精| 久久字幕 | 久久久久久高潮国产精品视 | 久久国产精品免费视频 | 激情视频一区 | 日本激情视频中文字幕 | 日韩在线观看免费 | 免费电影播放 | 久久免费国产视频 | 免费中文字幕 | 午夜精品久久久久久久99水蜜桃 | 成人a级黄色片 | 国产综合在线观看视频 | 亚洲视频h| 蜜臀av夜夜澡人人爽人人 | 91热在线 | 国产精品综合久久久久 | 奇米影视四色8888 | av电影久久 | 欧美乱大交| 色美女在线 | 精品中文字幕在线观看 | 激情在线免费视频 | 激情视频免费在线 | av黄色免费网站 | 99视频精品免费观看, | a黄色片 | 激情网婷婷 | 亚洲国产三级 | 日韩在线观看视频在线 | 中文字幕免费观看 | 国产黄a三级三级三级三级三级 | 国产成人久久久77777 | 亚洲国产精品久久久久 | 成人影视免费看 | 91成人在线视频观看 | 91pony九色丨交换 | 在线看国产日韩 | 91av免费观看 | 国产在线无 | 国产精彩视频一区 | 成人av资源 | 亚洲做受高潮欧美裸体 | 久久精品电影院 | 欧美一级特黄高清视频 | 欧美精品久久久久a | 久久久www成人免费精品 | 国产精品原创 | 狠狠干夜夜操天天爽 | 国产在线更新 | 久久久久久久99精品免费观看 | 久久久久视 | 久久国内精品 | www.超碰97.com| 亚欧日韩成人h片 | 欧美少妇bbwhd | 特级毛片在线免费观看 | 亚洲国产中文字幕在线视频综合 | www.五月天婷婷 | 国产视频精品免费 | 激情文学综合丁香 | 国产精品毛片一区二区三区 | 欧美精品一区二区在线播放 | 国产一在线精品一区在线观看 | 国产高清福利在线 | 国产高清区| 成人黄性视频 | 麻豆视频在线免费观看 | 热热热热热色 | 久久99国产精品视频 | 一区二区三区在线影院 | 中文字幕永久在线 | 一级片色播影院 | 欧美另类视频 | 亚洲视频aaa | 黄a在线看 | 色中色资源站 | 黄色99视频 | 国产最新在线视频 | 全久久久久久久久久久电影 | 丁香视频| 国产成人久久精品亚洲 | 日韩在线中文字幕 | 国内小视频在线观看 | 久久免费精品 | 美女国产 | 欧美在线1区 | 色www精品视频在线观看 | 亚洲国产精品激情在线观看 | 国产h在线观看 | 欧美aa一级 | 91精品啪在线观看国产 | 96亚洲精品久久久蜜桃 | 成人午夜av电影 | a级国产片 | 色资源二区在线视频 | 亚洲精品视频免费观看 | 国产精品色婷婷视频 | 国产123区在线观看 国产精品麻豆91 | 韩日精品在线 | 99久久精品免费看国产一区二区三区 | 91在线www| 在线a视频免费观看 | 高清免费在线视频 | 欧美日韩在线观看不卡 | 欧美大香线蕉线伊人久久 | 久久久精品国产一区二区电影四季 | 欧美国产不卡 | 国产成人久久精品一区二区三区 | 九九av| 又粗又长又大又爽又黄少妇毛片 | 久久狠狠干 | 日韩在线观看免费 | 天天天天射 | 一区二区三区在线观看免费视频 | av中文字幕在线电影 | 免费看一级黄色大全 | 人人草网站 | 久久久久人人 | a黄色片| 美女av电影 | 日韩中文字幕在线不卡 | 久久久久人人 | 亚洲国产精品成人综合 | 久久精久久精 | 五月婷网站 | 久草精品视频在线播放 | 国产精品美女视频网站 | 日本99久久 | 成人在线视频网 | 欧美一级特黄高清视频 | 免费精品久久久 | 日韩欧美视频 | 精品一区二区电影 | 日韩高清www | 国产精品美女视频网站 | 美女网站色免费 | 久草电影网 | 久久另类小说 | 色婷婷综合久久久久 | 最近日本韩国中文字幕 | 国产一区二区高清视频 | 四川妇女搡bbbb搡bbbb搡 | 在线观看中文字幕视频 | 精品久久久久久综合日本 | www日韩视频| 三级av黄色 | 国产在线精品一区 | 久久精品99国产精品亚洲最刺激 | 黄色成人91 | 天天射天天干天天爽 | 久久免费的视频 | 久久久香蕉视频 | 大型av综合网站 | av片中文| 欧美日韩一区三区 | 成人毛片一区 | 狠狠干夜夜 | 欧美日韩综合在线观看 | 成年人黄色免费网站 | 天天操天天舔天天爽 | 日韩综合一区二区三区 | 欧美黑吊大战白妞欧美 | 日本二区三区在线 | 一区二区三区四区五区在线 | 亚洲精品啊啊啊 | 国产精品免费在线 | 婷婷丁香自拍 | 久久精品一区二区三区四区 | 亚洲一级片| 日韩一区精品 | 成人中文字幕+乱码+中文字幕 | 国产精品久久久久久久久久久久午 | 99视频国产精品免费观看 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 六月婷婷网 | 久久免费视频在线观看6 | 干干干操操操 | 玖玖在线看| 日日夜夜91 | 青青色影院 | 精品福利视频在线 | 九九在线国产视频 | 1024手机基地在线观看 | 91在线精品一区二区 | 久久精品香蕉视频 | 热久久国产精品 | 毛片激情永久免费 | 日本中文字幕高清 | 伊人天天干| 国产在线传媒 | 99热这里有| japanesexxxhd奶水| 国产精品入口传媒 | 亚洲一区二区三区四区在线视频 | 亚洲视频www | 97视频免费播放 | 美女黄频免费 | 中文国产在线观看 | 免费看一级黄色大全 | 国产色综合天天综合网 | 69精品人人人人 | 996久久国产精品线观看 | 国外av在线 | 久久精品观看 | 蜜臀av免费一区二区三区 | 天天操夜夜做 | 性色视频在线 | 日韩精品一区二区三区高清免费 | 久久精品一二三 | 人人爽人人做 | 成人一级影视 | 欧美日韩在线观看一区二区 | 成人午夜网址 | 天天草天天草 | 久久精品欧美一区二区三区麻豆 | 欧美精品二 | 日韩三级免费 | 国产在线国偷精品产拍 | 成人 国产 在线 | 日本久久电影网 | 91久久精品一区二区三区 | 久久免费a | 欧美日韩精品网站 | 国产精品美女久久久久aⅴ 干干夜夜 | 激情久久一区二区三区 | 天天综合亚洲 | 正在播放五月婷婷狠狠干 | 在线观看爱爱视频 | 欧美激情在线看 | 日韩av电影手机在线观看 | 日韩免费一级电影 | 国产91精品一区二区麻豆网站 | 国产一区福利在线 | 97在线观看 | 国产婷婷 | 精品国产乱码久久久久久1区二区 | 日韩精品一区二区在线观看 | 国产黄色观看 | 日韩欧美在线免费 | 国产精品刺激对白麻豆99 | 中国一级片在线 | 精品一区二区在线观看 | 中文字幕免费高 | 黄污网| 最新影院 | 国产精品九九视频 |