package studio.uphie.one.abs; import android.app.Activity; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.PopupWindow; import com.loopj.android.http.RequestParams; import com.loopj.android.http.TextHttpResponseHandler; import studio.uphie.one.R; import studio.uphie.one.common.HttpClient; import studio.uphie.one.common.HttpData; import studio.uphie.one.common.HttpError; import studio.uphie.one.interfaces.IHttp; import studio.uphie.one.interfaces.IInit; import studio.uphie.one.utils.NetworkUtil; import studio.uphie.one.utils.TextToast; import org.apache.http.Header; import org.json.JSONException; import org.json.JSONObject; import butterknife.ButterKnife; import studio.uphie.one.utils.TimeUtil; /** * Created by Uphie on 2015/9/5. * Email: uphie7@gmail.com */ public abstract class AbsBaseFragment extends Fragment implements IInit, IHttp { /** * 当前的日期 */ protected String curDate; /** * 当前的索引 */ protected int index; @Override public void onAttach(Activity activity) { super.onAttach(activity); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (getLayoutId() == 0) { return super.onCreateView(inflater, container, savedInstanceState); } View rootView = inflater.inflate(getLayoutId(), null); ButterKnife.bind(this, rootView); init(); return rootView; } @Override public void onDestroyView() { super.onDestroyView(); ButterKnife.unbind(this); } @Override public void getHttpData(final String url, RequestParams params, final HttpData httpData) { if (!NetworkUtil.getInstance().checkNetworkAvailable()) { //网络不可用,使用本地缓存 onRestoreData(url); return; } HttpClient.postByForm(url, params, new TextHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, String responseString) { if (statusCode == 200) { if (responseString.contains("\"result\":\"FAIL\"")) { //没有数据 HttpError error = new HttpError(statusCode, "", responseString); onDataError(url, error); return; } try { JSONObject jsonObject = new JSONObject(responseString); if (httpData == null) { return; } String success = jsonObject.optString(httpData.result); if (success.equals("SUCCESS")) { String data = jsonObject.optString(httpData.data, ""); onDataOk(url, data); } else { HttpError error = new HttpError(statusCode, "", responseString); onDataError(url, error); } } catch (JSONException e) { e.printStackTrace(); } } else { HttpError error = new HttpError(statusCode, "", responseString); onDataError(url, error); } } @Override public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { HttpError error = new HttpError(statusCode, throwable.toString(), responseString); onDataError(url, error); } }); } /** * 当前是否是第一页 * @return */ public boolean isFirstPage(){ return index==1; } /** * 是否过期,限制查看7天内的往期内容 * * @return */ public boolean isExpired() { return TimeUtil.getDateDifference(curDate) > 7; } public abstract <T> T getContentData(); public abstract void refreshUI(Object data); public abstract void finish(); }