android studio常用数据传输
全局变量
//AppContext 是工程入口类 也就是新建个变量 添加对应的设置获取方法而已
public class AppContext extends Application {
/**
* 全局变量 调用方法
* AppContext appState = ((AppContext)getApplicationContext());
* String state = appState.getState();
* appState.setState("88888888888888");
*/
private String myState;
public String getState(){
return myState;
}
public void setState(String s){
myState = s;
}
@Override
public void onCreate() {
super.onCreate();
}
}
-------------------------------分割线-------------------------------------
Activity 跳转传值
Intent intent=new Intent(MainActivity.this,Activity2.class);
intent.putExtra("data1", "这里塞你要传递的值" );
intent.putExtra("data2", "这里塞你要传递的值" );//你可以多传几个 类型也有很多
startActivity(intent);
接收方 activity 写法
String data=getIntent().getStringExtra("data1");
String data=getIntent().getStringExtra("data2");
-------------------------------分割线-------------------------------------
Activity 跳转传输list
序列化里面的所有类 都要 implements Serializable 内部的也要写上
//例 这里是用到的bean
public static class SchedulingDataBean implements Serializable {
private String ProjectID;
private List<ScheduleEveryDayListBean> ScheduleEveryDayList;
public String getProjectID() {
return ProjectID;
}
public void setProjectID(String ProjectID) {
this.ProjectID = ProjectID;
}
public List<ScheduleEveryDayListBean> getScheduleEveryDayList() {
return ScheduleEveryDayList;
}
public void setScheduleEveryDayList(List<ScheduleEveryDayListBean> ScheduleEveryDayList) {
this.ScheduleEveryDayList = ScheduleEveryDayList;
}
public static class ScheduleEveryDayListBean implements Serializable {
private String Is_Can_Edit="";
public String getIs_Can_Edit() {
return Is_Can_Edit;
}
public void setIs_Can_Edit(String is_Can_Edit) {
Is_Can_Edit = is_Can_Edit;
}
}
}
传递方
SchedulingDataBean bean = new SchedulingDataBean();
List<SchedulingDataBean.ScheduleEveryDayListBean> listBeans = new ArrayList<>();
SchedulingDataBean.ScheduleEveryDayListBean scBean = new SchedulingDataBean.ScheduleEveryDayListBean();
bean.setProjectID("需要传的内容");
scBean.setIs_Can_Edit("子类需要传递的东西");
listBeans.add(scBean);
bean.setScheduleEveryDayList(listBeans);
Intent intent = new Intent(DataInsidePagesActivity.this, ComplaintActivity.class);
intent.putExtra("SchedulingDataBeanList", (Serializable) bean);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
接受方
String data = getIntent().getSerializableExtra("SchedulingDataBeanList");
DataInsidePagesBean schedulingDataBean = gson.fromJson(data, SchedulingDataBean.class);//转一下
-------------------------------分割线-------------------------------------
轻量级存储 就是把数据保存在系统里面 但是APP被卸载了 这些数据也就没有了,就算普通的数据缓存把,不过手机重启还是有的
SharedPreferences preferences = getSharedPreferences("user", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("dataString", data);
editor.commit();
读取
String name = preferences.getString("dataString", "没有内容");// 第二个参数是 没有数据的时候返回的内容
-------------------------------分割线-------------------------------------
存储数组
就是把数据转成String 来存 取出来的时候 转一下就好
List<String> StringData = new ArrayList<>();
for (int i = 0; i < 50; i++) {
StringData.add(i + "");
}
String data = JsonUtil.toJson(StringData);
SharedPreferences preferences = getSharedPreferences("user", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("dataList", data);
editor.commit();
读取数组
String name = preferences.getString("dataList", "没有内容");// 第二个参数是 没有数据的时候返回的内容
-------------------------------分割线-------------------------------------
图片缓存 这个比较特殊
//图片存储
private void saveBitmapToSharedPreferences(Bitmap bitmap){
// Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
//第一步:将Bitmap压缩至字节数组输出流ByteArrayOutputStream
ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 80, byteArrayOutputStream);
//第二步:利用Base64将字节数组输出流中的数据转换成字符串String
byte[] byteArray=byteArrayOutputStream.toByteArray();
String imageString=new String(Base64.encodeToString(byteArray, Base64.DEFAULT));
//第三步:将String保持至SharedPreferences
SharedPreferences sharedPreferences=getSharedPreferences("testSP", Context.MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putString("image", imageString);
editor.commit();
}
// 拿 图片缓存
private Bitmap getBitmapFromSharedPreferences(){
SharedPreferences sharedPreferences= getSharedPreferences("testSP", Context.MODE_PRIVATE);
//第一步:取出字符串形式的Bitmap
String imageString=sharedPreferences.getString("image", "");
//第二步:利用Base64将字符串转换为ByteArrayInputStream
byte[] byteArray=Base64.decode(imageString, Base64.DEFAULT);
ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(byteArray);
//第三步:利用ByteArrayInputStream生成Bitmap
Bitmap bitmap=BitmapFactory.decodeStream(byteArrayInputStream);
if (bitmap == null) { // 设置拿不到的一个替代图 这玩意容易报错
bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.portrait);
}
return bitmap ;
}
-------------------------------分割线-------------------------------------
附带一个 工具类吧
导包 compile 'com.google.code.gson:gson:2.7'
public class JsonUtil {
private static Gson gson = null;
static {
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(JsonObject.class, new JsonDeserializer<Object>() {
@Override
public Object deserialize(JsonElement jsonElement, Type type,
JsonDeserializationContext jsonDeserializationContext)
throws JsonParseException {
JsonObject jsonObject = jsonElement.getAsJsonObject();
return jsonObject;
}
});
gson = builder.disableHtmlEscaping().create();
}
public static String toJson(Object object) {
if (object == null) {
return null;
}
return gson.toJson(object);
}
public static <T> T fromJson(String content, Class<T> clazz) {
if (StringUtil.isEmpty(content) || clazz == null) {
return null;
}
try {
return gson.fromJson(content, clazz);
} catch (JsonSyntaxException e) {
e.printStackTrace();
return null;
}
}
public static <T> T fromJson(String content, TypeToken<T> token) {
if (StringUtil.isEmpty(content) || token == null) {
return null;
}
try {
return gson.fromJson(content, token.getType());
} catch (JsonSyntaxException e) {
return null;
}
}
/**
* 把json转成对应的类型。适合用于自定义数据类型,如ArrayList<Foo>等
* @param content json
* @param type 自定义类型的token。使用方法如下
* Type listType = new TypeToken<ArrayList<Foo>>(){}.getType();
* @param <T>
* @return 对应类型的对象
*/
public static <T>T fromJson(String content , Type type){
if(!StringUtil.isEmpty(content) && type != null){
try {
return gson.fromJson(content,type);
} catch (JsonSyntaxException e) {
e.printStackTrace();
}
}
return null;
}
public static Map<String, Object> toMap(Object obj) {
JsonElement element = gson.toJsonTree(obj);
return gson.fromJson(element, Map.class);
}
public static <T> T fromObject(Object obj, Class<T> clazz) {
JsonElement element = gson.toJsonTree(obj);
return gson.fromJson(element, clazz);
}
public static <T> T fromObject(Object obj, TypeToken<T> token) {
JsonElement element = gson.toJsonTree(obj);
return gson.fromJson(element, token.getType());
}
public static Map<String, Object> getMap(Map<String, Object> map, String key) {
if (map == null || key == null) {
return null;
}
Object value = map.get(key);
if (value instanceof Map) {
return (Map) value;
}
return null;
}
public static Long getLong(Map<String, Object> map, String key) {
if (map == null || key == null) {
return null;
}
Object value = map.get(key);
if (value == null) {
return null;
}
if (value instanceof Number) {
return ((Number) value).longValue();
}
try {
return Long.parseLong(value.toString());
} catch (NumberFormatException e) {
return null;
}
}
public static List<Long> getLongList(Map<String, Object> map, String key) {
if (map == null || key == null) {
return Collections.EMPTY_LIST;
}
Object value = map.get(key);
if (value == null) {
return Collections.EMPTY_LIST;
}
if (value instanceof List) {
List<Object> list = (List) value;
List<Long> longValues = new ArrayList<Long>();
for (Object i : list) {
if (i instanceof Number) {
longValues.add(((Number) i).longValue());
}
}
return longValues;
}
return Collections.EMPTY_LIST;
}
/**
* 从json中搜索,根据键的名字,返回值。
* @param json
* @param name json中的键名
* @return Object
*/
public static Object findObject(String json , String name){
Object object = null;
if(StringUtil.isEmpty(json) || StringUtil.isEmpty(name)){
return null;
}
try {
JSONObject jsonobject = new JSONObject(json);
if(!jsonobject.has(name)){
return null;
} else {
object = jsonobject.get(name);
}
} catch (JSONException e) {
e.printStackTrace();
}
return object;
}
}