подключение retrofit2 выдает ошибки при установке как apk - PullRequest
0 голосов
/ 08 февраля 2020

Я подключаюсь к restful api с помощью retrofit2.

Когда я пытаюсь выполнить код в консоли эмулятора, он работает нормально и подключается к моему веб-API.

Но когда я конвертирую это в режим релиза apk и установить его на свой мобильный телефон, тогда код не работает.

Знаете ли вы, если это нормальное поведение, и когда я загружаю в Google PlayStore, он будет работать нормально?

    public void login(String email, String password)
    {
        //search at web api
        final User[] user = {new User()};
        APIInterface apiInterface;
        apiInterface = APIClient.getClient("http://url.com").create(APIInterface.class);
        Call<User> call1 = apiInterface.UserLogin(email, password);
        call1.enqueue(new Callback<User>()
        {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
                if (response.isSuccessful()) {
                    if (response.body().Id > 0)
                    {
                        user[0].Id = response.body().Id;
                        user[0].email = email;
                        user[0].tokenuser = response.body().tokenuser;
                        user[0].tokensession = response.body().tokensession;

                        //correct credentials
                        SaveOnPreferences(email, password);

                        Intent intent = new Intent(LoginForm.this, Dashboard.class);
                        startActivity(intent);
                        finish();
                    }
                    else
                    {
                        //wrong password
                        Toast.makeText(getApplicationContext(), R.string.IncorrectCredentials, Toast.LENGTH_SHORT).show();
                    }
                }
            }

            @Override
            public void onFailure(Call<User> call, Throwable t)
            {
                Toast.makeText(getApplicationContext(), "public void onFailure: " + user[0].Id, Toast.LENGTH_SHORT).show();
                call.cancel();
            }
        });
    }
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;

import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.converter.gson.GsonConverterFactory;

class APIClient {

    private static Retrofit retrofit = null;

    static Retrofit getClient(String url) {

        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        //interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();


        retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .build();

        return retrofit;
    }

}
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;

public interface APIInterface {

    @POST("/miracle/user/login")
    @FormUrlEncoded
    Call<User> UserLogin(@Field("email") String Email, @Field("password") String Password);

}
import com.google.gson.annotations.SerializedName;

public class User
{
    @SerializedName("Id")
    public int Id;

    @SerializedName("Fullname")
    public String fullname;

    @SerializedName("Email")
    public String email;

    @SerializedName("Password")
    public String password;

    @SerializedName("ValidEmail")
    public boolean validemail;

    @SerializedName("EnableNotification")
    public boolean enablenotification;

    @SerializedName("TokenUser")
    public String tokenuser;

    @SerializedName("TokenSession")
    public String tokensession;

    public  User(){

    }
...
}
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.xxx.zzz"
        minSdkVersion 24
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

Мобильным телефоном, на котором я устанавливаю apk, является Huawei P30.

Любая помощь будет очень признательна.

1 Ответ

0 голосов
/ 09 февраля 2020

У меня есть ответ:

Я пытался запросить веб-API с протоколом http (не ssl). Android предотвращает это, потому что это небезопасный способ передачи данных.

Решение было найдено здесь: Android 8: HTTP-трафик в незашифрованном виде c не разрешен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...