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

    时间限制:0.5s 空间限制:6M 题意:         在b(2<b<36)进制中,找到所有长度为n(0<n<2000)的自守数k,满足k^2%b^n=k,字典序输出.   ...

  2. Java学习随笔——RMI

    RMI(Remote Method Invocation)远程方法注入,用来实现远程方法调用,是实现分布式技术的一种方法.RMI提供了客户辅助对象和服务辅助对象,为客户辅助对象创建了和服务对象相同的方 ...

  3. 如果数据为null,则转成数据库可识别的DBNULL.Value

    // <summary> /// 如果数据为null,则转成数据库可识别的DBNULL.Value /// </summary> /// <param name=&quo ...

  4. MVC 文本转换成html显示

    最近在学习ASP.NET MVC,项目中需要将后台传输的HTML文本在前台页面显示:@Html.Raw(HttpUtility.HtmlDecode(ViewBag.DisplayText)).记下来 ...

  5. CSS实现图片在div a标签中水平垂直居中

    CSS实现图片在div a标签中水平垂直居中 <div class="demo"> <a href="#"> <img src=& ...

  6. Magento 2.0 安装

    环境: 直接升到最新版PHP5.6.x 刚才开MAC OS PHP 5.5  CENTOS PHP 5.5  composer install  依懒包错误.反复安装组件.还是不行.后来决定重新编释最 ...

  7. Redis 中的事务

    Redis支持简单的事务 Redis与mysql事务的对比 Mysql Redis 开启 start transaction muitl 语句 普通sql 普通命令 失败 rollback 回滚 di ...

  8. cocos2dx调度器scheduler

    / 让帧循环调用this->update(float dt)函数 // scheduleUpdate(); // 让帧循环去调用制定的函数,时间还是1/60秒 // schedule(sched ...

  9. TC2.0中怎样调用汇编程序

    转载于: TC2.0中怎样调用汇编程序 一.概述 TC是美国BORLAND 公司在IBM PC机上开发的一个高效.优化的C编译程序,它自带高效的全屏幕编辑程序,在集成开发环境下可支持编辑.编译.连接调 ...

  10. Cordova VS React Native 谁是未来? - b

    对于原生native还是倍加推崇的,极佳的用户体验和性能让我学的如痴如醉,可是互联网这个世界可以用一句话可以总结:没有什么是不可能的.自从阿里淘宝天猫横空出世,它们教会了人们如何在网上购物,然后仿佛一 ...