近期的一个连接服务端的应用。须要读取图片,一般供用户公布商品选择上传图片。初始的图片列表应该是缩略图。仅仅有确定了,才上传原图,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:读取图片缩略图(一定要在相冊查看下形成缓存)的更多相关文章

  1. 第二十八篇、自定义的UITableViewCell上有图片需要显示,要求网络网络状态为WiFi时,显示图片高清图;网络状态为蜂窝移动网络时,显示图片缩略图

    1)SDWebImage会自动帮助开发者缓存图片(包括内存缓存,沙盒缓存),所以我们需要设置用户在WiFi环境下下载的高清图,下次在蜂窝网络状态下打开应用也应显示高清图,而不是去下载缩略图. 2)许多 ...

  2. Android中读取图片EXIF元数据之metadata-extractor的使用

    一.引言及介绍 近期在开发中用到了metadata-extractor-xxx.jar 和 xmpcore-xxx.jar这个玩意, 索性查阅大量文章了解学习,来分享分享. 本身工作也是常常和处理大图 ...

  3. nodejs进阶(4)—读取图片到页面

    我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...

  4. HTML中上传与读取图片或文件(input file)----在路上(25)

    input file相关知识简例 在此介绍的input file相关知识为: 上传照片及文件,其中包括单次上传.批量上传.删除照片.增加照片.读取图片.对上传的图片或文件的判断,比如限制图片的张数.限 ...

  5. nodeJS基础08:读取图片

    1.读取图片 //server.js var http = require("http"); var readImage = require("./readImage&q ...

  6. opencv用imread( argv[1], 1)读取图片

    显示一幅图:主要是运用功能:imread namedWindow imshowimread:从字面意思我们就可以看懂,用来读取图片的:namedWindow:显然,我们也可以看到这是用来命名窗口名称的 ...

  7. Servlet从本地文件中读取图片,并显示在页面中

    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpSer ...

  8. [OpenCV] 1、读取图片

    >_<" 安装及配置请看http://www.cnblogs.com/zjutlitao/p/4042074.html >_<" 这篇是一个简单的在VS20 ...

  9. [转]asp.net mvc 从数据库中读取图片

    本文转自:http://www.cnblogs.com/mayt/archive/2010/05/20/1740358.html 首先是创建一个类,继承于ActionResult,记住要引用Syste ...

随机推荐

  1. 【POJ1417】【带标记并查集+DP】True Liars

    Description After having drifted about in a small boat for a couple of days, Akira Crusoe Maeda was ...

  2. nginx插件ngx_lua

    ngx_lua是淘宝的维护的产品,真心不错.配置文件包含可以做很多事情的lua脚本. 公司有个产品对注册的广告盒子进行反向代理,这样可以在盒子上做很多事情:和服务器通信,远程控制盒子等等.nginx反 ...

  3. 泛型? extents super

    ?可以接受任何泛型集合,但是不能编辑集合值.所以一般只在方法参数中用 例子: ? extends Number  则类型只能是Number类的子孙类 ? super String  则类型只能是Str ...

  4. TaskbarCreated 消息

    托盘中的图片就通过注册这个消息来实现,系统和进程通过进程间通信发送这个消息,进程接收他

  5. BIOS中断大全

    BIOS中断大全 BIOS中断:1.显示服务(Video Service——INT 10H)  00H —设置显示器模式0CH —写图形象素01H —设置光标形状0DH —读图形象素02H —设置光标 ...

  6. PHP 开启 ssh2

    首先,为PHP安装SSH2扩展需要两个软件包, libssh2和ssh2(php pecl拓展). 两者的最新版本分别为libssh2-1.5.0.tar.gz和ssh2-0.12.tgz,下载地址分 ...

  7. 一个CS出身的基本素养

    从前天10号提交Paper之后,连三个晚上之后突然正常起来竟然变成倒时差状态. 这周打算给自己一个空窗期,好好想想下两到三个月要做的事. 好吧,除了"一日一算法",当下两个月还有一 ...

  8. BZOJ 1020 安全的航线flight

    Description 在设计航线的时候,安全是一个很重要的问题.首先,最重要的是应采取一切措施确保飞行不会发生任何事故,但同时也需要做好最坏的打算,一旦事故发生,就要确保乘客有尽量高的生还几率.当飞 ...

  9. 试玩GitHub

    SVN是可以,但GitHub越来越屌啊... SO...要玩起来.. 参考URL: http://jingyan.baidu.com/article/f7ff0bfc7181492e27bb1360. ...

  10. RH6030 单通道触摸感应开关

    1.概述: RH6030 是一款单通道电容式触摸感应控制开关IC,可以替代传统的机械式开关. 该 IC 采用CMOS 工艺制造,结构简单,性能稳定.IC 可通过外部引脚配置成多种工作模式,可广泛应用于 ...