Android上传多张图片卡死

Leo星星 2016-01-07 09:49:27
通过在网上找到的上传代码,我已经实现了文字+单一照片的上传,并且很成功顺利。
但是在制作类似发微博多张图片的功能时,不知道为什么就不行了。
PS:在华为G730手机上不行,在魅族的魅蓝note上居然可以!
我的代码:
private void sendRequestWithHttpURLConnection(){

//开启下称刘发起网络请求
new Thread(new Runnable(){
public void run(){
HttpURLConnection connection = null;
String BOUNDARY = UUID.randomUUID().toString(); // 边界标识 随机生成
String PREFIX = "--";
String LINEND = "\r\n";
String CONTENT_TYPE = "multipart/form-data"; // 内容类型
String CHARSET = "UTF-8";
try{
URL url;
if(IsEdit){
url = new URL("http://www.ylhuakai.com/alflower/Data/editActlog");
}else{
url = new URL("http://www.ylhuakai.com/alflower/Data/addActLog");
}
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setReadTimeout(600000);
connection.setConnectTimeout(100000000);
connection.setDoInput(true);// 允许输入
connection.setDoOutput(true);// 允许输出
connection.setUseCaches(false); // 不允许使用缓存
connection.setRequestProperty("Charsert", "UTF-8");
// connection.setChunkedStreamingMode(51200); //不知道为什么不注释掉就不行
connection.setRequestProperty("connection", "keep-alive");
connection.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);


//这个是我上传的文本,没出现过问题
Map<String, String> params = new HashMap<String, String>();
params.put("user_id", User_id);
params.put("act_id", Act_id);
params.put("log_id", Log_id);
params.put("log_time", log_time.getText().toString());
params.put("log_address", log_address.getText().toString());
params.put("log_content", log_content.getText().toString());


// 首先组拼文本类型的参数
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINEND);
sb.append("Content-Disposition: form-data; name=\"" + entry.getKey() + "\"" + LINEND);
sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
sb.append(LINEND);
sb.append(entry.getValue());
sb.append(LINEND);
}
connection.connect();

DataOutputStream dos = new DataOutputStream(connection.getOutputStream());
dos.write(sb.toString().getBytes());


// 发送文件数据

if (files != null) {

//这里可以显示出来,应该算是files没问题吧
System.out.println("=======files.size()========="+files.size()+"==========");

for (int i = 0; i < files.size(); i++) {

/**
* 当文件不为空,把文件包装并且上传
*/
StringBuffer sBuffer = new StringBuffer();
sBuffer.append(PREFIX);
sBuffer.append(BOUNDARY);
sBuffer.append(LINEND);
/**
* 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件 filename是文件的名字,包含后缀名的 比如:abc.png
*/
sBuffer.append("Content-Disposition: form-data; name=\"img_list[]\"; filename=\"" + files.get(i).getName() + "\"" + LINEND);
sBuffer.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND);
sBuffer.append(LINEND);
dos.write(sBuffer.toString().getBytes());
//这里的文件名也正常显示
System.out.println("=======files.get(i).getName()========="+files.get(i).getName()+"==========");

InputStream is = new FileInputStream(files.get(i));
byte[] bytes = new byte[1024];
int len = 0;
while ((len = is.read(bytes)) != -1) {
dos.write(bytes, 0, len);
}
is.close();
dos.write(LINEND.getBytes());
}
}
byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
dos.write(end_data);
dos.flush();
//dos.close();
//下面对获取到的输入流进行读取

/**
* 获取响应码 200=成功 当响应成功,获取响应的流
*/
InputStream in = null;
int res = connection.getResponseCode();
if (res == 200) {
in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while((line = reader.readLine()) !=null){
response.append(line);
}


Message message = new Message();
if(IsEdit){
message.what = Edit_SUCCESS;
}else{
message.what = Create_SUCCESS;
}
//将服务器返回的结果放到message中
message.obj = response.toString();
handler.sendMessage(message);
in.close();
}

}catch (Exception e){
e.printStackTrace();
}finally{
if(connection != null){
connection.disconnect();
}
}
}
}).start();

}

其实关于stream我确实搞不懂什么时候flush、close,所以都是通过网上代码来回试验的。
曾有一段时间,上面的代码在只选一张图片时,华为手机也能通过,但现在居然也不行了。

补充:在这个代码之前,有一段压缩图片的代码
files = new ArrayList<File>();



if (MyAdapter.mSelectedImage.size() > 0) {
for (int i = 0; i < MyAdapter.mSelectedImage.size(); i++) {
Bitmap md = ImageCompress.getSmallBitmap(MyAdapter.mSelectedImage.get(i));
File f = ImageCompress.saveMyBitmap(md, "huakaitemp"+i);
files.add(f);
}
}
sendRequestWithHttpURLConnection();
我觉得能输出文件名且找得到文件,就应该不是这个原因吧
求帮忙分析一下吧,整个项目最后的一个问题了。我参考了朋友的代码核心也是if (files != null) {for (int i = 0; i < files.size(); i++) {}}这个样子,只不过用了很多类。
...全文
407 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
梦想的开拓者 2016-06-12
  • 打赏
  • 举报
回复
这位同学,,,我也遇到一样的问题啊!!!你解决没啊?
_周星星 2016-01-13
  • 打赏
  • 举报
回复
如果是http连接的话 可以用AsyncHttpClient 上传文件so简单 上传图片的时候一张一张 的上传 上传之前压缩
huangxiaohu_coder 2016-01-13
  • 打赏
  • 举报
回复
不行是指上传不成功还是指上传block住了,加Log或者断点一步步调试看看
酒尽雪满天 2016-01-12
  • 打赏
  • 举报
回复
干嘛要自己写?重复造轮子,用okHttp上传不就行了?
大气污染是影响公众健康与生态环境的重要问题,精准的空气质量时空预测与污染源贡献度量化是精准治污的关键支撑。针对现有研究多源融合不充分、时空关联刻画不足、预测与源解析割裂三方面缺陷,本文设计实现了城市空气质量时空预测与污染源贡献度分析系统,融合监测、气象、工业排放与交通四类数据,构建基于时空注意力的LSTM(STAM-LSTM)预测模型与基于正定矩阵因子分解(PMF)的源解析模型,形成数据融合-特征工程-预测-源解析-可视化闭环。 系统实现四类数据时空对齐与融合,构建时序与空间邻域特征,以普通克里金插值生成1km网格浓度场;STAM-LSTM引入时空注意力自适应学习站点间污染传输时变权重,以72小时输入预测未来24小时逐小时PM2.5浓度;PMF识别交通、工业、燃煤、扬尘与二次生成五个源因子,量化各源全年贡献度并分析时空演变。 实验表明:STAM-LSTM预测RMSE 24.6、MAE 17.8、R² 0.88,相对LSTM基线(30.2)提升18.5%;普通克里金插值误差8.9,优于反距离加权(11.4);源解析显示交通源28.4%、工业源23.1%、燃煤源19.6%为主要贡献源,冬季燃煤源升至27.3%、早高峰交通源达34.8%,下风向工业源贡献高出上风向8~12个百分点;减排情景显示交通源减排20%可使年均PM2.5下降5.7%,与源贡献度排序一致。 系统按五模块14组件实现,功能测试16项用例全部通过,为大气污染预警、源管控与减排政策制定提供了决策依据。 【课程报告内容】 摘要 第1章 绪论 第2章 相关技术与理论 第3章 系统需求分析 第4章 系统总体设计 第5章 系统详细设计与实现 第6章 系统测试与分析 第7章 总结与展望 参考文献 附件-实现指南
基于iTransformer-BiGRU-KAN多模型融合的滚动轴承剩余寿命预测研究(Python代码实现)内容概要:本文提出了一种基于iTransformer-BiGRU-KAN多模型融合的滚动轴承剩余寿命预测方法,旨在通过结合多种先进深度学习模型的优势,提升在复杂工况下的预测精度与鲁棒性。该方法利用iTransformer捕捉长期时间序列中的全局依赖关系,通过BiGRU模型提取双向时序特征,最后引入KAN(Kernel Attention Network)增强非线性映射与关键特征的自适应加权能力,实现对轴承退化过程的精准建模。文中详细介绍了模型架构设计、训练流程及在公开数据集上的实验验证,结果表明该融合模型相比单一模型在预测精度和稳定性方面均有显著提升。; 适合人群:具备一定机器学习与深度学习基础,从事设备故障诊断、工业大数据分析或智能运维相关领域的研究人员及工程技术人员,尤其适合研究生及以上学历或有相关项目经验的专业人员。; 使用场景及目标:①应用于工业设备状态监测与预测性维护系统中,实现对滚动轴承等关键部件剩余寿命的精准预测;②为复杂时间序列回归任务提供多模型融合的设计思路与技术参考;③推动深度学习在智能制造与工业物联网领域的落地应用。; 阅读建议:建议读者结合Python代码实现部分,深入理解各子模型的接口设计与融合逻辑,重点关注特征融合机制与注意力权重的可视化分析,以便在实际项目中灵活调整与优化模型结构。

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧