整理文档和模型。
This commit is contained in:
parent
e094eb5b3c
commit
fb918b7612
|
@ -1,61 +0,0 @@
|
|||
package com.stone.shop.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import cn.bmob.v3.BmobObject;
|
||||
import cn.bmob.v3.datatype.BmobFile;
|
||||
|
||||
/**
|
||||
* 商品实体类
|
||||
* @date 2014-4-24
|
||||
* @author Stone
|
||||
*/
|
||||
public class Good extends BmobObject implements Serializable{
|
||||
|
||||
private static final long serialVersionUID = -3248168273019127389L;
|
||||
|
||||
//private String id; 商品ID, 默认
|
||||
|
||||
private String shopID = ""; // 商店ID
|
||||
private String type = ""; // 类型
|
||||
private String name = ""; // 名称
|
||||
private String price = ""; // 价格
|
||||
|
||||
public Good(String name, String price) {
|
||||
this.name = name;
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
public String getShopID() {
|
||||
return shopID;
|
||||
}
|
||||
|
||||
public void setShopID(String shopID) {
|
||||
this.shopID = shopID;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
public void setPrice(String price) {
|
||||
this.price = price;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,80 +0,0 @@
|
|||
package com.stone.shop.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import cn.bmob.v3.BmobObject;
|
||||
import cn.bmob.v3.datatype.BmobFile;
|
||||
|
||||
/**
|
||||
* 店铺实体类, 实现序列化, Activity之间实现传递
|
||||
* @date 2014-4-24
|
||||
* @author Stone
|
||||
*/
|
||||
public class Shop extends BmobObject implements Serializable{
|
||||
|
||||
private static final long serialVersionUID = -8796635595320697255L;
|
||||
|
||||
private String userID; // 主人
|
||||
private String type; // 类型(11代表第一个GridView中的第一个)
|
||||
private String name; // 店名
|
||||
private String location; // 地理位置
|
||||
private String phone; // 联系电话
|
||||
private String info; // 简介
|
||||
private String sale; // 促销信息
|
||||
public String getUserID() {
|
||||
return userID;
|
||||
}
|
||||
|
||||
public void setUserID(String userID) {
|
||||
this.userID = userID;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
public void setLocation(String location) {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
public String getPhone() {
|
||||
return phone;
|
||||
}
|
||||
|
||||
public void setPhone(String phone) {
|
||||
this.phone = phone;
|
||||
}
|
||||
|
||||
public String getInfo() {
|
||||
return info;
|
||||
}
|
||||
|
||||
public void setInfo(String info) {
|
||||
this.info = info;
|
||||
}
|
||||
|
||||
public String getSale() {
|
||||
return sale;
|
||||
}
|
||||
|
||||
public void setSale(String sale) {
|
||||
this.sale = sale;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,76 +0,0 @@
|
|||
package com.stone.shop.model;
|
||||
|
||||
import cn.bmob.v3.BmobObject;
|
||||
|
||||
/**
|
||||
* 博学堂讲座实体类
|
||||
* @date 2014-5-10
|
||||
* @author Stone
|
||||
*/
|
||||
public class BXTNews extends BmobObject{
|
||||
|
||||
private String title; //标题
|
||||
private String topic; //讲座主题
|
||||
private String speaker; //主 讲 人
|
||||
private String time; //讲座时间
|
||||
private String location; //讲座地点
|
||||
private String holder1; //主办单位
|
||||
private String holder2; //承办单位
|
||||
private String points; //主讲内容提要
|
||||
private String speakerinfo; //主讲人简介
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
public String getTopic() {
|
||||
return topic;
|
||||
}
|
||||
public String getSpeaker() {
|
||||
return speaker;
|
||||
}
|
||||
public String getTime() {
|
||||
return time;
|
||||
}
|
||||
public String getLocation() {
|
||||
return location;
|
||||
}
|
||||
public String getHolder1() {
|
||||
return holder1;
|
||||
}
|
||||
public String getHolder2() {
|
||||
return holder2;
|
||||
}
|
||||
public String getPoints() {
|
||||
return points;
|
||||
}
|
||||
public String getSpeakerinfo() {
|
||||
return speakerinfo;
|
||||
}
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
public void setTopic(String topic) {
|
||||
this.topic = topic;
|
||||
}
|
||||
public void setSpeaker(String speaker) {
|
||||
this.speaker = speaker;
|
||||
}
|
||||
public void setTime(String time) {
|
||||
this.time = time;
|
||||
}
|
||||
public void setLocation(String location) {
|
||||
this.location = location;
|
||||
}
|
||||
public void setHolder1(String holder1) {
|
||||
this.holder1 = holder1;
|
||||
}
|
||||
public void setHolder2(String holder2) {
|
||||
this.holder2 = holder2;
|
||||
}
|
||||
public void setPoints(String points) {
|
||||
this.points = points;
|
||||
}
|
||||
public void setSpeakerinfo(String speakerinfo) {
|
||||
this.speakerinfo = speakerinfo;
|
||||
}
|
||||
}
|
|
@ -1,99 +0,0 @@
|
|||
package com.stone.shop.model;
|
||||
|
||||
import cn.bmob.v3.BmobUser;
|
||||
|
||||
/**
|
||||
* 用户实体类
|
||||
* @date 2014-4-24
|
||||
* @author Stone
|
||||
*/
|
||||
public class User extends BmobUser {
|
||||
|
||||
public static String userId;
|
||||
|
||||
|
||||
|
||||
private String sex; // 性别
|
||||
private String phone; // 电话
|
||||
private String qq; // QQ
|
||||
private String school = "湖北工业大学"; // 学校
|
||||
private String cademy; // 学院
|
||||
private String dorPart; // 校区
|
||||
private String dorNum; // 寝室号
|
||||
private String state = "未登陆"; // 登录状态
|
||||
private String type = "普通用户"; // 用户类型(普通用户、黑名单、中奖者)
|
||||
//private BmobFile picUser; // 头像
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getSex() {
|
||||
return sex;
|
||||
}
|
||||
|
||||
public void setSex(String sex) {
|
||||
this.sex = sex;
|
||||
}
|
||||
|
||||
public String getPhone() {
|
||||
return phone;
|
||||
}
|
||||
|
||||
public void setPhone(String phone) {
|
||||
this.phone = phone;
|
||||
}
|
||||
|
||||
public String getQQ() {
|
||||
return qq;
|
||||
}
|
||||
|
||||
public void setQQ(String qq) {
|
||||
this.qq = qq;
|
||||
}
|
||||
|
||||
public String getSchool() {
|
||||
return school;
|
||||
}
|
||||
|
||||
public void setSchool(String school) {
|
||||
this.school = school;
|
||||
}
|
||||
|
||||
public String getCademy() {
|
||||
return cademy;
|
||||
}
|
||||
|
||||
public void setCademy(String cademy) {
|
||||
this.cademy = cademy;
|
||||
}
|
||||
|
||||
public String getDorPart() {
|
||||
return dorPart;
|
||||
}
|
||||
|
||||
public void setDorPart(String dorPart) {
|
||||
this.dorPart = dorPart;
|
||||
}
|
||||
|
||||
public String getDorNum() {
|
||||
return dorNum;
|
||||
}
|
||||
|
||||
public void setDorNum(String dorNum) {
|
||||
this.dorNum = dorNum;
|
||||
}
|
||||
|
||||
public String getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
public void setState(String state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,58 +0,0 @@
|
|||
package com.stone.shop.model;
|
||||
|
||||
import cn.bmob.v3.BmobObject;
|
||||
|
||||
/**
|
||||
* 店铺评论实体类
|
||||
* @date 2014-5-3
|
||||
* @author Stone
|
||||
*/
|
||||
public class SComment extends BmobObject {
|
||||
|
||||
private String shopID;
|
||||
private String shopName;
|
||||
private String userID;
|
||||
private String userName;
|
||||
private String content;
|
||||
|
||||
public String getShopID() {
|
||||
return shopID;
|
||||
}
|
||||
|
||||
public void setShopID(String shopID) {
|
||||
this.shopID = shopID;
|
||||
}
|
||||
|
||||
public String getShopName() {
|
||||
return shopName;
|
||||
}
|
||||
|
||||
public void setShopName(String shopName) {
|
||||
this.shopName = shopName;
|
||||
}
|
||||
|
||||
public String getUserID() {
|
||||
return userID;
|
||||
}
|
||||
|
||||
public void setUserID(String userID) {
|
||||
this.userID = userID;
|
||||
}
|
||||
|
||||
public String getUserName() {
|
||||
return userName;
|
||||
}
|
||||
|
||||
public void setUserName(String userName) {
|
||||
this.userName = userName;
|
||||
}
|
||||
|
||||
public String getContent() {
|
||||
return content;
|
||||
}
|
||||
|
||||
public void setContent(String content) {
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
package com.stone.shop.model;
|
||||
|
||||
import cn.bmob.v3.BmobObject;
|
||||
|
||||
/**
|
||||
* 博学堂讲座实体类
|
||||
* @date 2014-5-10
|
||||
* @author Stone
|
||||
*/
|
||||
public class BXTNews extends BmobObject{
|
||||
|
||||
//private String id;
|
||||
|
||||
private String title; //标题
|
||||
private String topic; //讲座主题
|
||||
private String speaker; //主 讲 人
|
||||
private String time; //讲座时间
|
||||
private String location; //讲座地点
|
||||
private String holder1; //主办单位
|
||||
private String holder2; //承办单位
|
||||
private String points; //主讲内容提要
|
||||
private String speakerinfo; //主讲人简介
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
public String getTopic() {
|
||||
return topic;
|
||||
}
|
||||
public String getSpeaker() {
|
||||
return speaker;
|
||||
}
|
||||
public String getTime() {
|
||||
return time;
|
||||
}
|
||||
public String getLocation() {
|
||||
return location;
|
||||
}
|
||||
public String getHolder1() {
|
||||
return holder1;
|
||||
}
|
||||
public String getHolder2() {
|
||||
return holder2;
|
||||
}
|
||||
public String getPoints() {
|
||||
return points;
|
||||
}
|
||||
public String getSpeakerinfo() {
|
||||
return speakerinfo;
|
||||
}
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
public void setTopic(String topic) {
|
||||
this.topic = topic;
|
||||
}
|
||||
public void setSpeaker(String speaker) {
|
||||
this.speaker = speaker;
|
||||
}
|
||||
public void setTime(String time) {
|
||||
this.time = time;
|
||||
}
|
||||
public void setLocation(String location) {
|
||||
this.location = location;
|
||||
}
|
||||
public void setHolder1(String holder1) {
|
||||
this.holder1 = holder1;
|
||||
}
|
||||
public void setHolder2(String holder2) {
|
||||
this.holder2 = holder2;
|
||||
}
|
||||
public void setPoints(String points) {
|
||||
this.points = points;
|
||||
}
|
||||
public void setSpeakerinfo(String speakerinfo) {
|
||||
this.speakerinfo = speakerinfo;
|
||||
}
|
||||
}
|
|
@ -1,756 +0,0 @@
|
|||
package com.stone.util;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.RandomAccessFile;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.ContentUris;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Bitmap.CompressFormat;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
import android.provider.MediaStore;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
import junit.framework.Assert;
|
||||
|
||||
/**
|
||||
* 工具类
|
||||
*
|
||||
* @date 2014-5-9
|
||||
* @author Stone
|
||||
*/
|
||||
|
||||
public class Util {
|
||||
|
||||
/**
|
||||
* 判断电话号码是否有效
|
||||
*
|
||||
* @param phoneNumber
|
||||
* @return true 有效 / false 无效
|
||||
*/
|
||||
|
||||
public static boolean isPhoneNumberValid(String phoneNumber) {
|
||||
|
||||
boolean isValid = false;
|
||||
|
||||
String expression = "((^(13|15|18)[0-9]{9}$)|(^0[1,2]{1}\\d{1}-?\\d{8}$)|(^0[3-9] {1}\\d{2}-?\\d{7,8}$)|(^0[1,2]{1}\\d{1}-?\\d{8}-(\\d{1,4})$)|(^0[3-9]{1}\\d{2}-? \\d{7,8}-(\\d{1,4})$))";
|
||||
CharSequence inputStr = phoneNumber;
|
||||
|
||||
Pattern pattern = Pattern.compile(expression);
|
||||
Matcher matcher = pattern.matcher(inputStr);
|
||||
|
||||
if (matcher.matches()) {
|
||||
isValid = true;
|
||||
}
|
||||
return isValid;
|
||||
}
|
||||
|
||||
// 判断网络是否连接
|
||||
public static boolean isNetworkConnected(Context context) {
|
||||
if (context != null) {
|
||||
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
|
||||
.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
NetworkInfo mNetworkInfo = mConnectivityManager
|
||||
.getActiveNetworkInfo();
|
||||
if (mNetworkInfo != null) {
|
||||
return mNetworkInfo.isAvailable();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static final String TAG = "SDK_Sample.Util";
|
||||
|
||||
private static Dialog mProgressDialog;
|
||||
private static Toast mToast;
|
||||
|
||||
/* Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。
|
||||
* @param src byte[] data
|
||||
* @return hex string
|
||||
*/
|
||||
public static String bytesToHexString(byte[] src){
|
||||
StringBuilder stringBuilder = new StringBuilder("");
|
||||
String nullreplace="";
|
||||
if (src == null || src.length <= 0) {
|
||||
return nullreplace;
|
||||
}
|
||||
for (int i = 0; i < src.length; i++) {
|
||||
int v = src[i] & 0xFF;
|
||||
String hv = Integer.toHexString(v);
|
||||
if (hv.length() < 2) {
|
||||
stringBuilder.append(0);
|
||||
}
|
||||
stringBuilder.append(hv);
|
||||
}
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
/**
|
||||
* Convert hex string to byte[]
|
||||
* @param hexString the hex string
|
||||
* @return byte[]
|
||||
*/
|
||||
public static byte[] hexStringToBytes(String hexString) {
|
||||
byte[] nullreplace=null;
|
||||
if (hexString == null || "".equals(hexString)) {
|
||||
return nullreplace;
|
||||
}
|
||||
hexString = hexString.toUpperCase();
|
||||
int length = hexString.length() / 2;
|
||||
char[] hexChars = hexString.toCharArray();
|
||||
byte[] d = new byte[length];
|
||||
for (int i = 0; i < length; i++) {
|
||||
int pos = i * 2;
|
||||
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
|
||||
}
|
||||
return d;
|
||||
}
|
||||
/**
|
||||
* Convert char to byte
|
||||
* @param c char
|
||||
* @return byte
|
||||
*/
|
||||
private static byte charToByte(char c) {
|
||||
return (byte) "0123456789ABCDEF".indexOf(c);
|
||||
}
|
||||
|
||||
/*
|
||||
* 16进制数字字符集
|
||||
*/
|
||||
private static String hexString="0123456789ABCDEF";
|
||||
/*
|
||||
* 将字符串编码成16进制数字,适用于所有字符(包括中文)
|
||||
*/
|
||||
public static String toHexString(String str)
|
||||
{
|
||||
//根据默认编码获取字节数组
|
||||
byte[] bytes = null;
|
||||
try {
|
||||
bytes = str.getBytes("UTF-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
Logger logger = Logger.getLogger("lavasoft");
|
||||
logger.log(Level.SEVERE, "sthwrong", e);
|
||||
}
|
||||
if (bytes == null)
|
||||
return null;
|
||||
StringBuilder sb=new StringBuilder(bytes.length*2);
|
||||
//将字节数组中每个字节拆解成2位16进制整数
|
||||
for(int i=0;i<bytes.length;i++)
|
||||
{
|
||||
sb.append(hexString.charAt((bytes[i]&0xf0)>>4));
|
||||
sb.append(hexString.charAt(bytes[i]&0x0f));
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
//转换十六进制编码为字符串
|
||||
public static String hexToString(String s)
|
||||
{
|
||||
if("0x".equals(s.substring(0, 2)))
|
||||
{
|
||||
s =s.substring(2);
|
||||
}
|
||||
byte[] baKeyword = new byte[s.length()/2];
|
||||
for(int i = 0; i < baKeyword.length; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
baKeyword[i] = (byte)(0xff & Integer.parseInt(s.substring(i*2, i*2+2),16));
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Logger logger = Logger.getLogger("lavasoft");
|
||||
logger.log(Level.SEVERE, "sthwrong", e);
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
s = new String(baKeyword, "utf-8");//UTF-16le:Not
|
||||
}
|
||||
catch (Exception e1)
|
||||
{
|
||||
Logger logger = Logger.getLogger("lavasoft");
|
||||
logger.log(Level.SEVERE, "sthwrong", e1);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
|
||||
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
||||
bmp.compress(CompressFormat.PNG, 100, output);
|
||||
if (needRecycle) {
|
||||
bmp.recycle();
|
||||
}
|
||||
|
||||
byte[] result = output.toByteArray();
|
||||
try {
|
||||
output.close();
|
||||
} catch (Exception e) {
|
||||
Logger logger = Logger.getLogger("lavasoft");
|
||||
logger.log(Level.SEVERE, "sthwrong", e);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static byte[] getHtmlByteArray(final String url) {
|
||||
URL htmlUrl = null;
|
||||
InputStream inStream = null;
|
||||
try {
|
||||
htmlUrl = new URL(url);
|
||||
URLConnection connection = htmlUrl.openConnection();
|
||||
HttpURLConnection httpConnection = (HttpURLConnection)connection;
|
||||
int responseCode = httpConnection.getResponseCode();
|
||||
if(responseCode == HttpURLConnection.HTTP_OK){
|
||||
inStream = httpConnection.getInputStream();
|
||||
}
|
||||
} catch (MalformedURLException e) {
|
||||
Logger logger = Logger.getLogger("lavasoft");
|
||||
logger.log(Level.SEVERE, "sthwrong", e);
|
||||
} catch (IOException e) {
|
||||
Logger logger = Logger.getLogger("lavasoft");
|
||||
logger.log(Level.SEVERE, "sthwrong", e);
|
||||
}
|
||||
byte[] data = inputStreamToByte(inStream);
|
||||
return data;
|
||||
}
|
||||
|
||||
public static byte[] inputStreamToByte(InputStream is) {
|
||||
try{
|
||||
ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
|
||||
int ch;
|
||||
while ((ch = is.read()) != -1) {
|
||||
bytestream.write(ch);
|
||||
}
|
||||
byte imgdata[] = bytestream.toByteArray();
|
||||
bytestream.close();
|
||||
return imgdata;
|
||||
}catch(Exception e){
|
||||
Logger logger = Logger.getLogger("lavasoft");
|
||||
logger.log(Level.SEVERE, "sthwrong", e);
|
||||
}
|
||||
byte[] nullreplace=new byte[0];
|
||||
return nullreplace;
|
||||
}
|
||||
|
||||
public static byte[] readFromFile(String fileName, int offset, int len) {
|
||||
byte[] nullreplace=new byte[0];
|
||||
if (fileName == null) {
|
||||
return nullreplace;
|
||||
}
|
||||
|
||||
File file = new File(fileName);
|
||||
if (!file.exists()) {
|
||||
Log.i(TAG, "readFromFile: file not found");
|
||||
return nullreplace;
|
||||
}
|
||||
|
||||
if (len == -1) {
|
||||
len = (int) file.length();
|
||||
}
|
||||
|
||||
Log.d(TAG, "readFromFile : offset = " + offset + " len = " + len + " offset + len = " + (offset + len));
|
||||
|
||||
if(offset <0){
|
||||
Log.e(TAG, "readFromFile invalid offset:" + offset);
|
||||
return nullreplace;
|
||||
}
|
||||
if(len <=0 ){
|
||||
Log.e(TAG, "readFromFile invalid len:" + len);
|
||||
return nullreplace;
|
||||
}
|
||||
if(offset + len > (int) file.length()){
|
||||
Log.e(TAG, "readFromFile invalid file len:" + file.length());
|
||||
return nullreplace;
|
||||
}
|
||||
|
||||
byte[] b = null;
|
||||
try {
|
||||
RandomAccessFile in = new RandomAccessFile(fileName, "r");
|
||||
b = new byte[len];
|
||||
in.seek(offset);
|
||||
in.readFully(b);
|
||||
in.close();
|
||||
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "readFromFile : errMsg = " + e.getMessage());
|
||||
Logger logger = Logger.getLogger("lavasoft");
|
||||
logger.log(Level.SEVERE, "sthwrong", e);
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
public static int computeSampleSize(BitmapFactory.Options options,
|
||||
|
||||
int minSideLength, int maxNumOfPixels) {
|
||||
|
||||
int initialSize = computeInitialSampleSize(options, minSideLength,
|
||||
|
||||
maxNumOfPixels);
|
||||
|
||||
int roundedSize;
|
||||
|
||||
if (initialSize <= 8) {
|
||||
|
||||
roundedSize = 1;
|
||||
|
||||
while (roundedSize < initialSize) {
|
||||
|
||||
roundedSize <<= 1;
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
roundedSize = (initialSize + 7) / 8 * 8;
|
||||
|
||||
}
|
||||
|
||||
return roundedSize;
|
||||
}
|
||||
|
||||
private static int computeInitialSampleSize(BitmapFactory.Options options,int minSideLength, int maxNumOfPixels)
|
||||
{
|
||||
double w = options.outWidth;
|
||||
double h = options.outHeight;
|
||||
int lowerBound = (maxNumOfPixels == -1) ? 1 :(int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));
|
||||
int upperBound = (minSideLength == -1) ? 128 :(int) Math.min(Math.floor(w / minSideLength),Math.floor(h / minSideLength));
|
||||
if (upperBound < lowerBound) {
|
||||
// return the larger one when there is no overlapping zone.
|
||||
return lowerBound;
|
||||
}
|
||||
if ((maxNumOfPixels == -1) &&(minSideLength == -1)) {
|
||||
|
||||
return 1;
|
||||
|
||||
} else if (minSideLength == -1) {
|
||||
|
||||
return lowerBound;
|
||||
|
||||
} else {
|
||||
|
||||
return upperBound;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 以最省内存的方式读取图片
|
||||
*/
|
||||
public static Bitmap readBitmap(final String path){
|
||||
try{
|
||||
FileInputStream stream = new FileInputStream(new File(path+"test.jpg"));
|
||||
BitmapFactory.Options opts = new BitmapFactory.Options();
|
||||
opts.inSampleSize = 8;
|
||||
opts.inPurgeable=true;
|
||||
opts.inInputShareable=true;
|
||||
Bitmap bitmap = BitmapFactory.decodeStream(stream , null, opts);
|
||||
return bitmap;
|
||||
} catch (OutOfMemoryError e) {
|
||||
Logger logger = Logger.getLogger("lavasoft");
|
||||
logger.log(Level.SEVERE, "sthwrong", e);
|
||||
return null;
|
||||
} catch (Exception e) {
|
||||
Logger logger = Logger.getLogger("lavasoft");
|
||||
logger.log(Level.SEVERE, "sthwrong", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static final int MAX_DECODE_PICTURE_SIZE = 1920 * 1440;
|
||||
public static Bitmap extractThumbNail(final String path, final int height, final int width, final boolean crop) {
|
||||
Assert.assertTrue(path != null && !"".equals(path) && height > 0 && width > 0);
|
||||
|
||||
BitmapFactory.Options options = new BitmapFactory.Options();
|
||||
|
||||
try {
|
||||
options.inJustDecodeBounds = true;
|
||||
Bitmap tmp = BitmapFactory.decodeFile(path, options);
|
||||
if (tmp != null) {
|
||||
tmp.recycle();
|
||||
tmp = null;
|
||||
}
|
||||
Log.d(TAG, "extractThumbNail: round=" + width + "x" + height + ", crop=" + crop);
|
||||
final double beY = options.outHeight * 1.0 / height;
|
||||
final double beX = options.outWidth * 1.0 / width;
|
||||
Log.d(TAG, "extractThumbNail: extract beX = " + beX + ", beY = " + beY);
|
||||
options.inSampleSize = (int) (crop ? (beY > beX ? beX : beY) : (beY < beX ? beX : beY));
|
||||
if (options.inSampleSize <= 1) {
|
||||
options.inSampleSize = 1;
|
||||
}
|
||||
|
||||
// NOTE: out of memory error
|
||||
while (options.outHeight * options.outWidth / options.inSampleSize > MAX_DECODE_PICTURE_SIZE) {
|
||||
options.inSampleSize++;
|
||||
}
|
||||
|
||||
int newHeight = height;
|
||||
int newWidth = width;
|
||||
if (crop) {
|
||||
if (beY > beX) {
|
||||
newHeight = (int) (newWidth * 1.0 * options.outHeight / options.outWidth);
|
||||
} else {
|
||||
newWidth = (int) (newHeight * 1.0 * options.outWidth / options.outHeight);
|
||||
}
|
||||
} else {
|
||||
if (beY < beX) {
|
||||
newHeight = (int) (newWidth * 1.0 * options.outHeight / options.outWidth);
|
||||
} else {
|
||||
newWidth = (int) (newHeight * 1.0 * options.outWidth / options.outHeight);
|
||||
}
|
||||
}
|
||||
|
||||
options.inJustDecodeBounds = false;
|
||||
|
||||
Log.i(TAG, "bitmap required size=" + newWidth + "x" + newHeight + ", orig=" + options.outWidth + "x" + options.outHeight + ", sample=" + options.inSampleSize);
|
||||
Bitmap bm = BitmapFactory.decodeFile(path, options);
|
||||
if (bm == null) {
|
||||
Log.e(TAG, "bitmap decode failed");
|
||||
return null;
|
||||
}
|
||||
|
||||
Log.i(TAG, "bitmap decoded size=" + bm.getWidth() + "x" + bm.getHeight());
|
||||
final Bitmap scale = Bitmap.createScaledBitmap(bm, newWidth, newHeight, true);
|
||||
if (scale != null) {
|
||||
bm.recycle();
|
||||
bm = scale;
|
||||
}
|
||||
|
||||
if (crop) {
|
||||
final Bitmap cropped = Bitmap.createBitmap(bm, (bm.getWidth() - width) >> 1, (bm.getHeight() - height) >> 1, width, height);
|
||||
if (cropped == null) {
|
||||
return bm;
|
||||
}
|
||||
|
||||
bm.recycle();
|
||||
bm = cropped;
|
||||
Log.i(TAG, "bitmap croped size=" + bm.getWidth() + "x" + bm.getHeight());
|
||||
}
|
||||
return bm;
|
||||
|
||||
} catch (final OutOfMemoryError e) {
|
||||
Log.e(TAG, "decode bitmap failed: " + e.getMessage());
|
||||
Logger logger = Logger.getLogger("lavasoft");
|
||||
logger.log(Level.SEVERE, "sthwrong", e);
|
||||
options = null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static final void showResultDialog(Context context, String msg,
|
||||
String title) {
|
||||
if(msg == null)
|
||||
return;
|
||||
String rmsg = msg.replace(",", "\n");
|
||||
Log.d("Util", rmsg);
|
||||
new AlertDialog.Builder(context).setTitle(title).setMessage(rmsg)
|
||||
.setNegativeButton("知道了", null).create().show();
|
||||
}
|
||||
|
||||
public static final void showProgressDialog(Context context, String title,
|
||||
String message) {
|
||||
dismissDialog();
|
||||
if (TextUtils.isEmpty(title)) {
|
||||
title = "请稍候";
|
||||
}
|
||||
if (TextUtils.isEmpty(message)) {
|
||||
message = "正在加载...";
|
||||
}
|
||||
mProgressDialog = ProgressDialog.show(context, title, message);
|
||||
}
|
||||
|
||||
public static AlertDialog showConfirmCancelDialog(Context context,String message,DialogInterface.OnClickListener posListener)
|
||||
{
|
||||
AlertDialog dlg = new AlertDialog.Builder(context).setMessage(message).setPositiveButton("确认", posListener).setNegativeButton("取消", null).create();
|
||||
dlg.setCanceledOnTouchOutside(false);
|
||||
dlg.show();
|
||||
return dlg;
|
||||
}
|
||||
public static final void dismissDialog() {
|
||||
if (mProgressDialog != null) {
|
||||
mProgressDialog.dismiss();
|
||||
mProgressDialog = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 打印消息并且用Toast显示消息
|
||||
*
|
||||
* @param activity
|
||||
* @param message
|
||||
* @param logLevel
|
||||
* 填d, w, e分别代表debug, warn, error; 默认是debug
|
||||
*/
|
||||
public static final void toastMessage(final Activity activity,
|
||||
final String message, String logLevel) {
|
||||
if ("w".equals(logLevel)) {
|
||||
Log.w("sdkDemo", message);
|
||||
} else if ("e".equals(logLevel)) {
|
||||
Log.e("sdkDemo", message);
|
||||
} else {
|
||||
Log.d("sdkDemo", message);
|
||||
}
|
||||
activity.runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (mToast != null) {
|
||||
mToast.cancel();
|
||||
mToast = null;
|
||||
}
|
||||
mToast = Toast.makeText(activity, message, Toast.LENGTH_SHORT);
|
||||
mToast.show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 打印消息并且用Toast显示消息
|
||||
*
|
||||
* @param activity
|
||||
* @param message
|
||||
* @param logLevel
|
||||
* 填d, w, e分别代表debug, warn, error; 默认是debug
|
||||
*/
|
||||
public static final void toastMessage(final Activity activity,
|
||||
final String message) {
|
||||
toastMessage(activity, message, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据一个网络连接(String)获取bitmap图像
|
||||
*
|
||||
* @param imageUri
|
||||
* @return
|
||||
* @throws MalformedURLException
|
||||
*/
|
||||
public static Bitmap getbitmap(String imageUri) {
|
||||
Log.v(TAG, "getbitmap:" + imageUri);
|
||||
// 显示网络上的图片
|
||||
Bitmap bitmap = null;
|
||||
try {
|
||||
URL myFileUrl = new URL(imageUri);
|
||||
HttpURLConnection conn = (HttpURLConnection) myFileUrl
|
||||
.openConnection();
|
||||
conn.setDoInput(true);
|
||||
conn.connect();
|
||||
InputStream is = conn.getInputStream();
|
||||
bitmap = BitmapFactory.decodeStream(is);
|
||||
is.close();
|
||||
|
||||
Log.v(TAG, "image download finished." + imageUri);
|
||||
} catch (OutOfMemoryError e) {
|
||||
Logger logger = Logger.getLogger("lavasoft");
|
||||
logger.log(Level.SEVERE, "sthwrong", e);
|
||||
bitmap = null;
|
||||
} catch (IOException e) {
|
||||
Logger logger = Logger.getLogger("lavasoft");
|
||||
logger.log(Level.SEVERE, "sthwrong", e);
|
||||
Log.v(TAG, "getbitmap bmp fail---");
|
||||
bitmap = null;
|
||||
}
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
public static void release() {
|
||||
mProgressDialog = null;
|
||||
mToast = null;
|
||||
}
|
||||
|
||||
// =========
|
||||
// =通过URI获取本地图片的path
|
||||
// =兼容android 5.0
|
||||
// ==========
|
||||
|
||||
public static final String ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT";
|
||||
public static final int Build_VERSION_KITKAT = 19;
|
||||
public static String getPath(final Context context, final Uri uri) {
|
||||
|
||||
final boolean isKitKat = Build.VERSION.SDK_INT >= 19;
|
||||
|
||||
// DocumentProvider
|
||||
if (isKitKat && isDocumentUri(context, uri)) {
|
||||
// ExternalStorageProvider
|
||||
if (isExternalStorageDocument(uri)) {
|
||||
final String docId = getDocumentId(uri);
|
||||
final String[] split = docId.split(":");
|
||||
final String type = split[0];
|
||||
|
||||
if ("primary".equalsIgnoreCase(type)) {
|
||||
return Environment.getExternalStorageDirectory() + "/" + split[1];
|
||||
}
|
||||
|
||||
}
|
||||
// DownloadsProvider
|
||||
else if (isDownloadsDocument(uri)) {
|
||||
|
||||
final String id = getDocumentId(uri);
|
||||
final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),
|
||||
Long.valueOf(id));
|
||||
|
||||
return getDataColumn(context, contentUri, null, null);
|
||||
}
|
||||
// MediaProvider
|
||||
else if (isMediaDocument(uri)) {
|
||||
final String docId = getDocumentId(uri);
|
||||
final String[] split = docId.split(":");
|
||||
final String type = split[0];
|
||||
|
||||
Uri contentUri = null;
|
||||
if ("image".equals(type)) {
|
||||
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
|
||||
} else if ("video".equals(type)) {
|
||||
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
|
||||
} else if ("audio".equals(type)) {
|
||||
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
|
||||
}
|
||||
|
||||
final String selection = "_id=?";
|
||||
final String[] selectionArgs = new String[] { split[1] };
|
||||
|
||||
return getDataColumn(context, contentUri, selection, selectionArgs);
|
||||
}
|
||||
}
|
||||
// MediaStore (and general)
|
||||
else if ("content".equalsIgnoreCase(uri.getScheme())) {
|
||||
|
||||
// Return the remote address
|
||||
if (isGooglePhotosUri(uri))
|
||||
return uri.getLastPathSegment();
|
||||
|
||||
return getDataColumn(context, uri, null, null);
|
||||
}
|
||||
// File
|
||||
else if ("file".equalsIgnoreCase(uri.getScheme())) {
|
||||
return uri.getPath();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static final String PATH_DOCUMENT = "document";
|
||||
|
||||
/**
|
||||
* Test if the given URI represents a {@link Document} backed by a
|
||||
* {@link DocumentsProvider}.
|
||||
*/
|
||||
private static boolean isDocumentUri(Context context, Uri uri) {
|
||||
final List<String> paths = uri.getPathSegments();
|
||||
if (paths.size() < 2) {
|
||||
return false;
|
||||
}
|
||||
if (!PATH_DOCUMENT.equals(paths.get(0))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static String getDocumentId(Uri documentUri) {
|
||||
final List<String> paths = documentUri.getPathSegments();
|
||||
if (paths.size() < 2) {
|
||||
throw new IllegalArgumentException("Not a document: " + documentUri);
|
||||
}
|
||||
if (!PATH_DOCUMENT.equals(paths.get(0))) {
|
||||
throw new IllegalArgumentException("Not a document: " + documentUri);
|
||||
}
|
||||
return paths.get(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of the data column for this Uri. This is useful for
|
||||
* MediaStore Uris, and other file-based ContentProviders.
|
||||
*
|
||||
* @param context
|
||||
* The context.
|
||||
* @param uri
|
||||
* The Uri to query.
|
||||
* @param selection
|
||||
* (Optional) Filter used in the query.
|
||||
* @param selectionArgs
|
||||
* (Optional) Selection arguments used in the query.
|
||||
* [url=home.php?mod=space&uid=7300]@return[/url] The value of
|
||||
* the _data column, which is typically a file path.
|
||||
*/
|
||||
public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
|
||||
|
||||
Cursor cursor = null;
|
||||
final String column = "_data";
|
||||
final String[] projection = { column };
|
||||
|
||||
try {
|
||||
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
|
||||
if (cursor != null && cursor.moveToFirst()) {
|
||||
final int index = cursor.getColumnIndexOrThrow(column);
|
||||
return cursor.getString(index);
|
||||
}
|
||||
} finally {
|
||||
if (cursor != null)
|
||||
cursor.close();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param uri
|
||||
* The Uri to check.
|
||||
* @return Whether the Uri authority is ExternalStorageProvider.
|
||||
*/
|
||||
public static boolean isExternalStorageDocument(Uri uri) {
|
||||
return "com.android.externalstorage.documents".equals(uri.getAuthority());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param uri
|
||||
* The Uri to check.
|
||||
* @return Whether the Uri authority is DownloadsProvider.
|
||||
*/
|
||||
public static boolean isDownloadsDocument(Uri uri) {
|
||||
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param uri
|
||||
* The Uri to check.
|
||||
* @return Whether the Uri authority is MediaProvider.
|
||||
*/
|
||||
public static boolean isMediaDocument(Uri uri) {
|
||||
return "com.android.providers.media.documents".equals(uri.getAuthority());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param uri
|
||||
* The Uri to check.
|
||||
* @return Whether the Uri authority is Google Photos.
|
||||
*/
|
||||
public static boolean isGooglePhotosUri(Uri uri) {
|
||||
return "com.google.android.apps.photos.content".equals(uri.getAuthority());
|
||||
}
|
||||
}
|
Binary file not shown.
Loading…
Reference in New Issue