linwoain的个人blog

知我者谓我心忧,不知我者谓我何求

0%

greenDAO 是一个优秀的Android ORM框架。与之前使用xUtils,Afinal等框架不同,不是使用注解Bean的方法。而是通过一个java工程,生成专用的java bean与dao文件。将之加入到所要用到的android工程中。
在AS中,首先创建一个Android Project

新建一个java工程,在AS中并没有直接创建java工程的选项,但是有创建java libray可以使用。创建一个java library的module,module名称任意,这里我用的generator
在app的build.gradle中加入依赖:

1
compile 'de.greenrobot:greendao:2.0.0'//android的工程必须在generator的build.gradle中加入依赖
1
compile 'de.greenrobot:greendao-generator:2.0.0' //生成bean与dao文件所需,生成后可将其删除

在generator任意类里添加java标准main函数,并添加相应代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.linwoain;
import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;
/**
* Created by snow0358530 on 2015/9/12.
*/
public class BeanGenerator {
public static void main(String[] args) throws Exception {
Schema schema = new Schema(1, "com.linwoain.daotest.bean");
Entity person = schema.addEntity("Person");//创建一个Person类
person.addIdProperty().autoincrement();
person.addStringProperty("name").notNull();
person.addBooleanProperty("isMan");
person.addIntProperty("age");
new DaoGenerator().generateAll(schema,"./app/main/src/java");//这里可以指定生成的java所在路径,此路径为android工程下java文件所在路径
}
}
阅读全文 »

使用androidannotations封装通信非常简单,只要定义一个接口即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.linwoain.androidannotationdemo.rest;
import com.linwoain.androidannotationdemo.bean.User;
import org.androidannotations.annotations.rest.Get;
import org.androidannotations.annotations.rest.Post;
import org.androidannotations.annotations.rest.Rest;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.json.GsonHttpMessageConverter;
/**
* Created by linwoain on 2015/8/27.
* Rest服务
*/
@Rest(rootUrl = "http://192.168.1.102:8080/Hello", converters = { GsonHttpMessageConverter.class})
public interface RestTest {
@Get("/post_hello?user={user}")
String getName(String user);
@Post("/get_user?name={name}")
ResponseEntity<User> getUser(String name);
}
阅读全文 »

自定义控件,一般都是通过继承已有的view类,如TextView,Button。。。或者直接继承其父类View。这次因为要加载图片。所以继承自ImageView。并且实现了一个通过属性来控制的加载时间。首先是自定义的类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/**
*知我者为我心忧,不知我者谓我何求!
*linwoain@outlook.com
*作者 linwoain
*日期 2014/11/7 9:17
*/
package com.linwoain.TestAndroid.fragment;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import com.linwoain.TestAndroid.R;
import java.util.Timer;
import java.util.TimerTask;
/**
* 自定义控件,实现
* @author linwoain
* @version 2014/11/7 9:17
*/
public class AlphaImageView extends ImageView {
private static final int SPEED = 300;//每隔多少毫秒透明度改变一次
private int alphaDelta = 0;//图像透明度每次改变的大小
//记录图片当前的透明度
private int curAlpha = 0;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0x123) {
curAlpha += alphaDelta;
if (curAlpha > 255) {
curAlpha = 255;
AlphaImageView.this.setAlpha(curAlpha);
}
}
}
};
public AlphaImageView(Context context) {
this(context, null);
}
public AlphaImageView(Context context, AttributeSet attrs) {
super(context, attrs);

TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AlphaImageView);
int duration = typedArray.getInt(R.styleable.AlphaImageView_duration, 0);//默认不透明
alphaDelta = 255 * SPEED / duration;
typedArray.recycle();
}
@Override
protected void onDraw(Canvas canvas) {
this.setAlpha(curAlpha);
super.onDraw(canvas);
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = 0x123;
if (curAlpha >= 255) {
timer.cancel();
} else {
handler.sendMessage(message);
}
}
}, 0, SPEED);
}
}
阅读全文 »

先看一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
public class BookmarksToClipboardActivity extends Activity {
BookmarkAdapter adapter;

ListView bookmarkList;

EditText search;

BookmarkApplication application;

Animation fadeIn;

ClipboardManager clipboardManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN);

setContentView(R.layout.bookmarks);

bookmarkList = (ListView) findViewById(R.id.bookmarkList);
search = (EditText) findViewById(R.id.search);
application = (BookmarkApplication) getApplication();
fadeIn = AnimationUtils.loadAnimation(this, anim.fade_in);
clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

View updateBookmarksButton1 = findViewById(R.id.updateBookmarksButton1);
updateBookmarksButton1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
updateBookmarksClicked();
}
});

View updateBookmarksButton2 = findViewById(R.id.updateBookmarksButton2);
updateBookmarksButton2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
updateBookmarksClicked();
}
});

bookmarkList.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> p, View v, int pos, long id) {
Bookmark selectedBookmark = (Bookmark) p.getAdapter().getItem(pos);
bookmarkListItemClicked(selectedBookmark);
}
});

initBookmarkList();
}

void initBookmarkList() {
adapter = new BookmarkAdapter(this);
bookmarkList.setAdapter(adapter);
}

void updateBookmarksClicked() {
UpdateBookmarksTask task = new UpdateBookmarksTask();

task.execute(search.getText().toString(), application.getUserId());
}
private static final String BOOKMARK_URL = //
"http://www.bookmarks.com/bookmarks/{userId}?search={search}";
class UpdateBookmarksTask extends AsyncTask<String, Void, Bookmarks> {

@Override
protected Bookmarks doInBackground(String... params) {
String searchString = params[0];
String userId = params[1];

RestTemplate client = new RestTemplate();
HashMap<String, Object> args = new HashMap<String, Object>();
args.put("search", searchString);
args.put("userId", userId);
HttpHeaders httpHeaders = new HttpHeaders();
HttpEntity<Bookmarks> request = new HttpEntity<Bookmarks>(httpHeaders);
ResponseEntity<Bookmarks> response = client.exchange( //
BOOKMARK_URL, HttpMethod.GET, request, Bookmarks.class, args);
Bookmarks bookmarks = response.getBody();

return bookmarks;
}

@Override
protected void onPostExecute(Bookmarks result) {
adapter.updateBookmarks(result);
bookmarkList.startAnimation(fadeIn);
}
}

void bookmarkListItemClicked(Bookmark selectedBookmark) {
clipboardManager.setText(selectedBookmark.getUrl());
}

}

这是一段普通的代码,而使用了Android Annotations之后的代码:

阅读全文 »