public interface IArticleLoader extends Parcelable {
/**
* Load article.
* @param loadListener Load complete listener.
*/
void load(IArticleLoadListener loadListener);
}
public class PhotoArticleLoader implements IArticleLoader {
private IArticleContract.IArticlePresenter mPhotoArticlePresenter;
private IArticleLoadListener mLoadListener;
private String mUrl;
/**
* 这个是Creator通过Parcel来创建,在这个函数里面要将Parcel里的数据通过Parcel.readXXX()读出来,这个函数不是API使用者调用,而是被Creator来调用。
* writeToParcel()函数的写入参数
* 这个函数要配合
* Construct a photo article loader.
* @param source Parcel.
*/
public PhotoArticleLoader(Parcel source) {
mUrl = source.readString();
}
/**
* 这个是用于没有Parcel的时候的构造函数
* Url.
* @param url Url.
*/
public PhotoArticleLoader(String url) {
mUrl = url;
}
/**
* {@inheritDoc}
*/
@Override
public void load(IArticleLoadListener loadListener) {
mLoadListener = loadListener;
IDuApplication.HttpClient.addJsonObjectRequest(mUrl, null, new PhotoInfoResponse(), new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
}
/**
* {@inheritDoc}
*/
@Override
public int describeContents() {
return 0;
}
/**
* 这是Parcelable要override的函数,在这里需要把你要打包的数据通过Parcel.writeXXX()写到Parcel里去。
* {@inheritDoc}
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mUrl);
}
/**
* 每个Parcelable都必须要有一个Creator,在createFromParcel()函数中要调用XXX(Parcel)的构造函数
* A creator
*/
public static final Creator<IArticleLoader> CREATOR = new Creator<IArticleLoader>() {
/**
* {@inheritDoc}
*/
@Override
public IArticleLoader createFromParcel(Parcel source) {
return new PhotoArticleLoader(source);
}
/**
* {@inheritDoc}
*/
@Override
public IArticleLoader[] newArray(int size) {
return new TextArticleHtmlLoader[0];
}
};
/**
* Raw photo info json responser.
*/
class PhotoInfoResponse implements Response.Listener<JSONObject> {
/**
* {@inheritDoc}
*/
@Override
public void onResponse(JSONObject jsonObject) {
try {
JSONArray photoInfos = JsonUtils.getJsonArray("photos", jsonObject);
HashMap<String, String> photos = new HashMap<>();
for(int i = 0; i < photoInfos.length(); i++) {
JSONObject photoInfo = (JSONObject) photoInfos.get(i);
String imageUrl = JsonUtils.getString("imgurl", photoInfo);
String note = JsonUtils.getString("note", photoInfo);
photos.put(imageUrl, note);
}
mLoadListener.onLoaded(photos);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
转载请注明原文地址: https://ju.6miu.com/read-768.html