android tips

31
Android tips which simplify your life

Upload: dodung

Post on 30-Dec-2016

233 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Android tips

Android tipswhich simplify your life

Page 2: Android tips

Android Studio

● beta● gradle build system● maven-based build dependencies● build variants● code completion, refactoring, templates● graphical template editor

Page 3: Android tips

Gradleapply plugin: 'com.android.application'

android {

compileSdkVersion 20

buildToolsVersion "20.0.0"

...

Page 4: Android tips

Gradle… defaultConfig {

applicationId "ee.ut.cs.mobile.demo"

minSdkVersion 14

targetSdkVersion 20

versionCode 1

versionName "1.0"

}

Page 5: Android tips

Gradle...

buildTypes {

release {

runProguard false

proguardFiles 'proguard-rules.pro'

}

}

}

Page 6: Android tips

Gradle...

buildTypes {

...

debug {

applicationIdSuffix '.debug'

}

}

}

Page 7: Android tips

Gradle…

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

compile 'com.google.code.gson:gson:2.3'

}

Page 8: Android tips

Gradleandroid { .... productFlavors { cs { applicationId "ee.ut.cs"

} eco { applicationId "ee.ut.eco"

} }}

Page 9: Android tips

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

Butter Knife

● view injection● simplify fragments, adapters

http://jakewharton.github.io/butterknife/

Page 11: Android tips

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

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

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

Retrofit

http://square.github.io/retrofit/

Retrofit turns your REST API into a Java interface.

Page 15: Android tips

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

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

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

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

Retrofit - Sync or Async?

...

List<Repository> repos = service.listRepos("octocat");

NetworkOnMainThreadException!

Page 20: Android tips

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

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

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

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

Networking - OkHttp

● efficient http client by default● spdy, connection pooling, ...

http://square.github.io/okhttp/

Page 25: Android tips

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

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

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

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

Universal Image LoaderImageLoaderConfiguration config =

new ImageLoaderConfiguration.Builder(this)

… .build();

ImageLoader.getInstance().init(config);

global for the application!

Page 30: Android tips

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);

}

});

}

Page 31: Android tips

Exercisehttps://developer.github.com/v3/

git clone [email protected]:lars_eckart/ut-exercise.git