Использование OKHTTP в Android для запроса службы GET из ASP.NET WebApi

У меня есть эта проблема, которая заставила меня задуматься: я использую OkHTTp для подключения к моему сервису WebAPi. Проблема в том, что я продолжаю получать «нулевой» результат на стороне Android. Вот код стороны Android:

public class OkHttpHandlerIncoming extends AsyncTask<String, Void, String> {

    OkHttpClient client = new OkHttpClient();
    String URL = "http://localhost:8306/api/uconnectservice";

    String JsonStringObject;

    public OkHttpHandlerIncoming() {
        // TODO Auto-generated constructor stub
    }

    @Override
    protected String doInBackground(String... params) {



        Request request = new Request.Builder().url(params[0]).build();
        // Request request = new
        // Request.Builder().url(params[0]).post(formBody).build();
        try {
            Response response = client.newCall(request).execute();
            Log.e("Execute Request", request.toString());
            if (!response.isSuccessful())
                throw new IOException("Unexpected code " + response.toString());
            return response.body().string();

        } catch (Exception e) {
        }

        return null;
    }

}

и я делаю вызов из основного потока следующим образом

public void DATAFROMSERVICE(){
        StringBuilder outputText = new StringBuilder("Result:");

        OkHttpHandlerIncoming client = new OkHttpHandlerIncoming();

        String result = null;
        try {
            result = client.execute().get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Log.e("From Service", outputText.append(result + "\n").toString());

    }
////////////////////////////////////////
Also here is the code from the server side

  public class UConnectServiceController : ApiController
    {
        private IUconnectRepository _UconnectHandler;

        public UConnectServiceController()
        {
            _UconnectHandler = new UconnectRepository();
        }

        public UConnectServiceController(IUconnectRepository repository)
        {
            if (_UconnectHandler == null)
            {
                throw new ArgumentNullException("repository");
            }
            _UconnectHandler = repository;
        }

        /////I am calling this service-> GET api/uconnectservice
        public List<AcountTypesRegistered> Get()
        {
            return _UconnectHandler.GetAll();
        }

код продолжается...

Пожалуйста, может кто-нибудь указать мне, что происходит не так, или какие-либо лучшие предложения, спасибо

Кстати, вот мой лог-кот:

12-13 03:20:54.360: W/System.err(26811):    at java.util.concurrent.FutureTask.report(FutureTask.java:93)
12-13 03:20:54.360: W/System.err(26811):    at java.util.concurrent.FutureTask.get(FutureTask.java:163)
12-13 03:20:54.360: W/System.err(26811):    at android.os.AsyncTask.get(AsyncTask.java:483)
12-13 03:20:54.360: W/System.err(26811):    at com.nickSoft.unics_alpha.accountdetails.DATAFROMSERVICE(accountdetails.java:198)
12-13 03:20:54.360: W/System.err(26811):    at com.nickSoft.unics_alpha.accountdetails.onCreate(accountdetails.java:120)
12-13 03:20:54.360: W/System.err(26811):    at android.app.Activity.performCreate(Activity.java:5231)
12-13 03:20:54.360: W/System.err(26811):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-13 03:20:54.360: W/System.err(26811):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2210)
12-13 03:20:54.360: W/System.err(26811):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2296)
12-13 03:20:54.360: W/System.err(26811):    at android.app.ActivityThread.access$800(ActivityThread.java:145)
12-13 03:20:54.360: W/System.err(26811):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1243)
12-13 03:20:54.360: W/System.err(26811):    at android.os.Handler.dispatchMessage(Handler.java:102)
12-13 03:20:54.360: W/System.err(26811):    at android.os.Looper.loop(Looper.java:136)
12-13 03:20:54.360: W/System.err(26811):    at android.app.ActivityThread.main(ActivityThread.java:5136)
12-13 03:20:54.360: W/System.err(26811):    at java.lang.reflect.Method.invokeNative(Native Method)
12-13 03:20:54.360: W/System.err(26811):    at java.lang.reflect.Method.invoke(Method.java:515)
12-13 03:20:54.360: W/System.err(26811):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:819)
12-13 03:20:54.360: W/System.err(26811):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)
12-13 03:20:54.360: W/System.err(26811):    at dalvik.system.NativeStart.main(Native Method)
12-13 03:20:54.360: W/System.err(26811): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
12-13 03:20:54.360: W/System.err(26811):    at com.nickSoft.Connections.OkHttpHandlerIncoming.doInBackground(OkHttpHandlerIncoming.java:53)
12-13 03:20:54.360: W/System.err(26811):    at com.nickSoft.Connections.OkHttpHandlerIncoming.doInBackground(OkHttpHandlerIncoming.java:1)
12-13 03:20:54.360: W/System.err(26811):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
12-13 03:20:54.360: W/System.err(26811):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-13 03:20:54.360: W/System.err(26811):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-13 03:20:54.360: W/System.err(26811):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-13 03:20:54.360: W/System.err(26811):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-13 03:20:54.360: W/System.err(26811):    at java.lang.Thread.run(Thread.java:841)
12-13 03:20:54.360: E/From Service(26811): Result:null
12-13 03:20:54.360: W/dalvikvm(26811): threadid=11: thread exiting with uncaught exception (group=0x415ced88)
12-13 03:20:54.360: E/test(26811): Exception
12-13 03:20:54.370: E/AndroidRuntime(26811): FATAL EXCEPTION: AsyncTask #1
12-13 03:20:54.370: E/AndroidRuntime(26811): Process: com.nickSoft.unics_alpha, PID: 26811
12-13 03:20:54.370: E/AndroidRuntime(26811): java.lang.RuntimeException: An error occured while executing doInBackground()
12-13 03:20:54.370: E/AndroidRuntime(26811):    at android.os.AsyncTask$3.done(AsyncTask.java:300)
12-13 03:20:54.370: E/AndroidRuntime(26811):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
12-13 03:20:54.370: E/AndroidRuntime(26811):    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
12-13 03:20:54.370: E/AndroidRuntime(26811):    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
12-13 03:20:54.370: E/AndroidRuntime(26811):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-13 03:20:54.370: E/AndroidRuntime(26811):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-13 03:20:54.370: E/AndroidRuntime(26811):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-13 03:20:54.370: E/AndroidRuntime(26811):    at java.lang.Thread.run(Thread.java:841)
12-13 03:20:54.370: E/AndroidRuntime(26811): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
12-13 03:20:54.370: E/AndroidRuntime(26811):    at com.nickSoft.Connections.OkHttpHandlerIncoming.doInBackground(OkHttpHandlerIncoming.java:53)
12-13 03:20:54.370: E/AndroidRuntime(26811):    at com.nickSoft.Connections.OkHttpHandlerIncoming.doInBackground(OkHttpHandlerIncoming.java:1)
12-13 03:20:54.370: E/AndroidRuntime(26811):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
12-13 03:20:54.370: E/AndroidRuntime(26811):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-13 03:20:54.370: E/AndroidRuntime(26811):    ... 4 more

///ПОСЛЕ РЕДАКТИРОВАНИЯ КОДА Я ПОЛУЧАЮ ЭТОТ LOGCAT/////////////////

12-13 03:58:36.640: I/ActivityManager(28324): Timeline: Activity_idle id: android.os.BinderProxy@41a7bde0 time:12169583
12-13 03:59:30.560: W/System.err(29371): java.net.ConnectException: Failed to connect to localhost/127.0.0.1:8306
12-13 03:59:30.560: W/System.err(29371):    at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.java:189)
12-13 03:59:30.560: W/System.err(29371):    at okhttp3.internal.connection.RealConnection.buildConnection(RealConnection.java:173)
12-13 03:59:30.560: W/System.err(29371):    at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:114)
12-13 03:59:30.560: W/System.err(29371):    at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:193)
12-13 03:59:30.560: W/System.err(29371):    at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:129)
12-13 03:59:30.560: W/System.err(29371):    at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:98)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:109)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:124)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:170)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.RealCall.access$100(RealCall.java:33)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.RealCall$AsyncCall.execute(RealCall.java:120)
12-13 03:59:30.570: W/System.err(29371):    at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
12-13 03:59:30.570: W/System.err(29371):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-13 03:59:30.570: W/System.err(29371):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-13 03:59:30.570: W/System.err(29371):    at java.lang.Thread.run(Thread.java:841)

person user3015410    schedule 13.12.2016    source источник
comment
Я настоятельно рекомендую проверить square.github.io/retrofit. По умолчанию он использует OkHTTP под капотом, но обеспечивает очень простое взаимодействие с API.   -  person Orbit    schedule 13.12.2016
comment
спасибо @Orbit, разбираюсь   -  person user3015410    schedule 13.12.2016
comment
Вы молча проглатываете все исключения с помощью catch (Exception e) { }, вы должны добавить туда e.printStackTrace();, чтобы помочь вам понять, что происходит с вашим вызовом   -  person iagreen    schedule 13.12.2016
comment
хорошо, @iagreen включена в код, но все же......   -  person user3015410    schedule 13.12.2016
comment
Что говорит трассировка стека, когда вы получаете null? Пожалуйста, добавьте эту часть вашего логарифма к вашему вопросу.   -  person iagreen    schedule 13.12.2016
comment
хорошо, @iagreen только что добавила logcat, спасибо   -  person user3015410    schedule 13.12.2016
comment
вы проверили API с помощью почтальона или скрипача   -  person Kishan Kumar    schedule 13.12.2016
comment
и какая строка ответа.   -  person Kishan Kumar    schedule 13.12.2016


Ответы (1)


Ваша ошибка исходит из этой строки -

Request request = new Request.Builder().url(params[0]).build();

потому что вы не передаете String вашему AsyncTask здесь --

result = client.execute().get();

основываясь на вашем коде, я предполагаю, что вы должны передать URL туда --

result = client.execute().get(URL);

OkHttp может выполнять команды в фоновом режиме для вас. Ваш код был бы намного проще, если бы вместо вызова execute в AsyncTask вы позволили OkHttp выполнять фоновую задачу за вас через асинхронный вызов с использованием enqueue.

person iagreen    schedule 13.12.2016
comment
Хорошо, @iagreen изучает это, спасибо за ваш вклад. - person user3015410; 13.12.2016
comment
хорошо @iagreen, но я получаю другой логарифм, говорящий, что я не могу подключиться (см. Редактирование вопроса) - person user3015410; 13.12.2016
comment
хм, похоже, ваш сервер не принимает соединения. Убедитесь, что ваш сервер работает по адресу и порту, указанным в вашем URL-адресе. Вам, вероятно, нужно заменить localhost на IP-адрес вашего компьютера с asp, потому что localhost в этом случае будет относиться к устройству Android, и маловероятно, что вы используете asp на своем телефоне! - person iagreen; 13.12.2016
comment
, правда, я изменил URL-адрес на: 192.168.1.102, но я получаю этот logcat: Java.net.SocketTimeoutException: не удалось подключиться к /192.168.1.102 (порт 8306) после 10000 мс - person user3015410; 13.12.2016
comment
Похоже, что-то случилось с вашим asp-сервером, который находится за пределами моей области, так что я не собираюсь больше помогать. - person iagreen; 13.12.2016
comment
Спасибо за помощь, которую вы предоставили ранее, - person user3015410; 13.12.2016