package forezp.com.douyalibrary.cache;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.PixelFormat;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.RandomAccessFile;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
/**
* how to use ?
* Acache acache=Acache.get(this);
* acache.put("hi","hello world");
*
* Note note=new Note();
* note.setComment("this model");
* note.setText("generateBygreenDao");
* acache.put("model", note);
*
*/
/**
* Created by b508a on 2016/1/26.
*/
public class Acache {
public static final int TIME_HOUR = 60 * 60; //缓存一个小时
public static final int TIME_MINUTE = 60; //混存一分钟
public static final int TIME_DAY = TIME_HOUR * 12; //缓存一个白天 12个小时
public static final int TIME_THREE_DAY = 6 * TIME_DAY; //缓存三天
public static final int TIME_MONTH=60*TIME_DAY;//缓存一个月
private static final int MAX_SIZE = 1000 * 1000 * 50; // 50 mb
private static final int MAX_COUNT = Integer.MAX_VALUE; // 不限制存放数据的数量
private static Map<String, Acache> mInstanceMap = new HashMap<String, Acache>();
private ACacheManager mCache;
/**
* 根据默认的缓存路径和缓存数量,大小创建相应的缓存管理器
* @param ctx
* @return
*/
public static Acache get(Context ctx) {
return get(ctx, "ACache");
}
public static Acache get(Context ctx, String cacheName) {
File f = new File(ctx.getCacheDir(), cacheName);
return get(f, MAX_SIZE, MAX_COUNT);
}
public static Acache get(File cacheDir) {
return get(cacheDir, MAX_SIZE, MAX_COUNT);
}
public static Acache get(Context ctx, long max_zise, int max_count) {
File f = new File(ctx.getCacheDir(), "ACache");
return get(f, max_zise, max_count);
}
/**
* 进行获取缓存管理器,看缓存管理器的Map中是否已经存在指定的管理器,如果不存在进行创建,并且加入到map中
* @param cacheDir
* @param max_zise
* @param max_count
* @return
*/
public static Acache get(File cacheDir, long max_zise, int max_count) {
Acache manager = mInstanceMap.get(cacheDir.getAbsoluteFile() + myPid());
if (manager == null) {
manager = new Acache(cacheDir, max_zise, max_count);
mInstanceMap.put(cacheDir.getAbsolutePath() + myPid(), manager);
}
return manager;
}
private static String myPid() {
return "_" + android.os.Process.myPid();
}
/**
* 进行根据缓存路径,缓存数量和缓存大小创建一个缓存管理器
* @param cacheDir
* @param max_size
* @param max_count
*/
private Acache(File cacheDir, long max_size, int max_count) {
if (!cacheDir.exists() && !cacheDir.mkdirs()) {
throw new RuntimeException("can't make dirs in "
+ cacheDir.getAbsolutePath());
}
mCache = new ACacheManager(cacheDir, max_size, max_count);
}
// =======================================
// ============ String数据 读写 ==============
// =======================================
/**
* 保存 String数据 到 缓存中
*
* @param key
* 保存的key
* @param value
* 保存的String数据
*/
public void put(String key, String value) {
File file = mCache.newFile(key);
BufferedWriter out = null;
try {
out = new BufferedWriter(new FileWriter(file), 1024);
out.write(value);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
mCache.put(file);
}
}
/**
* 保存 String数据 到 缓存中
*
* @param key
* 保存的key
* @param value
* 保存的String数据
* @param saveTime
* 保存的时间,单位:秒
*/
public void put(String key, String value, int saveTime) {
put(key, Utils.newStringWithDateInfo(saveTime, value));
}
/**
* 读取 String数据
*
* @param key
* @return String 数据
*/
public String getAsString(String key) {
File file = mCache.get(key);
if (!file.exists())
return null;
boolean removeFile = false;
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader(file));
String readString = "";
String currentLine;
while ((currentLine = in.readLine()) != null) {
readString += currentLine;
}
if (!Utils.isDue(readString)) {
return Utils.clearDateInfo(readString);
} else {
removeFile = true;
return null;
}
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (removeFile)
remove(key);
}
}
// =======================================
// ============= JSONObject 数据 读写 ==============
// =======================================
/**
* 保存 JSONObject数据 到 缓存中
*
* @param key
* 保存的key
* @param value
* 保存的JSON数据
*/
public void put(String key, JSONObject value) {
put(key, value.toString());
}
/**
* 保存 JSONObject数据 到 缓存中
*
* @param key
* 保存的key
* @param value
* 保存的JSONObject数据
* @param saveTime
* 保存的时间,单位:秒
*/
public void put(String key, JSONObject value, int saveTime) {
put(key, value.toString(), saveTime);
}
/**
* 读取JSONObject数据
*
* @param key
* @return JSONObject数据
*/
public JSONObject getAsJSONObject(String key) {
String JSONString = getAsString(key);
try {
JSONObject obj = new JSONObject(JSONString);
return obj;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
// =======================================
// ============ JSONArray 数据 读写 =============
// =======================================
/**
* 保存 JSONArray数据 到 缓存中
*
* @param key
* 保存的key
* @
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
* 首页分为三大模块,包括:电影、看书、音乐。而电影模块又包括最近热门电影、TOP250;看书模块包括综合、文学、流行、文化、生活五个部分;音乐模块包括流行、经典、韩系、欧美四个模块。 * 首页界面风格采用Material Design设计规范,使用了CoordinatorLayout和viewpager配合,使用behavior属性对toolbar的显示和隐藏进行了控制,tablayout和viewpager配合,viewpager切换fragment,整体界面模仿了网易云音乐。 * 抽屉界面的实现是使用DrawerLayout和NavigationView配合。 * 详情界面模仿了豆瓣app的详情界面,包括了电影详情、音乐详情、书籍详情,另外使用了webview 对详情页面和导演、演员、作者歌手的个人信息进行了展示。 * 项目整体采用mvp+rxjava+retrofit 框架,用butterknif注解,使用glide进行图片展示,另外使用了java8的拉姆达表达式,安卓原生并不支持,需要导插件。
资源推荐
资源详情
资源评论
收起资源包目录
Android仿豆瓣app,优秀毕业设计源代码,功能丰富! (291个子文件)
gradlew.bat 2KB
.gitignore 105B
.gitignore 8B
.gitignore 8B
build.gradle 2KB
build.gradle 644B
build.gradle 597B
settings.gradle 33B
gradlew 5KB
gradle-wrapper.jar 52KB
Acache.java 27KB
DateUtils.java 15KB
BitmapUtils.java 13KB
MainActivity.java 12KB
CheckUtils.java 11KB
StringUtils.java 10KB
PhoneUtils.java 9KB
FileHelper.java 9KB
FilmDetailActivity.java 7KB
BookReadingFragment.java 6KB
EasyRecyclerViewAdapter.java 6KB
ListViewUtils.java 6KB
BookReadingAdapter.java 6KB
MusicContentFragment.java 6KB
MusicAdapter.java 6KB
Top250FilmAdapter.java 6KB
FileCreaterHelper.java 6KB
CommonUtils.java 6KB
FilmDetail.java 5KB
FilmTop250Fragment.java 5KB
BookDetailActivity.java 5KB
ActivityCollector.java 5KB
ThemeUtils.java 5KB
MusicDetailActivity.java 4KB
BaseActivity.java 4KB
Books.java 4KB
ScreenUtils.java 4KB
ViewUtils.java 4KB
SdCardUtisl.java 4KB
DoubanFilmPresenter.java 4KB
FilmFragment.java 4KB
FilmGodFragment.java 4KB
FilmLiveFragment.java 4KB
NetUtils.java 4KB
UIUtils.java 4KB
FullyLinearLayoutManager.java 4KB
BasePresenter.java 4KB
BookFragment.java 3KB
MusicFragment.java 3KB
T.java 3KB
FragmentTabUtils.java 3KB
EntryActivity.java 3KB
WebviewActivity.java 3KB
BookApiUtils.java 3KB
ApiRetrofit.java 3KB
AuthorInfoActivity.java 3KB
FilmUsBoxAdapter.java 2KB
Subject.java 2KB
FilmLiveAdapter.java 2KB
BaseFragment.java 2KB
DoubanBookPresenter.java 2KB
Subjects.java 2KB
DoubanMusicPresenter.java 2KB
SPUtils.java 2KB
Md5.java 2KB
Musics.java 2KB
WxPayUtils.java 2KB
CastAdapter.java 2KB
DoubanApi.java 2KB
ImageUtils.java 2KB
ThemeColorAdapter.java 2KB
MusicApiUtils.java 2KB
Attrs.java 2KB
Md5Utils.java 2KB
LG.java 1KB
BaseFragmentActivity.java 1KB
RecommedActivity.java 1KB
Root.java 1KB
AboutActivity.java 1KB
MemCacheHelper.java 1KB
FilmLive.java 1013B
SpacesItemDecoration.java 977B
FilmPeople.java 930B
MusicViewpagerAdapter.java 923B
BookViewpagerAdapter.java 914B
IBaseView.java 877B
MyViewpagerAdapter.java 863B
Rating.java 794B
MusicRoot.java 780B
BookRoot.java 769B
Rating.java 742B
Subjects.java 735B
Directors.java 734B
Casts.java 729B
Rating.java 724B
FilmUsBox.java 665B
Images.java 657B
Tags.java 626B
Avatars.java 601B
DisplayImgUtis.java 588B
共 291 条
- 1
- 2
- 3
资源评论
- NickiMinajyeah2023-05-25资源不错,内容挺好的,有一定的使用价值,值得借鉴,感谢分享。
振华OPPO
- 粉丝: 27w+
- 资源: 532
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- QuestionTwo.java
- QuestionOne.java
- OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR).rar
- 简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习
- 南京邮电大学数学实验:熟练掌握 Matlab 软件的基本命令和操作
- 简历-求职简历-word-文件-简历模版免费分享-应届生-高颜值简历模版-个人简历模版-简约大气-大学生在校生-求职-实习
- 2017校招真题校园招聘真题算法题(37道)Python源码.zip
- 基于单片机protues仿真的多功能自动饮水机系统设计(仿真图、源代码、演示视频)
- 论文《一种修复流程挖掘事件日志中缺失活动标签的深度学习方法》翻译
- 智慧电厂相关资料发电控制的方式
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功