Сбой приложения Android при отправке HTTP-сообщения с помощью okhttp

Привет, ребята, я пытаюсь настроить экран входа в систему, и я использую веб-службу для проверки входа. Веб-служба запущена на моем локальном компьютере и должна отвечать идентификатором пользователя при успешном входе в систему. В настоящее время у приложения есть все разрешения, поэтому это не явная проблема.

Я использую для этого okhttp: 3.4.1.

Это кнопка, которая запускает метод входа в систему

btnLogin.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                    .permitAll().build();
            StrictMode.setThreadPolicy(policy);
            //Intent mainMenu = new Intent(LoginActivity.this, MainMenu.class);
            //LoginActivity.this.startActivity(mainMenu);

            LoginImpl li = new LoginImpl();
            int userID = li.login(txtUsername.getText().toString(), txtPassword.getText().toString());

            new AlertDialog.Builder(LoginActivity.this)
                    .setTitle("TEST")
                    .setMessage("USER ID = " + userID)
                    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    })
                    .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    })
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .show();
        }

    }
});

Это класс, который вызывается при использовании входа в систему:

package diplomski.thop.thopmobileclient.controller.requests;
import java.io.IOException;
import com.google.gson.Gson;
import diplomski.thop.thopmobileclient.controller.implementation.Urls;
import diplomski.thop.thopmobileclient.model.User;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class LoginRequest {

    OkHttpClient client;

    public LoginRequest() {
        client = new OkHttpClient();
    }

    public int sendLoginRequest(String username, String password) {
        User user = new User(username, password);
        String requestJson = new Gson().toJson(user);
        RequestBody body = RequestBody.create(Urls.JSON, requestJson);
        Request request = new Request.Builder().url(Urls.LOGIN_URL).post(body).build();
        try (Response response = client.newCall(request).execute()) {
            String returnResponse = response.body().string();
            if (returnResponse.equalsIgnoreCase("Fail")) {
                return -1;
            } else {
                return Integer.parseInt(returnResponse);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return -1;
        }
    }

}

Это URL-адрес, который я использую:

public static final String START_URL = "http://10.0.2.2:8080/ThopWebService/rest/";
public static final String LOGIN_URL = START_URL + "user/login";

Веб-служба работает на локальном хосте, и я использую эмулятор, поэтому я обнаружил, что я должен использовать этот IP-адрес.

Каждый раз, когда я нажимаю кнопку «Войти», я попадаю на try (Response response = client.newCall(request).execute()), а затем получаю следующее сообщение о сбое.

У меня очень ограниченный опыт работы с Android, поэтому я не знаю, как это исправить. Не удалось найти решение, погуглив ошибку.

Изменить: добавление моего build.gradle

Вы компилируете с Джеком? Я вижу, что библиотеки Square (okhttp, picasso) вызывают VerifyError при использовании Джека (https://code.google.com/p/android/issues/detail?id=82691).

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"

    defaultConfig {
        applicationId "diplomski.thop.thopmobileclient"
        minSdkVersion 19
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.2.0'
    compile 'com.android.volley:volley:1.0.0'
    compile group: 'com.google.code.gson', name: 'gson', version: '2.6.2'
    compile 'com.squareup.okhttp3:okhttp:3.4.1'
}

person InsaneCricket    schedule 04.09.2016    source источник


Ответы (1)


Проверьте файл сборки на уровне модуля gradle и проверьте, включен ли Джек. Что-то вроде этого:

Я не думаю, что использую его, если он не включен по умолчанию. Я включил свой build.gradle в вопрос. Стоит ли добавить в него jackOptions?

   jackOptions {
     enabled true
   }
person Gudin    schedule 04.09.2016
comment
Когда я добавил jackOption, ошибка исчезла. Спасибо. - person InsaneCricket; 04.09.2016
comment
Эээ ... Нема проблема. Пользователи сообщали, что Джек вызывал проблемы, не понимая, как добавление Джека исправило это для вас. Но я рад, что ваша ошибка исчезла;) - person InsaneCricket; 04.09.2016
comment
09-04 08: 12: 30.855 21873-21873 / diplomski.thop.thopmobileclient E / Android Время выполнения: НЕОБХОДИМОЕ ИСКЛЮЧЕНИЕ: основной процесс :iplomski.thop.thopmobileclient, PID: 21873 java.lang.VerifyError: okhttp3 / internal / http / http / Http1xStream $ FixedLengthSink на okhttp3.internal.http.Http1xStream.newFixedLengthSink (Http1xStream.java:226) на okhttp3.internal.http.Http1xStream.createRequestBody (Http1xStream.createRequestBody (Http1xStream.createRequestBody) (Http1xStream.http.http: //www.http1xStream.java: 45) на okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92) на okhttp3.internal.connection.ConnectInterceptor.intercept (ConnectInterceptor.java:45) на okhttp3.internal.http.hain.interceptor.interceptorjava:45 : 92) в okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67) в okhttp3.internal.cache.CacheInterceptor.intercept (CacheInterceptor.java:109) в okhttp3.internal.http.RealIn ain.proceed (RealInterceptorChain.java:92) на okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67) на okhttp3.internal.http.BridgeInterceptor.intercept (BridgeInterceptor.hava:93) на okhttp3.internal.http.BridgeInterceptor.intercept (BridgeInterceptor.hava:93) .RealInterceptorChain.proceed (RealInterceptorChain.java:92) в okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept (RetryAndFollowUpInterceptor.java:124) в okhttp3.internal.httporceptorChain.interceptor.java:124) в okhttp3.internal. http.RealInterceptorChain.proceed (RealInterceptorChain.java:67) в okhttp3.RealCall.getResponseWithInterceptorChain (RealCall.java:170)
в okhttp3.RealCall.execute (RealCall.java:60) в. request.LoginRequest.sendLoginRequest (LoginRequest.java:28) наiplomski.thop.thopmobileclient.controller.implementation.LoginImpl.login (LoginImpl.java:12) наiplomski.thop.thopmobileclient.LoginActivity $ 1.onClick (LoginActivity.java:37) в android.view.View.performClick (View.java:4438) в android.view.View $ PerformClick.run (View.java:18422) в android.os.Handler.handleCallback (Handler.java:733) в android.os.Handler.dispatchMessage (Handler.java:95) в android.os.Looper.loop (Looper.java:136) в android.app.ActivityThread.main (ActivityThread.java: 5017) на java.lang.reflect.Method.invokeNative (собственный метод) на java.lang.reflect.Method.invoke (Method.java:515) на com.android.internal.os. ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:779) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:595) в dalvik.system.NativeStart.main (собственный метод) - person Gudin; 05.09.2016