近期的一个连接服务端的应用。须要读取图片,一般供用户公布商品选择上传图片。初始的图片列表应该是缩略图。仅仅有确定了,才上传原图,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. SGU 121.Bridges painting

    原题地址 题意: 新百慕大由N个岛屿组成,在岛屿之间有一些连接它们的桥.在任意两个岛屿之间,最多只有一座桥连接它们.总统先生下达命令,要求给所有桥上色. 每一座桥能被染成 白色 或者 黑色. 每一个岛 ...

  2. LA 6474 Drop Zone (最小割)

    题目链接 要添最少的挡板使所有的'D'不存在到达网格外的路径. 以每个格子向四个方向中可以到达的格子连容量为1的边, 从源点向所有'D' 连容量为4的边,网格外的点向汇点连一条容量为4的边. 答案就是 ...

  3. Extjs4 关于设置form中所有子控件为readOnly属性的解决方案

    之前在网上找了一堆,但那些确实没法用,后来考虑了一下,发现主要是网上提供的假设form中只有一层控件,没有考虑到布局稍微复杂的form情形,此处采用递归的形式实现对form中所有控件(grid及but ...

  4. linux定时器

    我们常常有设置系统在某一时间执行相应动作的需求,比如设置电脑什么时候自动锁屏,什么时候自动关机,设置应用程序什么时候自动运行,什么时候自动退出.这些与时间相关的功能,都需要依靠操作系统中的定时器来实现 ...

  5. meta里面的viewport属性

    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1, ...

  6. 简单概述 .NET Framework 各版本区别

    目前已发行的版本有1.0.1.1.2.0.3.0.3.5.4.0.4.5(及4.5.1.4.5.2).4.6(及4.6.1). 1.0版本:最初的.net framework版本,作为一个独立的工具包 ...

  7. 局部变量存储区域静态变量存储区域static变量存储区域

    局部变量存储区域静态变量存储区域static变量存储区域 常见的存储区域可分为: 1.栈 由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区.里面的变量通常是局部变量.函数参数等. 2.堆 ...

  8. python 编程之计算器

    作业: 使用正则表达式和递归实现计算器功能. 实现: 1.实现带括号的计算 2.实现指数.加减乘除求余等功能 一.实例说明: 本实例自己写了个版本,但依旧存在一点bug,例:-2-2等计算问题,故最后 ...

  9. 访问Github过慢解决

    在这个地址查找响应最快的地址:http://tool.chinaz.com/dns?type=1&host=assets-cdn.github.com&ip= 查找:assets-cd ...

  10. BZOJ 1024 生日快乐

    Description windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕.现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋 ...