如何在android中使用rest api,并为你的项目创建re useable类。
一个完整的指南和示例,以访问你的api和响应的helper方法。
创建一个API配置类APIUrl.java。
public class APIUrl {
public static String baseurl = "http://yourdomina.com/api";
public static String URL_Test = baseurl + "test";
public static String URL_Login = baseurl + "login";
}
添加依赖关系到你的build.gradle
dependencies {
....
//3rd party library to access network
implementation 'com.android.volley:volley:1.1.1'
}
创建一个响应处理程序接口,名称为:ReseponseData.java。ReseponseData.java
import org.json.JSONObject;
public interface ReseponseData {
public void onResponse(String url, JSONObject response, Boolean success);
}
创建你的帮助类来重用HTTPRequest.java。
import android.content.Context;
import org.json.JSONObject;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
public class HTTPRequest {
ReseponseData mResultCallback = null;
Context mContext;
public HTTPRequest(ReseponseData resultCallback, Context context){
mResultCallback = resultCallback;
mContext = context;
}
public void postRequest(final String url, JSONObject sendObj){
try {
RequestQueue queue = Volley.newRequestQueue(mContext);
JsonObjectRequest jsonObj = new JsonObjectRequest(url,sendObj, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if(mResultCallback != null)
//mResultCallback.notifySuccess(requestType,response);
mResultCallback.onResponse(url,response,true);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if(mResultCallback != null)
mResultCallback.onResponse(url,null,false);
}
});
queue.add(jsonObj);
}catch(Exception e){
mResultCallback.onResponse(url,null,false);
}
}
public void getRequest(final String url){
try {
RequestQueue queue = Volley.newRequestQueue(mContext);
JsonObjectRequest jsonObj = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
if(mResultCallback != null)
mResultCallback.onResponse(url,response,true);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if(mResultCallback != null)
//mResultCallback.notifyError(requestType, error);
mResultCallback.onResponse(url,null,false);
}
});
queue.add(jsonObj);
}catch(Exception e){
mResultCallback.onResponse(url,null,false);
}
}
}
助手类的实现示例
public class MainActivity extends AppCompatActivity implements ReseponseData {
ReseponseData mResultCallback = null;
HTTPRequest httpRequest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mResultCallback = new MainActivity();
httpRequest = new HTTPRequest(mResultCallback,getApplicationContext());
HTTPTestGetMethod();
}
public void HTTPTestGetMethod() {
httpRequest.getRequest(APIUrl.URL_Test);
}
public void HTTPPostTest() {
try {
JSONObject postObject = new JSONObject("{'username':'test','password':'test'}");
httpRequest.postRequest(APIUrl.URL_Login,postObject);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onResponse(String url, JSONObject response, Boolean success) {
if (success) {
if(url == APIUrl.URL_Test ) {
Log.d("GetRequestedResponse",String.valueOf(response));
}
else if(url == APIUrl.URL_Login ) {
Log.d("PostrequestedResponse",String.valueOf(response));
}
}
else {
Log.d("requestStatus","Request Failed");
}
}
}