IC4J Agent library can be also used for development of native Android application written in Java or Kotlin. Use Android Studio to start a new Android application or add support for the Internet Computer to your existing application.
To add required IC4J libraries to your Android project open gradle.build file and add dependencies:
Copy implementation 'commons-codec:commons-codec:1.17.0'
implementation 'org.ic4j:ic4j-candid:0.7.0'
implementation('org.ic4j:ic4j-agent:0.7.0') {
exclude group: 'org.apache.httpcomponents.client5', module: 'httpclient5'
}
implementation 'org.slf4j:slf4j-api:2.0.13'
Android application preferably uses OkHttp HTTP client so Apache HTTP 5 library can be excluded.
To be able to connect to the Internet Computer Canister set uses-permission in project AndroidManifest.xml descriptor.
Copy < uses-permission android : name = "android.permission.INTERNET" />
Use IC4J with Kotlin
AndroidHelloWord sample application demonstrates use or QueryBuilder and UpdateBuilder in Kotlin Android project. Project properties ic.location and ic.canister are stored in strings.xml file.
MainActivity.kt has a simple code for QUERY and UPDATE invocation of the Canister code main.mo .
Copy actor {
stable var name = "Me" ;
public func greet (value : Text) : async Text {
name : = value;
return "Hello, " # name # "!" ;
};
public shared query func peek () : async Text {
return name;
};
};
Using QueryBuilder in Kotlin.
Copy val url: String = getString (R.string.url)
val canister: String = getString (R.string.canister)
val identity: Identity = AnonymousIdentity ()
val transport: ReplicaTransport =
ReplicaOkHttpTransport. create (url)
val agent: Agent = AgentBuilder (). identity (identity). transport (transport). build ()
val buf = IDLArgs. create ( ArrayList < IDLValue >()). toBytes ()
val principal = Principal. fromString (canister);
val response = QueryBuilder. create (
agent,
principal,
"peek"
). arg (buf). call ()
val output = response. get ()
val outArgs = IDLArgs. fromBytes (output)
name = outArgs.args[ 0 ]. getValue < String >()
Using UpdateBuilder in Kotlin.
Copy val url : String = getString (R.string.url)
val canister : String = getString (R.string.canister)
val identity : Identity = AnonymousIdentity ()
val transport: ReplicaTransport =
ReplicaOkHttpTransport. create (url)
val agent: Agent = AgentBuilder (). identity (identity). transport (transport). build ()
val arg : IDLValue = IDLValue. create (message)
var args : ArrayList < IDLValue > = ArrayList < IDLValue >()
args. add (arg)
val buf = IDLArgs. create (args). toBytes ()
val response = UpdateBuilder. create (
agent,
Principal. fromString (canister),
"greet"
). arg (buf). callAndWait (Waiter. create ( 60 , 5 ))
val output = response. get ()
val outArgs = IDLArgs. fromBytes (output)
val outputMessage = outArgs.args[ 0 ]. getValue < String >()
Last updated 5 months ago