用JSON对象实现POST、GET方法的Android HTTP请求句柄[已关闭]。

问题描述 投票:0回答:1

如何在android中使用rest api,并为你的项目创建re useable类。

java android json api android-volley
1个回答
0
投票

一个完整的指南和示例,以访问你的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");
    }
 }
}
© www.soinside.com 2019 - 2024. All rights reserved.