Add basic infrastructure for API calls, GSON, and GSON request class
This commit is contained in:
		
							parent
							
								
									dd2f5c0886
								
							
						
					
					
						commit
						2e479350de
					
				| @ -45,4 +45,5 @@ dependencies { | ||||
|     implementation "androidx.camera:camera-view:1.0.0-alpha14" | ||||
|     implementation 'com.google.zxing:core:3.3.0' | ||||
|     implementation 'com.android.volley:volley:1.2.0' | ||||
|     implementation 'com.google.code.gson:gson:2.8.6' | ||||
| } | ||||
| @ -0,0 +1,25 @@ | ||||
| package dev.garrettmills.starship.hyperlink.util; | ||||
| 
 | ||||
| import dev.garrettmills.starship.hyperlink.Hyperlink; | ||||
| 
 | ||||
| public class APIv1 { | ||||
|     /** | ||||
|      * Given an API endpoint, resolve the fully qualified URL using the stored server address. | ||||
|      * Example: | ||||
|      * resolveEndpoint("/auth/redeem")  // => "https://hyperlink.url/api/v1/auth/redeem" | ||||
|      * @param endpoint un-qualified api endpoint | ||||
|      * @return The resolved string. | ||||
|      */ | ||||
|     public static String resolveEndpoint(String endpoint) { | ||||
|         if ( !endpoint.startsWith("/") ) { | ||||
|             endpoint = "/" + endpoint; | ||||
|         } | ||||
| 
 | ||||
|         String server = Hyperlink.preferences.getString(Hyperlink.SERVER_ADDR, ""); | ||||
|         if ( server.endsWith("/") ) { | ||||
|             server = server.substring(0, server.length() - 1); | ||||
|         } | ||||
| 
 | ||||
|         return server + "/api/v1" + endpoint; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,61 @@ | ||||
| package dev.garrettmills.starship.hyperlink.util; | ||||
| 
 | ||||
| import com.android.volley.AuthFailureError; | ||||
| import com.android.volley.NetworkResponse; | ||||
| import com.android.volley.ParseError; | ||||
| import com.android.volley.Request; | ||||
| import com.android.volley.Response; | ||||
| import com.android.volley.toolbox.HttpHeaderParser; | ||||
| import com.google.gson.Gson; | ||||
| import com.google.gson.JsonSyntaxException; | ||||
| 
 | ||||
| import java.io.UnsupportedEncodingException; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| public class GsonRequest<T> extends Request<T> { | ||||
|     private final Gson gson = new Gson(); | ||||
|     private final Class<T> clazz; | ||||
|     private final Map<String, String> headers; | ||||
|     private final Response.Listener<T> listener; | ||||
| 
 | ||||
|     /** | ||||
|      * Make a GET request and return a parsed object from JSON. | ||||
|      * | ||||
|      * @param url URL of the request to make | ||||
|      * @param clazz Relevant class object, for Gson's reflection | ||||
|      * @param headers Map of request headers | ||||
|      */ | ||||
|     public GsonRequest(String url, Class<T> clazz, Map<String, String> headers, | ||||
|                        Response.Listener<T> listener, Response.ErrorListener errorListener) { | ||||
|         super(Method.GET, url, errorListener); | ||||
|         this.clazz = clazz; | ||||
|         this.headers = headers; | ||||
|         this.listener = listener; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public Map<String, String> getHeaders() throws AuthFailureError { | ||||
|         return headers != null ? headers : super.getHeaders(); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     protected void deliverResponse(T response) { | ||||
|         listener.onResponse(response); | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     protected Response<T> parseNetworkResponse(NetworkResponse response) { | ||||
|         try { | ||||
|             String json = new String( | ||||
|                     response.data, | ||||
|                     HttpHeaderParser.parseCharset(response.headers)); | ||||
|             return Response.success( | ||||
|                     gson.fromJson(json, clazz), | ||||
|                     HttpHeaderParser.parseCacheHeaders(response)); | ||||
|         } catch (UnsupportedEncodingException e) { | ||||
|             return Response.error(new ParseError(e)); | ||||
|         } catch (JsonSyntaxException e) { | ||||
|             return Response.error(new ParseError(e)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user