Added incomplete APICalls class

To make http requests to API
TODO: Find out how to construct Category models
This commit is contained in:
misaochan 2015-12-22 16:40:47 +13:00
parent 9066c7da34
commit 506c2ab624
2 changed files with 201 additions and 3 deletions

View file

@ -0,0 +1,192 @@
package fr.free.nrw.commons.upload;
import android.content.Context;
import android.util.Log;
import com.android.volley.Cache;
import com.android.volley.NetworkResponse;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.HttpHeaderParser;
import com.android.volley.toolbox.JsonRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collection;
public class APICalls {
//private static final String ENDPOINT = "https://commons.wikimedia.org/w/api.php?action=query&prop=categories|coordinates|pageprops&format=json&clshow=!hidden&coprop=type%7Cname%7Cdim%7Ccountry%7Cregion%7Cglobe&codistancefrompoint=40.7127%7C-74.0059&generator=geosearch&redirects=&ggscoord=40.7127%7C-74.0059&ggsradius=10&ggslimit=5&ggsnamespace=6&ggsprop=type%7Cname%7Cdim%7Ccountry%7Cregion%7Cglobe&ggsprimary=all&formatversion=2";
private static final String ENDPOINT = "https://commons.wikimedia.org/w/api.php?action=query&prop=categories|coordinates|pageprops&format=json&clshow=!hidden&coprop=type%7Cname%7Cdim%7Ccountry%7Cregion%7Cglobe&codistancefrompoint=38.11386944444445%7C13.356263888888888&generator=geosearch&redirects=&ggscoord=38.11386944444445%7C13.356263888888888&ggsradius=100&ggslimit=10&ggsnamespace=6&ggsprop=type%7Cname%7Cdim%7Ccountry%7Cregion%7Cglobe&ggsprimary=all&formatversion=2";
private static RequestQueue REQUEST_QUEUE;
private static final Gson GSON = new Gson();
private Context context;
public APICalls(Context context) {
this.context = context;
}
public void request() {
JsonRequest<QueryResponse> request = new QueryRequest(ENDPOINT,
new LogResponseListener<QueryResponse>(), new LogResponseErrorListener());
getQueue().add(request);
}
private RequestQueue getQueue() {
return getQueue(context);
}
private static RequestQueue getQueue(Context context) {
if (REQUEST_QUEUE == null) {
REQUEST_QUEUE = Volley.newRequestQueue(context.getApplicationContext());
}
return REQUEST_QUEUE;
}
private static class LogResponseListener<T> implements Response.Listener<T> {
private static final String TAG = LogResponseListener.class.getName();
@Override
public void onResponse(T response) {
Log.d(TAG, response.toString());
}
}
private static class LogResponseErrorListener implements Response.ErrorListener {
private static final String TAG = LogResponseErrorListener.class.getName();
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, error.toString());
}
}
private static class QueryRequest extends JsonRequest<QueryResponse> {
private static final String TAG = QueryRequest.class.getName();
public QueryRequest(String url,
Response.Listener<QueryResponse> listener,
Response.ErrorListener errorListener) {
super(Request.Method.GET, url, null, listener, errorListener);
}
@Override
protected Response<QueryResponse> parseNetworkResponse(NetworkResponse response) {
String json = parseString(response);
//Log.d(TAG, "json=" + json);
QueryResponse queryResponse = GSON.fromJson(json, QueryResponse.class);
return Response.success(queryResponse, cacheEntry(response));
}
private Cache.Entry cacheEntry(NetworkResponse response) {
return HttpHeaderParser.parseCacheHeaders(response);
}
private String parseString(NetworkResponse response) {
try {
return new String(response.data, HttpHeaderParser.parseCharset(response.headers));
} catch (UnsupportedEncodingException e) {
return new String(response.data);
}
}
}
private static class QueryResponse {
private Query query;
@Override
public String toString() {
return "query=" + query.toString();
}
}
private static class Query {
private Page [] pages;
@Override
public String toString() {
StringBuilder builder = new StringBuilder("pages=");
for (Page page : pages) {
builder.append(page.toString());
builder.append("\n");
//page.extractCategories();
}
builder.replace(builder.length() - 1, builder.length(), "");
return builder.toString();
}
}
private static class Page {
private int pageid;
private int ns;
private String title;
//private ArrayList<Object> categories;
//private Category category;
/*
public boolean categoryExists() {
if (categories != null) {
return true;
}
else {
return false;
}
}
public void extractCategories() {
if (categoryExists()==true) {
Log.d("Cat", "categories exist");
for (Object categoryobj : categories) {
Log.d("Cat", categoryobj.getClass().getName());
}
}
else {
Log.d("Cat", "categories don't exist");
}
}*/
@Override
public String toString() {
//if (categoryExists()==true) {
return "pageid=" + pageid + " ns=" + ns + " title=" + title + " categories=";// + category.toString();
//}
//else {
// return "pageid=" + pageid + " ns=" + ns + " title=" + title;
// }
}
}
/*
private class Category {
private Category [] categories;
private int ns;
private String title;
public Category(Object categoryobj) {
//TODO
}
public String toString() {
StringBuilder builder = new StringBuilder("categories=");
for (Category category: categories) {
builder.append(category.toString());
builder.append("\n");
}
builder.replace(builder.length() - 1, builder.length(), "");
return builder.toString();
}
}*/
}

View file

@ -184,7 +184,14 @@ public class ShareActivity
String coords = imageObj.getCoords();
Log.d("Image", "Coords of image: " + coords);
Log.d("Image", "URL: " + UrlBuilder.buildUrl(coords));
//build URL for MediaWiki API calls
String apiUrl = UrlBuilder.buildUrl(coords);
Log.d("Image", "URL: " + apiUrl);
//TODO: Call request() method of APICalls
APICalls apiCall = new APICalls(this);
apiCall.request();
ImageLoader.getInstance().displayImage(mediaUriString, backgroundImageView);
@ -237,8 +244,7 @@ public class ShareActivity
.appendQueryParameter("ggsprimary", "all")
.appendQueryParameter("formatversion", "2");
String url = builder.build().toString();
return url;
return builder.build().toString();
}
}