mercoledì 8 aprile 2020

OkHttp per Android

Per utilizzare chiamate HTTP in un progetto Android basato su Java (per Kotlin una libreria comoda e' Fuel ) si puo' utilizzare OKHttp anche se e' cosi' immediato utilizzarla

Per aggiungere la libreria al progetto si edita build.gradle(progetto) aggiugendo la riga in giallo

allprojects {    repositories {        google()
        jcenter()
        maven { url "https://jitpack.io" }            }}

e si aggiunge la libreria indicata dalla riga in giallo

dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'    testImplementation 'junit:junit:4.12'    androidTestImplementation 'androidx.test.ext:junit:1.1.1'    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    implementation 'com.github.felHR85:UsbSerial:6.1.0'    implementation("com.squareup.okhttp3:okhttp:4.5.0")}


Per prima cosa si aggiunge il permesso di accesso ad Internet nel Manifest

<uses-permission android:name="android.permission.INTERNET" />

In seguito si crea un directory xml in res e si crea un nuovo file XML denominato network_security_config.xml con i permessi di accesso alla rete




Per esempio qui si abilita il traffico HTTP (HTTPS e' default) verso tutti i domini
network_security_config.xml
-----------------------------------------
<?xml version="1.0" encoding="utf-8"?><network-security-config xmlns:android="http://schemas.android.com/apk/res/android">    <base-config cleartextTrafficPermitted="true" />
</network-security-config>
-----------------------------------------

Si torna al Manifest e si aggiunge la riga in giallo
<application    android:allowBackup="true"    android:icon="@mipmap/ic_launcher"    android:label="@string/app_name"    android:networkSecurityConfig="@xml/network_security_config"    android:roundIcon="@mipmap/ic_launcher_round"    android:supportsRtl="true"


il metodo standard per implementare la chiamata e' creare una classe

public static class senddata {
    OkHttpClient client = new OkHttpClient();
    String run(String url) throws IOException {
        Request request = new Request.Builder()
                .url(url)
                .build();
        try (Response response = client.newCall(request).execute()) {
            return response.body().string();        }
    }
}


e poi chiamare il metodo per esempio in GET

senddata invio = new senddata();try {
    String response = invio.run("http://XXX.XXXX.XXX.XXX/seriale/index.php?stringa="+data.toString()+"&batteria="+percentage);} catch (IOException e) {
    e.printStackTrace();}

Nessun commento:

Posta un commento

Dockerizza Flask

Un esempio semplice per inserire in un container Docker una applicazione Flask Partiamo da una semplice applicazione che ha un file app.py ...