android tips
TRANSCRIPT
![Page 1: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/1.jpg)
Android tipswhich simplify your life
![Page 2: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/2.jpg)
Android Studio
● beta● gradle build system● maven-based build dependencies● build variants● code completion, refactoring, templates● graphical template editor
![Page 3: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/3.jpg)
Gradleapply plugin: 'com.android.application'
android {
compileSdkVersion 20
buildToolsVersion "20.0.0"
...
![Page 4: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/4.jpg)
Gradle… defaultConfig {
applicationId "ee.ut.cs.mobile.demo"
minSdkVersion 14
targetSdkVersion 20
versionCode 1
versionName "1.0"
}
![Page 5: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/5.jpg)
Gradle...
buildTypes {
release {
runProguard false
proguardFiles 'proguard-rules.pro'
}
}
}
![Page 6: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/6.jpg)
Gradle...
buildTypes {
...
debug {
applicationIdSuffix '.debug'
}
}
}
![Page 7: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/7.jpg)
Gradle…
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.code.gson:gson:2.3'
}
![Page 8: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/8.jpg)
Gradleandroid { .... productFlavors { cs { applicationId "ee.ut.cs"
} eco { applicationId "ee.ut.eco"
} }}
![Page 9: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/9.jpg)
Gradlehttps://developer.android.com/sdk/installing/studio.htmlhttp://tools.android.com/tech-docs/new-build-system/user-guidehttp://gradleplease.appspot.com/
![Page 10: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/10.jpg)
Butter Knife
● view injection● simplify fragments, adapters
http://jakewharton.github.io/butterknife/
![Page 11: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/11.jpg)
Butter KnifeTextView mainTextView;
...
mainTextView = (TextView) rootView.findViewById(R.id.mainTextView);
@InjectView(R.id.mainTextView) TextView mainTextView;
…public View onCreateView(...) {
View rootView = inflater.inflate(R.layout.fragment_main, ...);
ButterKnife.inject(this, rootView);
}
![Page 12: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/12.jpg)
Butter KnifemainButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "Hi", Toast.LENGTH_SHORT).show();
}
});
@OnClick(R.id.mainButton)
public void submit() {
Toast.makeText(getActivity(), "Hi", Toast.LENGTH_SHORT).show();
}
![Page 13: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/13.jpg)
GSON
● java object to json● json to java object
https://code.google.com/p/google-gson/
User myUser = new User("Lars");
Gson gson = new Gson();
String userJson = gson.toJson(myUser);
![Page 14: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/14.jpg)
Retrofit
http://square.github.io/retrofit/
Retrofit turns your REST API into a Java interface.
![Page 15: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/15.jpg)
Retrofit - Step 1: POJOcurl -i https://api.github.com/users/octocat
{
"login": "octocat",
"id": 583231,
"avatar_url": "https://avatars.githubusercontent.com/u/583231?v=2",
"type": "User",
"name": "The Octocat",
"company": "GitHub",
"location": "San Francisco",
"email": "[email protected]",
...
}
![Page 16: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/16.jpg)
Retrofit - Step 1: POJOpublic class GitHubUser {
private String login;
private String id;
private String name;
private String location;
private String email;
@SerializedName("avatar_url")
private String avatarUrl;
public GitHubUser(){}
}
![Page 17: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/17.jpg)
Retrofit - Step 2: Service Interfacepublic interface GitHubService {
public static String API_URL = "https://api.github.com"
@GET("/users/{user}/repos")
List<Repository> listRepos(@Path("user") String user);}
![Page 18: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/18.jpg)
Retrofit - Step 3: Rest ClientRestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(GitHubService.API_URL)
.build();
GitHubService service = restAdapter.create(GitHubService.class);
List<Repository> repos = service.listRepos("octocat");
![Page 19: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/19.jpg)
Retrofit - Sync or Async?
...
List<Repository> repos = service.listRepos("octocat");
NetworkOnMainThreadException!
![Page 20: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/20.jpg)
Retrofit - Sync or Async?
public interface GitHubService {
public static String API_URL = "https://api.github.com"
@GET("/users/{user}/repos")
void listReposAsync(@Path("user") String user,
Callback<List<Repository>> cb);
}
![Page 21: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/21.jpg)
Retrofit - Sync or Async?
GitHubService service = restAdapter.create(GitHubService.class);
service.listReposAsync("octocat", new Callback<List<Repository>>() {
@Override
public void success(List<Repository> repositories,
Response response) {
}
@Override
public void failure(RetrofitError error) {
}
});
![Page 22: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/22.jpg)
RetrofitRestAdapter.Builder builder = new RestAdapter.Builder();
builder.setEndpoint(GitHubService.API_URL);
if (BuildConfig.DEBUG) {
builder.setLogLevel(RestAdapter.LogLevel.FULL);
}
RestAdapter restAdapter = builder.build();
![Page 23: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/23.jpg)
Networking - DefaultHttpClientHttpClient client = new DefaultHttpClient();HttpGet request = new HttpGet("http://www.fortumo.com");HttpResponse response = client.execute(request);
BufferedReader rd = new BufferedReader (new InputStreamReader(response.getEntity().getContent())); String line = "";while ((line = rd.readLine()) != null) { textView.append(line);}
![Page 24: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/24.jpg)
Networking - OkHttp
● efficient http client by default● spdy, connection pooling, ...
http://square.github.io/okhttp/
![Page 25: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/25.jpg)
Networking - OkHttpOkHttpClient client = new OkHttpClient();Request request = new Request.Builder() .url("http://www.fortumo.com") .build();
Response response = client.newCall(request).execute();textView.setText(response.body().string());
![Page 26: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/26.jpg)
OkHttp + RetrofitOkHttpClient okHttpClient = new OkHttpClient();
RestAdapter.Builder builder = new RestAdapter.Builder();
builder.setEndpoint(GitHubService.API_URL);builder.setClient(new OkClient(okHttpClient));
RestAdapter restAdapter = builder.build();
![Page 27: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/27.jpg)
Universal Image Loader● load, cache and display images easily● lots of configuration options ● good control over the image loading and caching process
https://github.com/nostra13/Android-Universal-Image-Loader
![Page 28: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/28.jpg)
Universal Image Loader<manifest>
<!-- if you load images from Internet -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- if you want to cache images on SD card -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
/>
...
</manifest>
![Page 29: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/29.jpg)
Universal Image LoaderImageLoaderConfiguration config =
new ImageLoaderConfiguration.Builder(this)
… .build();
ImageLoader.getInstance().init(config);
global for the application!
![Page 30: Android tips](https://reader033.vdocument.in/reader033/viewer/2022051301/58668dd91a28abb4408b753e/html5/thumbnails/30.jpg)
Universal Image Loader@OnClick(R.id.secondButton)
public void getUserInfo() {
getService().getUserInfo("octocat", new Callback<GitHubUser>() {
@Override
public void success(GitHubUser gitHubUser, Response response) {
ImageLoader.getInstance()
.displayImage(gitHubUser.getAvatarImageUrl(), avatarImageView);
}
});
}