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. Javascript高级编程学习笔记(88)—— Canvas(5)绘制文本

    绘制文本 同样的,canvas也为绘制文本提供了相应的方法. 2D上下文提供的文本绘制方法主要有两个: fillText() strokeText() 这两个方法都接受四个参数 要绘制的文本字符串 绘 ...

  2. java字符串应用之字符串编码转换

    [转载]原文地址:https://blog.csdn.net/zhouyong80/article/details/1900100 无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题.尤其 ...

  3. [Swift]LeetCode223. 矩形面积 | Rectangle Area

    Find the total area covered by two rectilinear rectangles in a 2D plane. Each rectangle is defined b ...

  4. [SQL]LeetCode596. 超过5名学生的课 | Classes More Than 5 Students

    SQL架构 Create table If Not Exists courses (student varchar(), )) Truncate table courses insert into c ...

  5. [Swift]LeetCode889. 根据前序和后序遍历构造二叉树 | Construct Binary Tree from Preorder and Postorder Traversal

    Return any binary tree that matches the given preorder and postorder traversals. Values in the trave ...

  6. spring boot - 整合jpa多对对关系保存和查询示例

    pojo: package com.example.zs.springDataJpa; import org.hibernate.annotations.Proxy; import javax.per ...

  7. 5.Git基础-撤销操作、标签的使用、Git别名

    1.撤销操作 1.1 修改上一次的提交(commit)--  git commit --amend 有时候我们在提交完成之后才发现有几个文件没有提交,或者发现提交信息填写错了,这时候可以使用 git ...

  8. pytthon—day8 读写模式的结合、文件操作模式、with完成文本文件复制、游标操作

    一.读写模式的结合 w:写指没有新建文件,有文件就清空 w=open('1.txt','w',encoding='utf-8') w.write('000\n') 在写入数据时,需要及时处理内存空间, ...

  9. FTP解决连接慢问题

    今天发现程序报登录FTP超时,于是便手动登录发现真的慢,于是网上搜便获取大招亲测有效,于是怕忘的我马上记录下来,zzzzzzz!! 如下解决 vim /etc/vsftpd/vsftpd.conf 在 ...

  10. C++ 断言

    assert宏 (基本概念与用法整理) assert宏的深入学习 1.运行时断言 1.1.assert属于运行时断言,可以在运行时判断给定条件是否为真,如果为真则什么也不做,否则打印一跳错误信息,然后 ...