最蛋疼的bug:读取图片缩略图(一定要在相冊查看下形成缓存)
近期的一个连接服务端的应用。须要读取图片,一般供用户公布商品选择上传图片。初始的图片列表应该是缩略图。仅仅有确定了,才上传原图,OK不多说上代码
package edu.buaa.erhuo;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONObject;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import edu.buaa.erhuo.R;
import edu.buaa.erhuo.Utils.NetworkUtils;
public class PubActivity extends Activity {
private EditText et_title,et_des;
private Button btn_choose,btn_addSubmit;
private Spinner spinner_typeId;
private ArrayAdapter<String> adapter;
private List<String> allValues = new ArrayList<String>();
private List<Integer> allTypeIds = new ArrayList<Integer>();
private Handler handler;
private ImageView photoImg;
private String filePath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pub);
et_title=(EditText)findViewById(R.id.et_title);
et_des=(EditText)findViewById(R.id.et_description);
btn_choose=(Button)findViewById(R.id.btn_choose_photo);
btn_addSubmit=(Button)findViewById(R.id.btn_add_submit);
spinner_typeId=(Spinner)findViewById(R.id.spinner_type);
photoImg=(ImageView)findViewById(R.id.img_photo);
handler=new Handler(){
public void handleMessage(Message msg) {
if (msg.what==0) {//有网络且读取到数据
adapter=new ArrayAdapter<String>(PubActivity.this, android.R.layout.simple_spinner_item,allValues);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_typeId.setAdapter(adapter);
}
else if (msg.what==1) {//提交到后台成功
Toast.makeText(PubActivity.this,"加入成功",Toast.LENGTH_SHORT).show();
et_title.setText("");
et_des.setText("");
spinner_typeId.setSelection(0);
photoImg.setImageURI(null);
filePath=null;
}
else if (msg.what==2) {
//提交到后台失败
Toast.makeText(PubActivity.this,"加入失败",Toast.LENGTH_SHORT).show();
}
}
};
// 调用工具类。 查询全部的商品分类数据
Thread t=new Thread(){
public void run() {
try {
JSONArray array=NetworkUtils.getJSONArrayByUrl(NetworkUtils.GET_ALL_PRODUCT_TYPE_URL);
System.out.println(array+"kane...........");
// 循环查询到的数据。保存到List集合里
for (int i = 0; i < array.length(); i++) {
JSONObject obj = array.getJSONObject(i);
allValues.add(obj.getString("type_name"));
allTypeIds.add(obj.getInt("type_id"));
}
handler.sendEmptyMessage(0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
t.start();
btn_addSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
final ProgressDialog dialog=new ProgressDialog(PubActivity.this);
dialog.setTitle("提示");
dialog.setMessage("正在提交数据.........");
dialog.show();
Thread t=new Thread(){
public void run() {
Map<String,String> params=new HashMap<String, String>();
params.put("product.product_name",et_title.getText().toString());
params.put("product.description",et_des.getText().toString());
params.put("product.type_id", allTypeIds.get(spinner_typeId.getSelectedItemPosition()).toString());
if (filePath==null) {
try {
String result=NetworkUtils.postDataByUrl(NetworkUtils.PRODUCT_INSERT_URL, params);
if (result.equals("ok")) {
handler.sendEmptyMessage(1);
}
else {
handler.sendEmptyMessage(2);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
handler.sendEmptyMessage(2);
}
}
else {
try {
String result = NetworkUtils.postFileByUrl(
NetworkUtils.PRODUCT_INSERT_URL, params,
filePath);
if (result.equals("ok")) {
handler.sendEmptyMessage(1);
} else {
handler.sendEmptyMessage(2);
}
} catch (Exception e) {
e.printStackTrace();
handler.sendEmptyMessage(2);
}
}
dialog.dismiss();
}
};
t.start();
}
});
btn_choose.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Builder builder=new Builder(PubActivity.this);
builder.setTitle("请选择");
builder.setItems(new String[]{"拍照","从相冊选择"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which) {
switch (which) {
case 0:
Intent intent=new Intent(PubActivity.this,CameraActivity.class);
startActivity(intent);
break;
case 1:
Intent in = new Intent(
PubActivity.this,
SelectImageActivity.class);
startActivityForResult(in, 1);
break;
}
}
});
builder.setPositiveButton("取消",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogInterface, int which) {
// TODO Auto-generated method stub
}
});
builder.create().show();
}
});
}
//请求的activity返回一个结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
filePath = data.getStringExtra("filePath");
photoImg.setImageURI(Uri.fromFile(new File(filePath)));
}
}
}
package edu.buaa.erhuo;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import edu.buaa.erhuo.adapter.PhotoImageAdapter;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.provider.MediaStore.Images.Media;
import android.provider.MediaStore.Images.Thumbnails;
import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
public class SelectImageActivity extends Activity {
private GridView gridView;
private PhotoImageAdapter adapter;
private List<Map<String, Object>> allValues=new ArrayList<Map<String,Object>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_select_image);
gridView=(GridView)findViewById(R.id.grid);
//取得数据,Thumbnails缩略图,必须先相冊查看形成缓存,不然没有缩略图
Cursor c=getContentResolver().query(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, null,
null,null,null);
c.moveToFirst();
while (!c.isAfterLast()) {
Map<String,Object> map=new HashMap<String, Object>();
//相应原图的ID
map.put("imageId",c.getLong(c.getColumnIndex(Thumbnails.IMAGE_ID)));
//DATA就是路径名
map.put("filepath",c.getString(c.getColumnIndex(Thumbnails.DATA)));
allValues.add(map);
c.moveToNext();
}
c.close();
adapter=new PhotoImageAdapter(allValues, this);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
final Map<String,Object> map=allValues.get(position);
Builder builder=new Builder(SelectImageActivity.this);
builder.setTitle("确定使用这张好照片吗?");
ImageView img=new ImageView(SelectImageActivity.this);
img.setImageURI(Uri.fromFile(new File(map.get("filepath").toString())));
builder.setView(img);
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//获取图片原始位置
//须要关联查询
Cursor c=getContentResolver().query(Images.Media.EXTERNAL_CONTENT_URI,null,Media._ID+"= ?
", new String[]{map.get("imageId").toString()}, null);
String realPath=null;
if (c.moveToFirst()) {
realPath=c.getString(c.getColumnIndex(Media.DATA));
}
c.close();
Intent in=new Intent();
in.putExtra("filepath",realPath);
setResult(RESULT_OK,in);//给调用此activity的源头发给回馈信息
finish();
}
});
builder.setNegativeButton("取消",new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
}
});
builder.create().show();
}
});
}
}
须要用到的adapter
package edu.buaa.erhuo.adapter;
import java.io.File;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import edu.buaa.erhuo.R;
import edu.buaa.erhuo.Utils.Globals;
public class PhotoImageAdapter extends BaseAdapter {
private List<Map<String, Object>> allValues;
private Context ctx;
public PhotoImageAdapter(List<Map<String, Object>> allValues, Context ctx) {
this.allValues = allValues;
this.ctx = ctx;
}
@Override
public int getCount() {
return allValues.size();
}
@Override
public Object getItem(int position) {
return allValues.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(ctx).inflate(
R.layout.grid_image_line, null);
convertView.setLayoutParams(new LayoutParams(
LayoutParams.MATCH_PARENT, Globals.SCREEN_HEIGHT / 6));
}
Map<String, Object> map = allValues.get(position);
ImageView img = (ImageView) convertView
.findViewById(R.id.photo_img_line);
img.setImageURI(Uri.fromFile(new File(map.get("filePath").toString())));
return convertView;
}
}
最蛋疼的bug:读取图片缩略图(一定要在相冊查看下形成缓存)的更多相关文章
- 第二十八篇、自定义的UITableViewCell上有图片需要显示,要求网络网络状态为WiFi时,显示图片高清图;网络状态为蜂窝移动网络时,显示图片缩略图
1)SDWebImage会自动帮助开发者缓存图片(包括内存缓存,沙盒缓存),所以我们需要设置用户在WiFi环境下下载的高清图,下次在蜂窝网络状态下打开应用也应显示高清图,而不是去下载缩略图. 2)许多 ...
- Android中读取图片EXIF元数据之metadata-extractor的使用
一.引言及介绍 近期在开发中用到了metadata-extractor-xxx.jar 和 xmpcore-xxx.jar这个玩意, 索性查阅大量文章了解学习,来分享分享. 本身工作也是常常和处理大图 ...
- nodejs进阶(4)—读取图片到页面
我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...
- HTML中上传与读取图片或文件(input file)----在路上(25)
input file相关知识简例 在此介绍的input file相关知识为: 上传照片及文件,其中包括单次上传.批量上传.删除照片.增加照片.读取图片.对上传的图片或文件的判断,比如限制图片的张数.限 ...
- nodeJS基础08:读取图片
1.读取图片 //server.js var http = require("http"); var readImage = require("./readImage&q ...
- opencv用imread( argv[1], 1)读取图片
显示一幅图:主要是运用功能:imread namedWindow imshowimread:从字面意思我们就可以看懂,用来读取图片的:namedWindow:显然,我们也可以看到这是用来命名窗口名称的 ...
- Servlet从本地文件中读取图片,并显示在页面中
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpSer ...
- [OpenCV] 1、读取图片
>_<" 安装及配置请看http://www.cnblogs.com/zjutlitao/p/4042074.html >_<" 这篇是一个简单的在VS20 ...
- [转]asp.net mvc 从数据库中读取图片
本文转自:http://www.cnblogs.com/mayt/archive/2010/05/20/1740358.html 首先是创建一个类,继承于ActionResult,记住要引用Syste ...
随机推荐
- 【POJ1417】【带标记并查集+DP】True Liars
Description After having drifted about in a small boat for a couple of days, Akira Crusoe Maeda was ...
- nginx插件ngx_lua
ngx_lua是淘宝的维护的产品,真心不错.配置文件包含可以做很多事情的lua脚本. 公司有个产品对注册的广告盒子进行反向代理,这样可以在盒子上做很多事情:和服务器通信,远程控制盒子等等.nginx反 ...
- 泛型? extents super
?可以接受任何泛型集合,但是不能编辑集合值.所以一般只在方法参数中用 例子: ? extends Number 则类型只能是Number类的子孙类 ? super String 则类型只能是Str ...
- TaskbarCreated 消息
托盘中的图片就通过注册这个消息来实现,系统和进程通过进程间通信发送这个消息,进程接收他
- BIOS中断大全
BIOS中断大全 BIOS中断:1.显示服务(Video Service——INT 10H) 00H —设置显示器模式0CH —写图形象素01H —设置光标形状0DH —读图形象素02H —设置光标 ...
- PHP 开启 ssh2
首先,为PHP安装SSH2扩展需要两个软件包, libssh2和ssh2(php pecl拓展). 两者的最新版本分别为libssh2-1.5.0.tar.gz和ssh2-0.12.tgz,下载地址分 ...
- 一个CS出身的基本素养
从前天10号提交Paper之后,连三个晚上之后突然正常起来竟然变成倒时差状态. 这周打算给自己一个空窗期,好好想想下两到三个月要做的事. 好吧,除了"一日一算法",当下两个月还有一 ...
- BZOJ 1020 安全的航线flight
Description 在设计航线的时候,安全是一个很重要的问题.首先,最重要的是应采取一切措施确保飞行不会发生任何事故,但同时也需要做好最坏的打算,一旦事故发生,就要确保乘客有尽量高的生还几率.当飞 ...
- 试玩GitHub
SVN是可以,但GitHub越来越屌啊... SO...要玩起来.. 参考URL: http://jingyan.baidu.com/article/f7ff0bfc7181492e27bb1360. ...
- RH6030 单通道触摸感应开关
1.概述: RH6030 是一款单通道电容式触摸感应控制开关IC,可以替代传统的机械式开关. 该 IC 采用CMOS 工艺制造,结构简单,性能稳定.IC 可通过外部引脚配置成多种工作模式,可广泛应用于 ...