Android Retrofit GET和POST如何使用身份验证

时间:2019-06-09 15:16:12

标签: android post get retrofit2

我已经使用身份验证在翻新中实现了GET和Post Request。 用户名= admin Passwor ='admin' 使用网址参数query

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

implementation 'com.android.volley:volley:1.1.0'

  

将库添加到gradle

implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.3.0' implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' implementation 'com.google.code.gson:gson:2.8.5'

  

Api类

public class Api {
private static final String BASE_URL="https://your_url";

private static Api instance;
private final IApiCall iApiCallInterface;

private Api() {
Gson gson = new GsonBuilder().setLenient().create();
final OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .connectTimeout(60, TimeUnit.SECONDS)
        .writeTimeout(60, TimeUnit.SECONDS)
        .readTimeout(60, TimeUnit.SECONDS)
        .build();
 Retrofit retrofit = new 
 Retrofit.Builder().client(okHttpClient).baseUrl(BASE_URL)
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .addConverterFactory(GsonConverterFactory.create(gson)).build();

 iApiCallInterface = retrofit.create(IApiCall.class);
 }

 public static Api start() {
 return instance = instance == null ? new Api() : instance;
 }

public Observable<Example> getSendMoneyCountries() {
return iApiCallInterface.getCategoryList();
 }
 }
  

Crete接口名称IApiCall

public interface IApiCall {
//response in in json array
@Headers("Content-Type: application/json")
@GET("/json")
Observable<Example> getCategoryList();
}
  

主要活动代码

private static Api api;
api = Api.start();
api.getSendMoneyCountries()
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeWith(new DisposableObserver<Example>() {
         @Override
         public void onNext(Example response) {
         //clear array list
         //response store in array list
         }

         @Override
         public void onError(Throwable e) {
              //show toast msg
         }

            @Override
            public void onComplete() {
            //perform db insertion operation seperate thread
            //check for duplicate
            }
        });

1 个答案:

答案 0 :(得分:0)

排球要求课

public static int REQUEST_TIME_OUT = 1000 * 2 * 60;
public class VolleyRequestQueue {
private static VolleyRequestQueue mInstance;
private static Context mContext;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private LockatedJSONObjectRequest mLockatedJSONObjectRequest;
public static final String REQUEST_TAG = "API-REQUEST";
RequestQueue requestQueue;
private VolleyRequestQueue(Context context) {
    mContext = context;
    mRequestQueue = getRequestQueue();
}
public static synchronized VolleyRequestQueue getInstance(Context context) {
    if (mInstance == null) {
        mInstance = new VolleyRequestQueue(context);
    }
    return mInstance;
}
public void sendRequest(String tag, int method, String url, JSONObject jsonObject,
                        Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
    int socketTimeout = Utilities.REQUEST_TIME_OUT;
    requestQueue = mInstance.getRequestQueue();
    mLockatedJSONObjectRequest = new LockatedJSONObjectRequest(method, url, jsonObject, listener, errorListener);
    mLockatedJSONObjectRequest.setTag(tag);
    RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
    mLockatedJSONObjectRequest.setRetryPolicy(policy);
    requestQueue.add(mLockatedJSONObjectRequest);
}
public void sendRequest(String tag, int method, String url, JSONObject jsonObject,
                        Response.Listener<String> listener, Response.ErrorListener errorListener, final String message) {
    int socketTimeout = Utilities.REQUEST_TIME_OUT;
    requestQueue = mInstance.getRequestQueue();
    StringRequest sr = new StringRequest(method, url, listener, errorListener) {
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> params = new HashMap<>();
            params.put("msg", message);
            return params;
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("Content-Type", "application/x-www-form-urlencoded");
            return params;
        }
    };
    sr.setTag(tag);
    RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
    sr.setRetryPolicy(policy);
    requestQueue.add(sr);
}
public RequestQueue getRequestQueue() {
    if (mRequestQueue == null) {
        Cache cache = new DiskBasedCache(mContext.getCacheDir(), 10 * 1024 * 1024);
        Network network = new BasicNetwork(new HurlStack());
        mRequestQueue = new RequestQueue(cache, network);
        mRequestQueue.start();
    }
    return mRequestQueue;
}
public ImageLoader getImageLoader() {
    getRequestQueue();
    if (mImageLoader == null) {
        mImageLoader = new ImageLoader(this.mRequestQueue, new LruBitmapCache());
    }
    return this.mImageLoader;
}
public LockatedJSONObjectRequest getLockatedJSONObjectRequest() {
    return mLockatedJSONObjectRequest;
}}

JsonObjectRequest

 public class JSONObjectRequest extends JsonObjectRequest {
 public JSONObjectRequest(int method, String url, JSONObject jsonRequest, 
 Response.Listener<JSONObject> listener, Response.ErrorListener errorListener){
    super(method, url, jsonRequest, listener, errorListener);
 }

@Override
public Map<String, String> getHeaders() throws AuthFailureError
{
    HashMap<String, String> headers = new HashMap<String, String>();
    headers.put("Content-Type", "application/json; charset=utf-8");
    return headers;
}

@Override
public String getBodyContentType() {
    return "application/x-www-form-urlencoded; charset=UTF-8";
}

@Override
public RetryPolicy getRetryPolicy()
{
    return super.getRetryPolicy();
}}

JsonArray请求类

public class JSONArrayRequest extends JsonArrayRequest {

public JSONArrayRequest(int method, String url, JSONArray jsonRequest, Response.Listener<JSONArray> listener,
                                Response.ErrorListener errorListener) {
    super(method, url, jsonRequest, listener, errorListener);
}

@Override
public Map<String, String> getHeaders() throws AuthFailureError
{
    HashMap<String, String> headers = new HashMap<String, String>();
    headers.put("Content-Type", "application/json; charset=utf-8");
    return headers;
}

@Override
public RetryPolicy getRetryPolicy()
{
    return super.getRetryPolicy();
}

}

错误类别

 public class LockatedRequestError
 {
 public static void onRequestError(Context context, VolleyError error)
 {
    if (error instanceof NoConnectionError)
    {
        //show tost: NoConnectionError
    } else if (error instanceof AuthFailureError)
    {
        //show tost: AuthFailureError
    } else if (error instanceof ServerError)
    {
        //show tost: server_error
    } else if (error instanceof NetworkError)
    {
     //show tost: network_error
    } else if (error instanceof ParseError)
    {        //show tost: parse_error

    } else if (error instanceof TimeoutError)
    {
    {        //show tost: TimeoutError
    }
  }}

从活动调用-GET api JsonObject

  

类实现Response.Listener,Response.ErrorListener

public void callApi() {

        progressBar.setVisibility(View.VISIBLE);
        mLockatedPreferences = new LockatedPreferences(getActivity());
        String url = "your_url"; 
        mQueue = VolleyRequestQueue.getInstance(getActivity()).getRequestQueue();
        JSONObjectRequest mJSONObjectRequest = new JSONObjectRequest(Request.Method.GET,
                url, null, this, this);
        mJSONObjectRequest.setTag(REQUEST_TAG);
        mQueue.add(lockatedJSONObjectRequest);

}