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

Physics informed neural network Fukuzono

Visto che puro ML non funziona per le serie tempo di cui mi sto occupando ed le regressioni basate su formule analitiche mostrano dei limiti...