如何在Android中使用ElasticSearch API

时间:2017-02-22 09:59:55

标签: android api elasticsearch

任何人都可以解释我如何在Android中使用ElasticSearch API。 有没有人成功地将api集成到android中?

我在Gradle中添加了以下依赖项:

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

当然我遇到了问题:

  

错误:任务':app:transformResourcesWithMergeJavaResForDebug'执行失败。   com.android.build.api.transform.TransformException:com.android.builder.packaging.DuplicateFileException:在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 。罐       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

更新1:

我必须使用Android Asynchronous Http Client来使用REST API,因为adding packagingOptions 解决问题

2 个答案:

答案 0 :(得分:3)

好的,我发现了如何使用库从Android访问REST API。 查看有关Android Asynchronous Http ClientGithub的详细信息。

首先将权限添加到清单

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

在gradle中添加:

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

现在您可以开始实现REST API:

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());
        }
    }
}

答案 1 :(得分:1)

当我尝试在gradle中添加ES rest客户端时,我遇到了完全相同的问题:

 awk -F"[\" ]" '$0~/title/{t=$6}{s[t]=s[t]$0"\n"}END{PROCINFO["sorted_in"]="@ind_num_asc";for(t in s)print s[t]}' inFile

我最后通过在build.gradle文件的顶部添加这些行来解决它:

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

上面的行只是删除所有重复的依赖项。完成后,您可以参考ES documentation查询数据。

相关问题