package com.example.wbdream.zigvine;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast; import com.example.wbdream.zigvine.friends.FriendsData;
import com.example.wbdream.zigvine.friends.FriendsRecyclerAdapter;
import com.example.wbdream.zigvine.https.UpLoadFile;
import com.leon.lfilepickerlibrary.LFilePicker;
import com.leon.lfilepickerlibrary.utils.Constant; import org.json.JSONException;
import org.json.JSONObject; import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID; import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager; public class FriendsList extends Fragment {
private List<JSONObject> mData = null;
private FriendsData sc = null;
private SQLiteDatabase db = null;
private FriendsRecyclerAdapter friendsRecyclerAdapter = null;
private static final int FILE_CODE = 0;
private static final String TAG = "FriendsList";
private String upLoadPath = null;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Log.e(TAG, "onCreateView: -----finish????-------" );
setHasOptionsMenu(true);
final View view = inflater.inflate(R.layout.friends_list,container,false);
return view;
} @Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); flushData();
Log.e(TAG, "onActivityCreated: +++++===================" ); // initData();
// RecyclerView friends_recycler = getActivity().findViewById(R.id.friends_recycler);
// LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
// friends_recycler.setLayoutManager(layoutManager);
// friendsRecyclerAdapter = new FriendsRecyclerAdapter(getContext(),mData);
// Log.e(TAG, "onActivityCreated: ====================="+friendsRecyclerAdapter.hashCode() );
// friendsRecyclerAdapter.setOnItemClickListener(new FriendsRecyclerAdapter.OnItemClickListener() {
// @Override
// public void onClick(int position) {
// Toast.makeText(getContext(),"点击事件"+position,Toast.LENGTH_SHORT).show();
//
// //初始化某人聊天数据
// int uid;
// try {
// uid = mData.get(position).getInt("uid");
//// Cursor cursor = db.rawQuery("select * from CHATRECORD where friends_id = "+ uid,null);
// Intent intent = new Intent(getContext(),ChatActivity.class);
// intent.putExtra("uid",uid);
// startActivity(intent);
//
// } catch (JSONException e) {
// e.printStackTrace();
// }
//
// }
// });
// friends_recycler.addItemDecoration(new DividerItemDecoration(getContext(),DividerItemDecoration.VERTICAL));
// friends_recycler.setAdapter(friendsRecyclerAdapter);
//
// //删除数据库
//// getContext().deleteDatabase("friend1.db");
//
// //删除表内容
//// db.execSQL("delete from friends");
// //插入数据
// ContentValues values = new ContentValues();
//
//// for ( int i=1;i<3;i++) {
//// Log.e(TAG, "onActivityCreated: ______" + "张三" + i);
//// values.put("friends_name","李四"+i);
//// db.insert("FRIENDS", null,values );
//// values.clear();
//// }
//
// Toast.makeText(getContext(),"初始化数据库",Toast.LENGTH_SHORT).show();
// Cursor cursor = db.rawQuery("select friends_name,friendId from FRIENDS",null);
// if (cursor.moveToFirst()){
// do {
// String name = cursor.getString(cursor.getColumnIndex("friends_name"));
// Log.e(TAG, "onActivityCreated: *******"+name +"----"+cursor.getInt(cursor.getColumnIndex("friendId")));
// }while(cursor.moveToNext());
//
// }
// cursor.close(); }
//添加menu
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.friend_list_menu,menu);
}
//menu点击事件 @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.add_friend:
//跳转页面
Toast.makeText(getContext(),"add friend",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getContext(),AddFriendActivity.class);
startActivity(intent); break;
}
return true;
} public void initData() {
//创建数据库
sc = new FriendsData(getContext(),"friend.db",null,4);
db = sc.getWritableDatabase();
mData = new ArrayList();
Cursor cursor = db.rawQuery("select * from FRIENDS",null);
if (cursor.moveToFirst()){
do {
JSONObject json=new JSONObject();
try {
// Log.e(TAG, "initData: _________" +cursor.getString(cursor.getColumnIndex("friends_name")));
json.put("user_name",cursor.getString(cursor.getColumnIndex("friends_name")));
json.put("message","你好呀!");
json.put("imageView","");
json.put("uid",cursor.getInt(cursor.getColumnIndex("friendId")));
} catch (JSONException e) {
e.printStackTrace();
}
mData.add(json);
// Log.e(TAG, "initData: ++++"+mData.size() );
}while(cursor.moveToNext()); }
cursor.close(); } @Override
public void onResume() {
Log.e(TAG, "onResume: --------resume------"+friendsRecyclerAdapter.hashCode() );
Log.e(TAG, "onResume: ==========="+mData.size() ); flushData();
super.onResume();
} //刷新数据
public void flushData(){
initData();
RecyclerView friends_recycler = getActivity().findViewById(R.id.friends_recycler);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
friends_recycler.setLayoutManager(layoutManager);
friendsRecyclerAdapter = new FriendsRecyclerAdapter(getContext(),mData);
Log.e(TAG, "onActivityCreated: ====================="+friendsRecyclerAdapter.hashCode() );
friendsRecyclerAdapter.setOnItemClickListener(new FriendsRecyclerAdapter.OnItemClickListener() {
int uid;
@Override
public void onClick(int position) {
Toast.makeText(getContext(),"点击事件"+position,Toast.LENGTH_SHORT).show();
Log.e(TAG, "onClick: ----点击事件----" );
//初始化某人聊天数据 try {
uid = mData.get(position).getInt("uid");
// Cursor cursor = db.rawQuery("select * from CHATRECORD where friends_id = "+ uid,null);
Intent intent = new Intent(getContext(),ChatActivity.class);
intent.putExtra("uid",uid);
// startActivity(intent);
Log.e(TAG, "onClick: ----https--" );
@SuppressLint("HandlerLeak") final Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 111:
Toast.makeText(getContext(),"jjjj"+msg.obj,Toast.LENGTH_SHORT).show();
break;
}
}
};
//文件传输
String sdpath;
// sdpath = "/mnt/";
// sdpath = getContext().getFilesDir();
Log.e(TAG, "onClick: ----————"+getContext().getFilesDir() );
Log.e(TAG, "onClick: ----————"+Environment.getExternalStorageDirectory() );
File file = new File(getContext().getFilesDir(),"a2.txt");
Log.e(TAG, "onClick: cahgnjan ==========="+!file.exists()+" "+getContext().getFilesDir() +getContext().getExternalCacheDir() );
try {
File fp=getContext().getFilesDir();
if (!fp.exists()){
fp.mkdirs();
Log.e(TAG, "onClick: --------创建文件夹" );
}
getContext().getFilesDir().mkdirs();
if (!file.exists()){
Log.e(TAG, "onClick: ———创建不成吗—————" );
file.createNewFile();
System.out.print("jsdhj");
Log.e(TAG, "onClick: --------创建了吗" );
}
FileInputStream inputStream = new FileInputStream(file);
inputStream.close();
FileOutputStream outputStream = new FileOutputStream(file);
outputStream.write("hello".getBytes());
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
} new LFilePicker().withSupportFragment(FriendsList.this)
.withRequestCode(Constant.ICON_STYLE_BLUE)
.withTitle("文件管理器")
// .withStartPath("/storage/emulated/0/Download")//指定初始显示路径
.withStartPath(getContext().getFilesDir().toString())//指定初始显示路径
.withNotFoundBooks("至少选择一个文件")
.start();
//###############注意这里是 GET 请求 ##########
/////////////////
// new Thread(new Runnable() {
//
// @Override
// public void run() {
// getHttps();
// }
// public void getHttps(){
// Log.e(TAG, "getHttps:-------执行了吗------ https://192.168.1.34:8000/index/" );
// String https = "https://192.168.1.34:8000/index/";
// try {
// SSLContext sc = SSLContext.getInstance("TLS");
// sc.init(null,new TrustManager[]{new MyTrustManager()},new SecureRandom());
// HttpsURLConnection.setDefaultSSLSocketFactory((sc.getSocketFactory()));
// HttpsURLConnection.setDefaultHostnameVerifier(new MyHostnameVerifier());
// HttpsURLConnection conn = (HttpsURLConnection)new URL(https).openConnection();
// conn.setDoOutput(true);
// conn.setDoInput(true);
// Log.e(TAG, "getHttps: ++++++结果111+++++" );
//
// conn.connect();
// Log.e(TAG, "getHttps: ++++++结果2222+++++" );
// BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
// StringBuffer sb = new StringBuffer();
// String line;
// while ((line = br.readLine())!=null){
// sb.append(line);
// }
// Log.e(TAG, "getHttps: ++++++结果+++++"+sb.toString() );
// Message msg = new Message();
// msg.what=111;
// msg.obj=sb.toString();
// handler.sendMessage(msg);
// } catch (NoSuchAlgorithmException e) {
// e.printStackTrace();
// } catch (KeyManagementException e) {
// e.printStackTrace();
// } catch (MalformedURLException e) {
// e.printStackTrace();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// class MyHostnameVerifier implements HostnameVerifier{
// @Override
// public boolean verify(String hostname, SSLSession session) {
// // TODO Auto-generated method stub
// return true;
// }
//
// }
//
// class MyTrustManager implements X509TrustManager{
// @Override
// public void checkClientTrusted(X509Certificate[] chain, String authType)
// throws CertificateException {
// // TODO Auto-generated method stub
// }
// @Override
// public void checkServerTrusted(X509Certificate[] chain, String authType)
//
// throws CertificateException {
// // TODO Auto-generated method stub
// }
// @Override
// public X509Certificate[] getAcceptedIssuers() {
// // TODO Auto-generated method stub
// return null;
// }
//
// }
//
// }).start(); } catch (JSONException e) {
e.printStackTrace();
} }
//清空聊天记录
@Override
public void clearRecord(int position) {
try {
uid = mData.get(position).getInt("uid");
} catch (JSONException e) {
e.printStackTrace();
}
db.execSQL("delete from chatrecord where friends_id = "+ uid+";");
Cursor cursor2 =db.rawQuery("select * from CHATRECORD ;",null); Log.e(TAG, "clearRecord: " +cursor2.moveToFirst() + db.equals(null));
if (cursor2.moveToFirst()){
do {
Log.e(TAG, "clearRecord: 00-----"+cursor2.getString(cursor2.getColumnIndex("content")) );
}while (cursor2.moveToNext());
}
Log.e(TAG, "clearRecord: 8888888888" +"delete from CHATRECORD where friends_id ="+ uid);
} // @Override
// public void onLongClick(int position) {
// Toast.makeText(getContext(),"长按事件",Toast.LENGTH_SHORT).show();
// Log.e(TAG, "onLongClick: ___***长按事件**___" );
//// AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
//// builder.setTitle("hahahha");
//// builder.show();
//
// //长按功能键
// }
});
friends_recycler.addItemDecoration(new DividerItemDecoration(getContext(),DividerItemDecoration.VERTICAL));
friends_recycler.setAdapter(friendsRecyclerAdapter); //删除数据库
// getContext().deleteDatabase("friend1.db"); //删除表内容
// db.execSQL("delete from CHATRECORD");
//插入数据
ContentValues values = new ContentValues(); // for ( int i=1;i<3;i++) {
// Log.e(TAG, "onActivityCreated: ______" + "张三" + i);
// values.put("friends_name","李四"+i);
// db.insert("FRIENDS", null,values );
// values.clear();
// } Toast.makeText(getContext(),"初始化数据库",Toast.LENGTH_SHORT).show();
Cursor cursor = db.rawQuery("select friends_name,friendId from FRIENDS",null);
if (cursor.moveToFirst()){
do {
String name = cursor.getString(cursor.getColumnIndex("friends_name"));
Log.e(TAG, "onActivityCreated: *******"+name +"----"+cursor.getInt(cursor.getColumnIndex("friendId")));
}while(cursor.moveToNext()); }
cursor.close(); } @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
// List<String> list = data.getStringArrayListExtra("paths");
// String path = data.getStringExtra("path");
// String param = data.getStringExtra("param");
List<String> list = null;
list = data.getStringArrayListExtra(Constant.RESULT_INFO);
//选中文件
if (list.size()>0){
for (String string: list) {
Log.e(TAG, "onActivityResult: *************"+string );
File file =new File(string);
upLoadPath = string; //https请求
new Thread(new Runnable() {
@Override
public void run() {
            //################ 这里是 认证所有证书 trustAllCerts信任所有的证书###################
                handleSSLHandshake();
            //################  https   POST  请求 #############
httpPost("https://192.168.1.32:8000/index/up","/data/user/0/com.example.wbdream.zigvine/files/a2.txt","a2.txt");
// httpPost("https://192.168.1.32:8000/index/up",string,file.getName()); }
}).start(); try {
FileReader fr=new FileReader(file);
byte[] bytes=new byte[1024];
BufferedReader br = new BufferedReader(fr);
String s="";
while ((s=br.readLine())!=null){
Log.e(TAG, "onActivityResult: =============="+s );
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } } } }
/**
* 往服务器上上传文本 比如log日志
* @param urlstr 请求的url
* @param uploadFile log日志的路径
* /mnt/shell/emulated/0/LOG/LOG.log
* @param newName log日志的名字 LOG.log
* @return
*/
public static void httpPost(String urlstr,String uploadFile,String newName) {
Log.e(TAG,"urlstr="+urlstr+";uploadFile="+uploadFile+";newName="+newName );
String end = "\r\n";
String twoHyphens = "--";
String boundary = "*****";//边界标识
int TIME_OUT = 10*1000; //超时时间
HttpsURLConnection con = null;
DataOutputStream ds = null;
InputStream is = null;
try {
URL url = new URL(urlstr);
con = (HttpsURLConnection) url.openConnection();
Log.e(TAG, "httpPost: 1111111111" );
con.setReadTimeout(TIME_OUT);
con.setConnectTimeout(TIME_OUT);
/* 允许Input、Output,不使用Cache */
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false); // 设置http连接属性
con.setRequestMethod("POST");//请求方式
con.setRequestProperty("Connection", "Keep-Alive");//在一次TCP连接中可以持续发送多份数据而不会断开连接
con.setRequestProperty("Charset", "UTF-8");//设置编码
con.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);//multipart/form-data能上传文件的编码格式
Log.e(TAG, "httpPost: ------------" );
ds = new DataOutputStream(con.getOutputStream());
Log.e(TAG, "httpPost: 2222222222" );
ds.writeBytes(twoHyphens + boundary + end);
ds.writeBytes("Content-Disposition: form-data; "
+ "name=\"stblog\";filename=\"" + newName + "\"" + end);
ds.writeBytes(end); // 取得文件的FileInputStream
FileInputStream fStream = new FileInputStream(uploadFile);
Log.e(TAG, "httpPost: 333333333333" );
/* 设置每次写入1024bytes */
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int length = -1;
/* 从文件读取数据至缓冲区 */
while ((length = fStream.read(buffer)) != -1) {
/* 将资料写入DataOutputStream中 */
ds.write(buffer, 0, length);
}
ds.writeBytes(end);
ds.writeBytes(twoHyphens + boundary + twoHyphens + end);//结束 fStream.close();
ds.flush();
/* 取得Response内容 */
is = con.getInputStream();
int ch;
StringBuffer b = new StringBuffer();
while ((ch = is.read()) != -1) {
b.append((char) ch);
}
/* 将Response显示于Dialog */
Log.e(TAG, "httpPost: ------上传成功-----");
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "httpPost: ======----"+e );
Log.e(TAG, "httpPost: --------上传失败----" );
}finally {
/* 关闭DataOutputStream */
if(ds!=null){
try {
ds.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (con != null) {
con.disconnect();
}
}
}
public static void handleSSLHandshake() {
try {
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
} @Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
} @Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}}; SSLContext sc = SSLContext.getInstance("TLS");
// trustAllCerts信任所有的证书
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
} catch (Exception ignored) {
}
}
}

 

Android + https 实现 文件上传的更多相关文章

  1. Android+jsp +html 文件上传案例 已测试 成功通过

    我文件上传一直是广大读者一个问题 今天就把成功案例写下 javaweb 网页前段 <%@ page language="java" import="java.uti ...

  2. web端、android端的文件上传

    1.web端的文件上传. 这里是利用了第三方的jar包.这里所需要的jar包我已经上传到本博客的资源里了,以下是连接 http://download.csdn.net/detail/caihongsh ...

  3. Android Http POST文件上传之-----RFC1867协议

    RFC1867协议介绍            RFC1867协议主要是在HTTP协议的基础上为INPUT标签添加了file属性.同一时候限定了Form的method必须为POST,ENCTYPE必须为 ...

  4. 让Android中的webview支持页面中的文件上传

    android webview在默认情况下是不支持网页中的文件上传功能的: 如果在网页中有<input type="file" />,在android webview中 ...

  5. 使用.NET框架、Web service实现Android的文件上传(二)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYUAAAKpCAIAAADcx6fPAAAgAElEQVR4nOydd1hT5+LHg1attbfr1t ...

  6. 使用.NET框架、Web service实现Android的文件上传(一)

    上面是上传结果的展示,下面具体讲一下实现过程. 一.Web Service (.NET) namespace VedioPlayerWebService.service.vedios { [WebSe ...

  7. Android文件上传与下载

    文件上传与下载 文件上传 -- 服务端 以Tomcat为服务器,Android客服端访问Servlet,经Servlet处理逻辑,最终将文件上传,这里就是简单模拟该功能,就将文件上传到本机的D:\\u ...

  8. SSM + Android 网络文件上传下载

    SSM + Android 网络交互的那些事 2016年12月14日 17:58:36 ssm做为后台与android交互,相信只要是了解过的人都知道一些基本的数据交互,向json,对象,map的交互 ...

  9. Android+Spring Boot 选择+上传+下载文件

    2021.02.03更新 1 概述 前端Android,上传与下载文件,使用OkHttp处理请求,后端使用Spring Boot,处理Android发送来的上传与下载请求.这个其实不难,就是特别多奇奇 ...

随机推荐

  1. FFmpeg 结构体学习(二): AVStream 分析

    在上文FFmpeg 结构体学习(一): AVFormatContext 分析我们学习了AVFormatContext结构体的相关内容.本文,我们将讲述一下AVStream. AVStream是存储每一 ...

  2. Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖

    什么是ui-router ui-router是AngularUI库最有用的组件之一(AngularUI库由AngularJS社区构建).它是一个第三方路由框架,允许通过状态机制组织接口,而不是简单的U ...

  3. [Swift]LeetCode299. 猜数字游戏 | Bulls and Cows

    You are playing the following Bulls and Cows game with your friend: You write down a number and ask ...

  4. iOS学习—— UISearchBar的使用

    转载自:http://blog.sina.com.cn/s/blog_7b9d64af0101dfg8.html 最近用到搜索功能.于是,经过不断的研究,终于,有点懂了. 那就来总结一下吧,好记性不如 ...

  5. java初见

    public class Diyi{ public static void main(String[] args){ System.out.println("Hello,world" ...

  6. 课程五(Sequence Models),第三周(Sequence models & Attention mechanism) —— 2.Programming assignments:Trigger word detection

    Expected OutputTrigger Word Detection Welcome to the final programming assignment of this specializa ...

  7. asp.net core 系列 19 EFCore介绍

    一.概述 目前最新的EF Core版本是3.0,最稳定的EF Core版本是2.2.EF Core 的计划与 .NET Core以及 ASP.NET Core 版本同步.EF Core 是一个 .NE ...

  8. C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...

  9. 规避 React 组件中的 bind(this)

    React 组件中处理 onClick 类似事件绑定的时候,是需要显式给处理器绑定上下文(context)的,这一度使代码变得冗余和难看. 请看如下的示例: class App extends Com ...

  10. Java基础6:代码块与代码加载顺序

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...