Skip to content

Commit a8f5133

Browse files
author
xiaoqi
committed
support more data category
1 parent 2aeee93 commit a8f5133

3 files changed

Lines changed: 100 additions & 16 deletions

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.xiaoqi.autosavesample;
2+
3+
import java.io.Serializable;
4+
5+
/**
6+
* Created by xiaoqi on 2017/1/10.
7+
*/
8+
9+
public class Example implements Serializable{
10+
}

sample/src/main/java/com/xiaoqi/autosavesample/MainActivity.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,31 @@
66
import com.processor.NeedSave;
77
import com.xqand.savehelper.SaveHelper;
88

9+
import java.util.ArrayList;
10+
911
public class MainActivity extends AppCompatActivity {
1012
@NeedSave
1113
public int a;
1214
@NeedSave
1315
public String test;
14-
16+
@NeedSave
17+
public boolean b;
18+
@NeedSave
19+
public Boolean c;
20+
@NeedSave
21+
public ArrayList<String> t;
22+
@NeedSave
23+
public Integer i;
24+
@NeedSave
25+
public Example example;
26+
@NeedSave
27+
public Float f1;
28+
@NeedSave
29+
public float f2;
30+
@NeedSave
31+
public char achar;
32+
@NeedSave
33+
public char achars[];
1534
@Override
1635
protected void onCreate(Bundle savedInstanceState) {
1736
super.onCreate(savedInstanceState);

xqauto-processor/src/main/java/com/xqand/helper/HelperClass.java

Lines changed: 70 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -59,21 +59,24 @@ public JavaFile generateCode(){
5959

6060
for (HelperSavedValues value : elementArrayList) {
6161
Name fieldName = value.getSimpleName();
62-
if(value.getFieldType().toString().equals("java.lang.String")){
63-
saveMethodBuilder.addStatement("outState.putString($S,recoverActivity.$N)", fieldName.toString
64-
().toUpperCase(),fieldName);
65-
recoverMethodBuilder.addStatement("recoverActivity.$N = savedInstanceState.getString($S)",fieldName,
66-
fieldName.toString().toUpperCase());
67-
}else if(value.getFieldType().toString().equals("int")){
68-
saveMethodBuilder.addStatement("outState.putInt($S,recoverActivity.$N)", fieldName.toString
69-
().toUpperCase(),fieldName);
70-
recoverMethodBuilder.addStatement("recoverActivity.$N = savedInstanceState.getInt($S)",fieldName,
71-
fieldName.toString().toUpperCase());
72-
}else if(value.getFieldType() instanceof Serializable){
73-
saveMethodBuilder.addStatement("outState.putSerializable($S,recoverActivity.$S)", fieldName.toString
74-
().toUpperCase(),fieldName);
75-
recoverMethodBuilder.addStatement("recoverActivity.$N = savedInstanceState.getSerializable($S)",
76-
fieldName, fieldName.toString().toUpperCase());
62+
String fieldType = value.getFieldType().toString();
63+
String type = getFieldType(fieldType);
64+
if(!type.equals("unKnow")){
65+
addMethodStatement(saveMethodBuilder,recoverMethodBuilder, type, fieldName);
66+
}else {
67+
// Class c = Class.forName(fieldType);
68+
// Class[] interfaces = c.getInterfaces();
69+
// for (Class inter : interfaces) {
70+
// saveMethodBuilder.addStatement("//$N", inter.getName());
71+
// }
72+
if( value.getFieldType() instanceof Serializable){
73+
saveMethodBuilder.addStatement("outState.putSerializable($S,recoverActivity.$S)", fieldName.toString
74+
().toUpperCase(),fieldName);
75+
recoverMethodBuilder.addStatement("recoverActivity.$N = savedInstanceState.getSerializable($S)",
76+
fieldName, fieldName.toString().toUpperCase());
77+
}else {
78+
saveMethodBuilder.addStatement("//$S", fieldType);
79+
}
7780
}
7881
}
7982
recoverMethodBuilder.endControlFlow();
@@ -102,4 +105,56 @@ private String getPackageName() {
102105
private String getCacheClassName(){
103106
return encloseElement.getSimpleName().toString() + "_Cache";
104107
}
108+
109+
private String upperFirstWord(String str){
110+
if(str != null){
111+
char[] ch = str.toCharArray();
112+
if (ch[0] >= 'a' && ch[0] <= 'z') {
113+
ch[0] = (char) (ch[0] - 32);
114+
}
115+
return new String(ch);
116+
}else {
117+
return "";
118+
}
119+
}
120+
121+
private void addSaveMethodStatement(MethodSpec.Builder saveMethodBuilder, String str, Name fieldName){
122+
saveMethodBuilder.addStatement(String.format("outState.put%s($S,recoverActivity.$N)",upperFirstWord(str)),
123+
fieldName.toString().toUpperCase(),fieldName);
124+
}
125+
126+
private void addRecoverMethodStatement(MethodSpec.Builder recoverMethodBuilder, String str, Name fieldName){
127+
recoverMethodBuilder.addStatement(String.format("recoverActivity.$N = savedInstanceState.get%s($S)",upperFirstWord(str)),
128+
fieldName, fieldName.toString().toUpperCase());
129+
}
130+
131+
private void addMethodStatement(MethodSpec.Builder saveMethodBuilder,MethodSpec.Builder recoverMethodBuilder, String str, Name fieldName){
132+
addSaveMethodStatement(saveMethodBuilder,str,fieldName);
133+
addRecoverMethodStatement(recoverMethodBuilder,str,fieldName);
134+
}
135+
136+
private String getFieldType(String fieldType){
137+
String type;
138+
if(fieldType.equals("java.lang.String")){
139+
type = "String";
140+
}else if(fieldType.equals("int") || fieldType.equals("java.lang.Integer")){
141+
type = "Int";
142+
}else if(fieldType.equals("short") || fieldType.equals("java.lang.Short")){
143+
type = "Short";
144+
}else if(fieldType.equals("double") || fieldType.equals("java.lang.Double")){
145+
type = "Double";
146+
}else if(fieldType.equals("float") || fieldType.equals("java.lang.Float")){
147+
type = "Float";
148+
}else if(fieldType.equals("boolean") || fieldType.equals("java.lang.Boolean")){
149+
type = "Boolean";
150+
}else if(fieldType.equals("char")){
151+
type = "Char";
152+
}else if(fieldType.equals("char[]")){
153+
type = "CharArray";
154+
}else {
155+
type = "unKnow";
156+
}
157+
return type;
158+
}
159+
105160
}

0 commit comments

Comments
 (0)