Configure.java
RedditAuthenticationModule module = new RedditAuthenticationModule(getApplicationContext());
PipeConfig config = new PipeConfig(redditURL, Listing.class);
config.setGsonBuilder(new GsonBuilder().registerTypeAdapter(Listing.class, new ListingTypeAdapter()));
config.setEndpoint(".json");
config.setAuthModule(module);
pipeline.pipe(Listing.class, config);
Use.java
public void login(String username, String password, Callback<HeaderAndBody> callback) {
module.login(username, password, callback);
}
Configure.java
authenticator = new Authenticator(redditURL);
module = new RedditAuthenticationModule(getApplicationContext());
authenticator.add("reddit", module);
PipeConfig config = new PipeConfig(redditURL, Listing.class);
config.setGsonBuilder(new GsonBuilder().registerTypeAdapter(
Listing.class, new ListingTypeAdapter()));
config.setEndpoint(".json");
config.setAuthModule(module);
config.setPageConfig(pageConfig);
pipeline.pipe(Listing.class, config);
Use.java
public void login(String username, String password, Callback<HeaderAndBody> callback, Fragment fragment) {
authenticator.get("reddit", fragment, this.getApplicationContext()).login(username, password, callback);
}
Fragment.java
public void load() {
StoryListApplication application = (StoryListApplication) getActivity()
.getApplication();
Pipe<Listing> listing = pipeline.get("listing");
listing.read(new Callback<List<Listing>>() {
public void onSuccess(List<Listing> data) {
Log.d("Reddt", "success");
Log.d("Reddit", data.toString());
setListAdapter(new ArrayAdapter<T3>(getActivity(),
R.layout.simple_list_item_activated_1,
R.id.text1,
data.get(0).getData().getChildren()));
}
public void onFailure(Exception e) {
Log.d("Reddt", "failure", e);
if (e instanceof HttpException) {
HttpException httpException = (HttpException) e;
Log.d("Reddit", new String(httpException.getData()));
}
}
});
}
Fragment.java
public Fragment() {
this.readCallback = new StoryListCallback<List<Listing>>(this);
}
public void load() {
StoryListApplication application = (StoryListApplication) getActivity()
.getApplication();
LoaderPipe<Listing> listing = pipeline.get("listing", this, this.getActivity());
listing.read(readCallback);
}
StoryListCallback.java
public class StoryListCallback<T>
extends
AbstractFragmentCallback<List<Listing>> {
public StoryListCallback(StoryListFragment f) {
super(f, 1);
}
public void onSuccess(final List<Listing> data) {
final StoryListFragment fragment = (StoryListFragment) getFragment();
Log.d("Reddt", "success");
Log.d("Reddit", data.toString());
fragment.setListAdapter(new ArrayAdapter<T3>(getActivity(),
R.layout.simple_list_item_activated_1,
R.id.text1,
data.get(0).getData().getChildren()));
}
public void onFailure(Exception e) {
Log.d("Reddt", "failure", e);
if (e instanceof HttpException) {
HttpException httpException = (HttpException) e;
Log.d("Reddit", new String(httpException.getData()));
}
}
}
No change
public void login(final String username, final String password,
final Callback<HeaderAndBody> callback) {
new AsyncTask<Void, Void, Void>() {
private Exception exception;
private HeaderAndBody result;
@Override
protected Void doInBackground(Void... params) {
try {
HttpProvider provider = new HttpRestProvider(
getLoginURL(username));
provider.setDefaultHeader("User-Agent",
"AeroGear StoryList Demo /u/secondsun");
provider.setDefaultHeader("Content-Type",
"application/x-www-form-urlencoded");
String loginData = buildLoginData(username, password);
result = provider.post(loginData);
Log.d("Auth", new String(result.getBody()));
String json = new String(result.getBody());
JsonObject obj = new JsonParser().parse(json)
.getAsJsonObject().get("json").getAsJsonObject();
modHash = obj.get("data").getAsJsonObject().get("modhash")
.getAsString();
authToken = obj.get("data").getAsJsonObject().get("cookie")
.getAsString();
isLoggedIn = true;
} catch (Exception e) {
Log.e(RedditAuthenticationModule.class.getSimpleName(),
"Error with Login", e);
exception = e;
}
return null;
}
private String buildLoginData(String username, String password) {
StringBuilder builder = new StringBuilder();
builder.append("user=").append(URLEncoder.encode(username))
.append("&api_type=json&passwd=")
.append(URLEncoder.encode(password));
return builder.toString();
}
@Override
protected void onPostExecute(Void ignore) {
super.onPostExecute(ignore);
if (exception == null) {
callback.onSuccess(this.result);
} else {
callback.onFailure(exception);
}
}
}.execute((Void) null);
}
public void login(final String username, final String password,
final Callback<HeaderAndBody> callback) {
THREAD_POOL_EXECUTOR.execute(new Runnable() {
private Exception exception;
private HeaderAndBody result;
@Override
public void run() {
try {
HttpProvider provider = new HttpRestProvider(
getLoginURL(username));
provider.setDefaultHeader("User-Agent",
"AeroGear StoryList Demo /u/secondsun");
provider.setDefaultHeader("Content-Type",
"application/x-www-form-urlencoded");
String loginData = buildLoginData(username, password);
result = provider.post(loginData);
Log.d("Auth", new String(result.getBody()));
String json = new String(result.getBody());
JsonObject obj = new JsonParser().parse(json)
.getAsJsonObject().get("json").getAsJsonObject();
modHash = obj.get("data").getAsJsonObject().get("modhash")
.getAsString();
authToken = obj.get("data").getAsJsonObject().get("cookie")
.getAsString();
isLoggedIn = true;
} catch (Exception e) {
Log.e(RedditAuthenticationModule.class.getSimpleName(),
"Error with Login", e);
exception = e;
}
if (exception == null) {
callback.onSuccess(this.result);
} else {
callback.onFailure(exception);
}
}
private String buildLoginData(String username, String password) {
StringBuilder builder = new StringBuilder();
builder.append("user=").append(URLEncoder.encode(username))
.append("&api_type=json&passwd=").append(
URLEncoder.encode(password));
return builder.toString();
}
});
}
MyCustomPipe.java
public class MyCustomPipe implements Pipe {
//snip
@Override
public void readWithFilter(ReadFilter filter, final Callback<List<T>> callback) {
if (filter == null) {
filter = new ReadFilter();
}
final ReadFilter innerFilter = filter;
new AsyncTask<Void, Void, Void>() {
List<T> result = null;
Exception exception = null;
@Override
protected Void doInBackground(Void... voids) {
try {
HttpProvider httpProvider = getHttpProvider("http://www.devnexus.com/s/speakers.json");
HeaderAndBody httpResponse = httpProvider.get();
byte[] responseBody = httpResponse.getBody();
String responseAsString = new String(responseBody, encoding);
JsonParser parser = new JsonParser();
JsonElement httpJsonResult = parser.parse(responseAsString);
httpJsonResult = getResultElement(httpJsonResult, dataRoot);
if (httpJsonResult.isJsonArray()) {
T[] resultArray = gson.fromJson(httpJsonResult, arrayKlass);
this.result = Arrays.asList(resultArray);
} else {
T resultObject = gson.fromJson(httpJsonResult, klass);
List<T> resultList = new ArrayList<T>(1);
resultList.add(resultObject);
this.result = resultList;
}
} catch (Exception e) {
exception = e;
}
return null;
}
@Override
protected void onPostExecute(Void ignore) {
super.onPostExecute(ignore);
if (exception == null) {
callback.onSuccess(this.result);
} else {
callback.onFailure(exception);
}
}
}.execute();
}
}
Application.java
Pipeline pipeline = new Pipeline(MY_URL);
pipeline.add("speakers", new MyCustomPipe());
MyCustomPipeHandler.java
public class MyCustomPipeHandler implements PipeHandler {
@Override
public List<T> onReadWithFilter(ReadFilter filter, Pipe<T> requestingPipe) {
List<T> result;
HttpProvider httpProvider = getHttpProvider("https://devnexus.com/s/speakers.json");
HeaderAndBody httpResponse = httpProvider.get();
byte[] responseBody = httpResponse.getBody();
String responseAsString = new String(responseBody, encoding);
JsonParser parser = new JsonParser();
JsonElement httpJsonResult = parser.parse(responseAsString);
httpJsonResult = getResultElement(httpJsonResult, dataRoot);
if (httpJsonResult.isJsonArray()) {
T[] resultArray = gson.fromJson(httpJsonResult, arrayKlass);
result = Arrays.asList(resultArray);
} else {
T resultObject = gson.fromJson(httpJsonResult, klass);
List<T> resultList = new ArrayList<T>(1);
resultList.add(resultObject);
result = resultList;
}
return result;
}
}
Application.java
Pipeline pipeline = new Pipeline(MY_URL);
PipeConfig config = new PipeConfig();
config.setHandler(new MyCustomePipeHandler());
pipeline.pipe("speakers", config);