2017-02-22 3 views
2

Kann jemand erklären, wie ich die ElasticSearch API in Android verwenden kann. Hat jemand erfolgreich die API in Android integriert?So verwenden Sie ElasticSearch API in Android

Ich habe folgende Abhängigkeiten in Gradle:

compile 'org.elasticsearch.client:transport:5.2.1' 

Natürlich habe ich in Probleme laufen:

Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE File1: C:\Users\dude.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpcore-nio\4.4.5\f4be009e7505f6ceddf21e7960c759f413f15056\httpcore-nio-4.4.5.jar File2: C:\Users\dude.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpasyncclient\4.1.2\95aa3e6fb520191a0970a73cf09f62948ee614be\httpasyncclient-4.1.2.jar File3: C:\Users\dude.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.dataformat\jackson-dataformat-yaml\2.8.6\8bd44d50f9a6cdff9c7578ea39d524eb519e35ab\jackson-dataformat-yaml-2.8.6.jar File4: C:\Users\dude.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpcore\4.4.5\e7501a1b34325abb00d17dde96150604a0658b54\httpcore-4.4.5.jar File5: C:\Users\dude.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.8.6\2ef7b1cc34de149600f5e75bc2d5bf40de894e60\jackson-core-2.8.6.jar

.

UPDATE 1:

Nun, ich habe die REST-API verwenden Android Asynchronous Http Client verwenden, weil adding packagingOptions tut nicht lösen das Problem

+0

Mögliche Duplikat [Fehler: Ausführung für die Task fehlgeschlagen ': App: transformResourcesWithMergeJavaResForDebug'] (http://stackoverflow.com/questions/34031395/errorexecution-failed-for-task-apptransformresourceswithmergejavaresfordebug) –

+1

packagingOptions Zugabe löst nicht die Ausgabe – lidox

+1

Sie haben Unterstützung für Android? Ich denke nicht –

Antwort

2

Ok, so fand ich heraus, wie eine REST-API von Android zugreifen Verwenden einer Bibliothek. Weitere Details finden Sie unter Android Asynchronous Http Client und Github.

zuerst die Erlaubnis in den manifesten

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

In gradle add:

compile 'com.loopj.android:android-async-http:1.4.9' 

Nun können Sie die REST-API wie diese Umsetzung:

import android.util.Log; 

import com.loopj.android.http.AsyncHttpClient; 
import com.loopj.android.http.AsyncHttpResponseHandler; 
import com.loopj.android.http.JsonHttpResponseHandler; 
import com.loopj.android.http.RequestParams; 

import org.json.JSONArray; 
import org.json.JSONObject; 

import cz.msebera.android.httpclient.Header; 

public class ElasticRestClient { 

    private static final String BASE_URL = "http://httpbin.org/"; //http://localhost:9200/ 
    private static final String CLASS_NAME = ElasticRestClient.class.getSimpleName(); 

    private static AsyncHttpClient client = new AsyncHttpClient(); 

    public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) { 
     client.get(getAbsoluteUrl(url), params, responseHandler); 
    } 

    public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) { 
     client.post(getAbsoluteUrl(url), params, responseHandler); 
    } 

    private static String getAbsoluteUrl(String relativeUrl) { 
     return BASE_URL + relativeUrl; 
    } 

    public void getHttpRequest() { 
     try { 


      ElasticRestClient.get("get", null, new JsonHttpResponseHandler() { // instead of 'get' use twitter/tweet/1 
       @Override 
       public void onSuccess(int statusCode, Header[] headers, JSONObject response) { 
        // If the response is JSONObject instead of expected JSONArray 
        Log.i(CLASS_NAME, "onSuccess: " + response.toString()); 
       } 

       @Override 
       public void onSuccess(int statusCode, Header[] headers, JSONArray response) { 
        Log.i(CLASS_NAME, "onSuccess: " + response.toString()); 
       } 

       @Override 
       public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { 
        super.onFailure(statusCode, headers, responseString, throwable); 
        Log.e(CLASS_NAME, "onFailure"); 
        // called when response HTTP status is "4XX" (eg. 401, 403, 404) 
       } 

       @Override 
       public void onRetry(int retryNo) { 
        Log.i(CLASS_NAME, "onRetry " + retryNo); 
        // called when request is retried 
       } 
      }); 
     } 
     catch (Exception e){ 
      Log.e(CLASS_NAME, e.getLocalizedMessage()); 
     } 
    } 
} 
+0

Können Sie ein kurzes Beispiel darüber geben, wie wir eine Abfrage hinzufügen und einen Anruf tätigen? –

+0

werfen Sie einen Blick auf diese: https://github.com/lidox/nccn-distress-thermometer/tree/master/NCCN/app/src/main/java/com/artursworld/nccn/controller/elasticsearch In ElasticQuestionnaire.java Siehe die Methode post (...). Im Moment bin ich sehr beschäftigt. Ich mache vielleicht ein kurzes Beispiel in Zukunft – lidox

1

ich genau konfrontiert das gleiche Problem, wenn ich versuchte, den ES Rest-Client in Großbuchstaben hinzuzufügen:

compile 'org.elasticsearch.client:rest:5.4.0' 

ich gelöst es schließlich durch diese Zeilen am Anfang meiner build.gradle Datei hinzufügen:

android { 
    packagingOptions { 
     exclude 'META-INF/DEPENDENCIES.txt' 
     exclude 'META-INF/LICENSE.txt' 
     exclude 'META-INF/NOTICE.txt' 
     exclude 'META-INF/NOTICE' 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/DEPENDENCIES' 
     exclude 'META-INF/notice.txt' 
     exclude 'META-INF/license.txt' 
     exclude 'META-INF/dependencies.txt' 
     exclude 'META-INF/LGPL2.1' 
    } 
} 

Die Linien oben einfach alle dupliziert Abhängigkeiten entfernen. Und nachdem Sie es getan haben, können Sie sich auf die ES documentation für die Abfrage Ihrer Daten beziehen.

+0

Ich bekomme immer noch diesen Fehler: https://gist.github.com/AseedUsmani/a666519e3acde832e6bcea2546424b17 –

Verwandte Themen