近期的一个连接服务端的应用。须要读取图片,一般供用户公布商品选择上传图片。初始的图片列表应该是缩略图。仅仅有确定了,才上传原图,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. 不带头结点的单链表递归删除元素为X的结点

    #include <iostream> using namespace std; struct Node { Node *next; int elem; }; void creatList ...

  2. MySQL 5.6 for Windows 解压缩版配置安装(转)

    转自:http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345bf0.html MySQL是一个小巧玲珑但功能强大的数据库,目前十分流行.但是官网给 ...

  3. extjs中gridpanel动态显示/隐藏列

    在extjs3中,大家知道用 myGrid.getColumnModel().setHidden(i,true);但到了4.0后,已经没有getColumnModel这个方法了,我们在Ext.pane ...

  4. 如何让同一个字段在不同的view中显示不同的内容

    many2one 字段默认显示 对象的name字段, 但也可以定义name_get方法显示不同的内容 如res.partner 对象可以根据 context 内容是否显示 客户的地址,职位,email ...

  5. LCD驱动学习笔记

    通过这几天的学习发现驱动的框架感觉都差不多,一般分为以下几个步骤: 分配一个结构体 struct x *x = amlloc(); 设置结构体的参数 硬件寄存器 file_operations 注册 ...

  6. go语言细节

    1 数组与字符串为值类型,切片.映射.通道为值类型,赋值需注意. package main import ( "fmt" ) func main() { //数组 a1 := [] ...

  7. [BZOJ 2821] 作诗(Poetize) 【分块】

    题目链接:BZOJ - 2821 题目分析 因为强制在线了,所以无法用莫队..可以使用分块来做. 做法是,将 n 个数分成 n/x 个块,每个块大小为 x .先预处理出 f[i][j] ,表示从第 i ...

  8. 【Java】对Web Service的理解

    WSDL(Web Service Description Language)是描述Web Service的语言. 你会怎样向别人介绍你的Web service有什么功能,以及每个函数调用时的参数呢?你 ...

  9. 关于Unity3D中的版本管理 .

    关于Unity3D中的版本管理 使用Unity3D也有一段时间了,由于团队一直使用SVN进行版本管理,现总结一下: (1) Unity3D的二进制资源必须加锁进行版本控制,因为它没办法merge: ( ...

  10. Rundeck,RUN起来!!

    零晨一点, 还好,跑起来了.. 满满的英文文档,肿么办?? 拿下!