Как отправить запрос на отправку с базовой аутентификацией в модификации? - PullRequest
0 голосов
/ 24 мая 2018

В моем коде я хочу отправить запрос с обычной аутентификацией.

Вот мой скриншот почтальона:

enter image description here

вот мой класс apiInterface

@FormUrlEncoded
    @POST("GetBarcodeDetail")
    Call<PreliminaryGoodsAcceptResponse> PRELIMINARY_GOODS_ACCEPT_RESPONSE_CALL(@Field("ProcName") String procName, @Field("Barcode") String barcode, @Field("LangCode") String langCode);

вот мой apiclient

public class ApiClient {

    public static final String BASE_URL = "http://192.**********";
    private static Retrofit retrofit = null;
    private static OkHttpClient sClient;

    public static Retrofit getClient() {
        if(sClient == null) {
            HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
            interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
            sClient = new OkHttpClient.Builder()
                    .addInterceptor(new HttpLoggingInterceptor(HttpLoggingInterceptor.Logger.DEFAULT))
                    .addInterceptor(interceptor)
                    .build();
        }

        if (retrofit==null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .client(sClient)
                    .build();
        }
        return retrofit;
    }

}

Мой вопрос, как можноя отправляю сообщение с запросом, используя заголовок:

Заголовок Имя пользователя: EBA Token:
34242353453456563DSFS

Ответы [ 4 ]

0 голосов
/ 09 октября 2018

Это пока самый простой метод, который я когда-либо пробовал для «Базовой аутентификации».

Используйте приведенный ниже код для генерации заголовка аутентификации (API / класс репозитория)

 var basic = Credentials.basic("YOUR_USERNAME", "YOUR_PASSWORD")

Передайте это как заголовок вызову веб-службы (класс API / Repository)

 var retrofitCall = myWebservice.getNewsFeed(basic)

Добавьте базовый заголовок в качестве параметра (класс интерфейса Retrofit Webservice)

 @GET("newsfeed/daily")
 fun getNewsFeed(@Header("Authorization") h1:String):Call<NewsFeedResponse>

Извините, мой код находится вKotlin, но может быть легко переведен на Java.

Ссылки: https://mobikul.com/basic-authentication-retrofit-android/

0 голосов
/ 24 мая 2018

сделать заголовок таким образом ..

 private Retrofit getClient(final Context context) {

    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient.Builder client = new OkHttpClient.Builder();
    client.readTimeout(60, TimeUnit.SECONDS);
    client.writeTimeout(60, TimeUnit.SECONDS);
    client.connectTimeout(60, TimeUnit.SECONDS);
    client.addInterceptor(interceptor);
    client.addInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            if (context == null) {
                request = request
                        .newBuilder()
                        .build();
            } else {
                request = request
                        .newBuilder()
                        .addHeader("Authorization", "Bearer " + AppSetting.getStringSharedPref(context, Constants.USER_KEY_TOKEN, ""))
                        .build();
            }
            return chain.proceed(request);
        }
    });

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


    return retrofit;
}
0 голосов
/ 25 мая 2018

Simple-Retrofit-API-request-and-Data-Loading Здесь я просто добавляю проект, в котором создаю вызов API для доступа к данным из базы данных, используя библиотеку модернизации;которая является ведущей библиотекой для доступа к данным в сети.И отобразить полученные данные в формате списка.Создайте проект Simple Android Studio с пустой активностью.Создайте Адаптер и элемент активности для отображения обычных списков в приложении для Android.Теперь создайте класс App, расширяющий Application, поскольку класс Application - это одноэлементный объект, к которому вы можете получить доступ из любого действия или из любого места, где у вас есть объект Context.Вы можете проверить более подробную информацию о классе приложения из https://github.com/codepath/android_guides/wiki/Understanding-the-Android-Application-Class Зачем расширять класс приложения? https://developer.android.com/reference/android/app/Application.html

Добавить android: name = ". YourApplication", т.е.имя класса, расширяющего класс приложения в Android.и класс будет похож на открытый класс. YourApplication расширяет Application Init Retrofit в классе приложения

//network code start 
//init http logger  
httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
// init client  client = new OkHttpClient.Builder()  
.addInterceptor(httpLoggingInterceptor)
 .addInterceptor(new Interceptor() {
  @Override public Response intercept(Chain chain) throws IOException {
   Request request = chain.request();
   Request request2 = request.newBuilder().build();
   return chain.proceed(request2);
  }
 }).connectTimeout(30, TimeUnit.SECONDS).writeTimeout(30, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS).build();
Gson gson = new GsonBuilder().setLenient().create();
Retrofit mRetrofit = new Retrofit.Builder().baseUrl(Constants.API_BASE_URL).client(client).addConverterFactory(GsonConverterFactory.create(gson)).build();
mWebservice = mRetrofit.create(Webservice.class);

, в то время как Constants.API_BASE_URL является базовым URL. Создайте класс Webervice.class, где вы можете вызывать API с параметрами, например, в случае GET.Метод:

@GET("webservices/GetAllClientsDemoRetro.php") 
Call updateChatStatus(); 

В случае метода POST:

@FormUrlEncoded  
@Headers({"Content-Type: application/x-www-form-urlencoded"})  
@POST("webservices/GetAllClientsDemoRetro.php")  

Вызов updateChatStatus ();
Более подробную информацию о модификации можно найти в официальном объявлении API здесь: http://square.github.io/retrofit/
Мы можем проанализировать значения с помощью POJO, т.е. Setter и Getter, используя класс Parceble.Поскольку имя ключа синтаксического анализа должно быть равно значению, которое мы получаем из ответа JSON.Класс POJO должен быть объявлен так же, как открытый класс. ClientData реализует Parcelable {затем объявить ключи в классе, значения ключей означают

public class ClientData implements Parcelable 
{  
public String client_id;  
public String company_name;  
public String address_line;  
public String city;  
public String pincode;  
public String state;  
public String country;  
}

Теперь, используя Alt + Enter, т. Е. Выберите опцию Добавить реализацию Parceble и нажмите Enter.Затем автоматически будет добавлен класс parceble.Также вы должны добавить метод Setter и Getter в класс, используя Alt + Insert.Примечание. Не добавляйте методы Setter и Getter для метода CREATER: Creater <>. Если вы хотите использовать другой ключ, отличный от ключа ответа JSON, вам следует использовать сериализацию.Когда я использовал тот же ключ, он был похож на public String client_id;Но когда я использую Сериализацию, я могу использовать, например, @Serializattion («client_id») public String ClientID;Теперь последний, но не список, мы вызываем API с помощью модернизации и используем ответ для просмотра элемента в списке -

RetroFitApplication.getWebservice().updateChatStatus().enqueue(new Callback() {
 @Override public void onResponse(Call call, Response response) {
  Log.d("retrofilt success", "" + response.body());
  if (response.body() != null) {
   clientResponceData = response.body();
   Gson gson = new Gson();
   String body = gson.toJson(response.body());
   Log.d("retrofilt success2", "clientData" + clientResponceData.getResponse());
   if (clientResponceData.getResponse() != null) {
    initRV();
   }
  } else {
   // Empty Client List  Toast.makeText(ClientList.this, "Empty List", Toast.LENGTH_SHORT).show();  
  }
 }

 @Override public void onFailure(Call call, Throwable t) {
  Log.d("retrofilt error", "" + t);
  Toast.makeText(ClientList.this, "No Internet Connection", Toast.LENGTH_SHORT).show();
 }
});

Используя конструкцию в адаптере, мы можем использовать значения из ответа.Ребята Я добавил этот репозиторий, чтобы получить полную идею вызова API и получить ответ от сервера с помощью библиотеки Retrofit.Я пишу все эти документы в деталях простым словом.

0 голосов
/ 24 мая 2018

Аннотация заголовка пользователя

@FormUrlEncoded
    @POST("GetBarcodeDetail")
    Call<PreliminaryGoodsAcceptResponse> PRELIMINARY_GOODS_ACCEPT_RESPONSE_CALL(@Header("Authorization") token: String,@Field("ProcName") String procName, @Field("Barcode") String barcode, @Field("LangCode") String langCode);
...