Skip to content

Commit 6a86c69

Browse files
committed
Anko asynchronous tasks
Just a sample using Anko´s asynchronous api instead of AsyncTask.
1 parent d9cd4d9 commit 6a86c69

File tree

28 files changed

+738
-0
lines changed

28 files changed

+738
-0
lines changed

Anko_asynchronous_tasks/.gitignore

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Built application files
2+
*.apk
3+
*.ap_
4+
5+
# Files for the Dalvik VM
6+
*.dex
7+
8+
# Java class files
9+
*.class
10+
11+
# Generated files
12+
bin/
13+
gen/
14+
15+
# Gradle files
16+
.gradle/
17+
build/
18+
/*/build/
19+
20+
# Local configuration file (sdk path, etc)
21+
local.properties
22+
23+
# Proguard folder generated by Eclipse
24+
proguard/
25+
26+
# Log Files
27+
*.log
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module external.linked.project.id="MyApplication" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
3+
<component name="FacetManager">
4+
<facet type="java-gradle" name="Java-Gradle">
5+
<configuration>
6+
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
7+
<option name="BUILDABLE" value="false" />
8+
</configuration>
9+
</facet>
10+
</component>
11+
<component name="NewModuleRootManager" inherit-compiler-output="true">
12+
<exclude-output />
13+
<content url="file://$MODULE_DIR$">
14+
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
15+
</content>
16+
<orderEntry type="inheritedJdk" />
17+
<orderEntry type="sourceFolder" forTests="false" />
18+
</component>
19+
</module>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="MyApplication" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
3+
<component name="FacetManager">
4+
<facet type="android-gradle" name="Android-Gradle">
5+
<configuration>
6+
<option name="GRADLE_PROJECT_PATH" value=":app" />
7+
</configuration>
8+
</facet>
9+
<facet type="android" name="Android">
10+
<configuration>
11+
<option name="SELECTED_BUILD_VARIANT" value="debug" />
12+
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
13+
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
14+
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
15+
<option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
16+
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" />
17+
<option name="COMPILE_JAVA_TEST_TASK_NAME" value="compileDebugAndroidTestSources" />
18+
<option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugAndroidTestSources" />
19+
<option name="ALLOW_USER_CONFIGURATION" value="false" />
20+
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
21+
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
22+
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
23+
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
24+
</configuration>
25+
</facet>
26+
</component>
27+
<component name="NewModuleRootManager" inherit-compiler-output="false">
28+
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
29+
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/androidTest/debug" />
30+
<exclude-output />
31+
<content url="file://$MODULE_DIR$">
32+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
33+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
34+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
35+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
36+
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
37+
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/debug" type="java-resource" />
38+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
39+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
40+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
41+
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
42+
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
43+
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/generated/androidTest/debug" type="java-test-resource" />
44+
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
45+
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
46+
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
47+
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
48+
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
49+
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
50+
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
51+
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
52+
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
53+
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
54+
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
55+
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
56+
<sourceFolder url="file://$MODULE_DIR$/src/main/kotlin" isTestSource="false" />
57+
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
58+
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
59+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
60+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
61+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
62+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
63+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
64+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
65+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
66+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
67+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
68+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
69+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/coverage-instrumented-classes" />
70+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
71+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex" />
72+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dex-cache" />
73+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
74+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jacoco" />
75+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
76+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/libs" />
77+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
78+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
79+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/ndk" />
80+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/pre-dexed" />
81+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/proguard" />
82+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
83+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
84+
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
85+
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
86+
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
87+
</content>
88+
<orderEntry type="jdk" jdkName="Android API 22 Platform" jdkType="Android SDK" />
89+
<orderEntry type="sourceFolder" forTests="false" />
90+
<orderEntry type="library" exported="" name="gson-2.3.1" level="project" />
91+
<orderEntry type="library" exported="" name="okio-1.3.0" level="project" />
92+
<orderEntry type="library" exported="" name="kotlin-runtime-0.11.91.2" level="project" />
93+
<orderEntry type="library" exported="" name="support-v4-22.1.0" level="project" />
94+
<orderEntry type="library" exported="" name="support-annotations-22.1.0" level="project" />
95+
<orderEntry type="library" exported="" name="okhttp-2.3.0" level="project" />
96+
<orderEntry type="library" exported="" name="anko-0.6-15" level="project" />
97+
<orderEntry type="library" exported="" name="appcompat-v7-22.1.0" level="project" />
98+
<orderEntry type="library" exported="" name="kotlin-stdlib-0.11.91.2" level="project" />
99+
</component>
100+
</module>
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
apply plugin: 'com.android.application'
2+
apply plugin: 'kotlin-android'
3+
4+
android {
5+
compileSdkVersion 22
6+
buildToolsVersion "22.0.1"
7+
8+
defaultConfig {
9+
applicationId "com.irontec.kotlintest"
10+
minSdkVersion 16
11+
targetSdkVersion 22
12+
versionCode 1
13+
versionName "1.0"
14+
}
15+
buildTypes {
16+
release {
17+
minifyEnabled false
18+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
19+
}
20+
}
21+
sourceSets {
22+
main.java.srcDirs += 'src/main/kotlin'
23+
}
24+
}
25+
26+
dependencies {
27+
compile fileTree(dir: 'libs', include: ['*.jar'])
28+
compile 'com.android.support:appcompat-v7:22.1.0'
29+
compile 'com.google.code.gson:gson:2.3.1'
30+
compile 'com.squareup.okhttp:okhttp:2.3.0'
31+
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
32+
compile "org.jetbrains.anko:anko:$anko_version"
33+
}
34+
buildscript {
35+
ext.kotlin_version = '0.11.91.2'
36+
ext.anko_version = '0.6-15'
37+
repositories {
38+
mavenCentral()
39+
}
40+
dependencies {
41+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
42+
}
43+
}
44+
repositories {
45+
mavenCentral()
46+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Add project specific ProGuard rules here.
2+
# By default, the flags in this file are appended to flags specified
3+
# in /Users/axier/Library/Android/sdk/tools/proguard/proguard-android.txt
4+
# You can edit the include path and order by changing the proguardFiles
5+
# directive in build.gradle.
6+
#
7+
# For more details, see
8+
# http://developer.android.com/guide/developing/tools/proguard.html
9+
10+
# Add any project specific keep options here:
11+
12+
# If your project uses WebView with JS, uncomment the following
13+
# and specify the fully qualified class name to the JavaScript interface
14+
# class:
15+
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16+
# public *;
17+
#}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3+
package="com.irontec.kotlintest" >
4+
5+
<uses-permission android:name="android.permission.INTERNET"/>
6+
7+
<application
8+
android:allowBackup="true"
9+
android:icon="@mipmap/ic_launcher"
10+
android:label="@string/app_name"
11+
android:theme="@style/AppTheme" >
12+
<activity
13+
android:name=".MainActivity"
14+
android:label="@string/app_name" >
15+
<intent-filter>
16+
<action android:name="android.intent.action.MAIN" />
17+
18+
<category android:name="android.intent.category.LAUNCHER" />
19+
</intent-filter>
20+
</activity>
21+
</application>
22+
23+
</manifest>
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.irontec.kotlintest
2+
3+
import android.app.Activity
4+
import android.os.AsyncTask
5+
import android.os.Bundle
6+
import android.support.v7.app.AppCompatActivity
7+
import android.util.Log
8+
import android.view.Menu
9+
import android.view.MenuItem
10+
import android.widget.TextView
11+
import com.google.gson.Gson
12+
import com.google.gson.GsonBuilder
13+
import com.irontec.kotlintest.deserializers.WeatherDeserializer
14+
import com.irontec.kotlintest.models.WeatherObject
15+
import com.irontec.kotlintest.networking.NetworkClient
16+
import org.json.JSONObject
17+
import java.io.BufferedInputStream
18+
import java.io.BufferedReader
19+
import java.io.InputStreamReader
20+
import java.net.HttpURLConnection
21+
import java.net.URL
22+
import org.jetbrains.anko.*
23+
24+
25+
public class MainActivity : AppCompatActivity() {
26+
27+
override fun onCreate(savedInstanceState: Bundle?) {
28+
super<AppCompatActivity>.onCreate(savedInstanceState)
29+
30+
verticalLayout {
31+
padding = dip(5)
32+
val mTextView = textView {
33+
textSize = 12f
34+
}.layoutParams(width = matchParent, height = dip(300))
35+
button("Retrieve Weather") {
36+
textSize = 14f
37+
onClick {
38+
// Declare a background asynchronous task, no need for an AsyncTask anymore
39+
async {
40+
// Heavy duty work made on the background
41+
val networkClient = NetworkClient()
42+
val stream = BufferedInputStream(
43+
networkClient.get("https://raw.githubusercontent.com/irontec/android-kotlin-samples/master/common-data/bilbao.json"))
44+
val bufferedReader = BufferedReader(InputStreamReader(stream));
45+
val stringBuilder = StringBuilder();
46+
bufferedReader.forEachLine { stringBuilder.append(it) }
47+
val gsonBuilder = GsonBuilder().serializeNulls();
48+
gsonBuilder.registerTypeAdapter(javaClass<WeatherObject>(), WeatherDeserializer());
49+
val gson = gsonBuilder.create();
50+
val weather = gson.fromJson(stringBuilder.toString(), javaClass<WeatherObject>()) as WeatherObject
51+
52+
uiThread {
53+
// Just set the TextView text on the UI-Thread
54+
mTextView.setText(weather.toString())
55+
}
56+
}
57+
}
58+
}.layoutParams(width = matchParent, height = wrapContent)
59+
}
60+
61+
}
62+
63+
override fun onCreateOptionsMenu(menu: Menu): Boolean {
64+
getMenuInflater().inflate(R.menu.menu_main, menu)
65+
return true
66+
}
67+
68+
override fun onOptionsItemSelected(item: MenuItem): Boolean {
69+
val id = item.getItemId()
70+
if (id == R.id.action_settings) {
71+
return true
72+
}
73+
return super.onOptionsItemSelected(item)
74+
}
75+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.irontec.kotlintest.deserializers
2+
3+
import com.google.gson.JsonDeserializationContext
4+
import com.google.gson.JsonDeserializer
5+
import com.google.gson.JsonElement
6+
import com.google.gson.JsonObject
7+
import com.irontec.kotlintest.models.WeatherObject
8+
import com.irontec.kotlintest.models.WindObject
9+
import java.lang.reflect.Type
10+
11+
/**
12+
* Created by axier on 24/4/15.
13+
*/
14+
open class WeatherDeserializer : JsonDeserializer<WeatherObject> {
15+
16+
override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): WeatherObject? {
17+
val jsonObj = json as JsonObject
18+
19+
val wheather = WeatherObject()
20+
val wind = WindObject()
21+
22+
val jsonWeatherArray = jsonObj.getAsJsonArray("weather").get(0)
23+
val jsonMainObj = jsonObj.getAsJsonObject("main")
24+
val jsonWindObj = jsonObj.getAsJsonObject("wind")
25+
26+
wheather.main = jsonWeatherArray.getAsJsonObject().get("main").getAsString()
27+
wheather.description = jsonWeatherArray.getAsJsonObject().get("description").getAsString()
28+
wheather.temp = jsonMainObj.get("temp").getAsFloat()
29+
wheather.temp_Max = jsonMainObj.get("temp_max").getAsFloat()
30+
wheather.temp_Min = jsonMainObj.get("temp_min").getAsFloat()
31+
wheather.humidity = jsonMainObj.get("humidity").getAsInt()
32+
wind.speed = jsonWindObj.get("speed").getAsFloat()
33+
wind.deg = jsonWindObj.get("deg").getAsFloat()
34+
wheather.wind = wind
35+
36+
return wheather
37+
38+
}
39+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.irontec.kotlintest.models
2+
3+
/**
4+
* Created by axier on 24/4/15.
5+
*/
6+
public class WeatherObject {
7+
8+
public var main: String = ""
9+
public var description: String = ""
10+
public var temp: Float = 0.0f
11+
public var temp_Max: Float = 0.0f
12+
public var temp_Min: Float = 0.0f
13+
public var humidity: Int = 0
14+
public var wind: WindObject? = null
15+
16+
init {
17+
println(this.toString())
18+
}
19+
20+
override fun toString() =
21+
"Main ${main}, description ${description}, temp ${temp}, temp_Max ${temp_Max}," +
22+
", temp_Min ${temp_Min}, humidity ${humidity}, wind ${wind.toString()}"
23+
24+
}

0 commit comments

Comments
 (0)