近期的一个连接服务端的应用。须要读取图片,一般供用户公布商品选择上传图片。初始的图片列表应该是缩略图。仅仅有确定了,才上传原图,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. NewRowNeeded和UserAddedRow事件以及RowsAdded的区别使用

    NewRowNeeded事件当 VirtualMode 属性为 true 时,将在用户定位到 DataGridView 底部的新行时发生,适合给新行建立一些默认数据和按规则应该产生的数据,但此时不推荐 ...

  2. [转载]windows下安装Python虚拟环境virtualenvwrapper-win

    1 前言 由于Python的版本众多,还有Python2和Python3的争论,因此有些软件包或第三方库就容易出现版本不兼容的问题. 通过 virtualenv 这个工具,就可以构建一系列 虚拟的Py ...

  3. android的padding和margin的区别

    android:padding和android:layout_margin的区别:padding是站在父view的角度描述问题,它规定它里面的内容必须与这个父view边界的距离. margin则是站在 ...

  4. awk里的各种坑

    今天又遇到一个,一旦需要定义一个局部数组(awk通过把局部变量定义在函数参数列表来实现局部这一特征)那么这个数组可以正常的操作,但是无法对他取长度,一旦使用length(tempArr)会得到这么一个 ...

  5. MVC身份验证及权限管理

    MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供了三种方式,其中最常用的就是我们的Form认证,需要配置相应的信息.例如下面的配置信息: < ...

  6. 使用CSS3改变选中元素背景色

    CSS3代码如下: /* SELECTION ----------------- */ ::-moz-selection { background: #f00533; color: white; te ...

  7. BZOJ 1072 排列

    Description 给一个数字串\(s\)和正整数\(d\), 统计\(s\)有多少种不同的排列能被\(d\)整除(可以有前导\(0\)).例如\(123434\)有\(90\)种排列能被\(2\ ...

  8. Prime Path

    poj3126:http://poj.org/problem?id=3126 题意:给你两个数n,k,两个数都是四位数的素数.现在让你改变n的一位数,让n变成另外一个素数.然后把这个素数在改变其中的以 ...

  9. db2索引创建和删除

    在表trpt_jv_rpt_log_td的tim列上创建索引 create index dw_rpt.irpt_jv_rpt_log_td_tim on dw_rpt.trpt_jv_rpt_log_ ...

  10. mysql 监控长事务

    mysql> desc information_schema.innodb_trx -> ; +----------------------------+----------------- ...