package net.wolfcs.network; import java.io.ByteArrayInputStream; import java.util.HashMap; import java.util.Map; import net.oschina.app.AppContext; import net.oschina.app.api.ApiClient; import net.oschina.app.bean.Result; import net.oschina.app.bean.URLs; import com.android.volley.AuthFailureError; import com.android.volley.NetworkResponse; import com.android.volley.Response; import com.android.volley.Response.ErrorListener; import com.android.volley.Response.Listener; import com.android.volley.toolbox.StringRequest; public class LoginRequest extends StringRequest { private AppContext mAppContext; private Map<String, String> mParams; public LoginRequest(int method, String url, Listener<String> listener, ErrorListener errorListener) { super(method, url, listener, errorListener); } public LoginRequest(String url, Map<String, String> params, AppContext appContext, Listener<String> listener, ErrorListener errorListener) { super(Method.POST, url, listener, errorListener); mAppContext = appContext; mParams = params; } @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> params = new HashMap<String, String>(); params.putAll(mParams); Map<String, String> superParams = super.getParams(); if (superParams != null) { params.putAll(superParams); } return params; } @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = new HashMap<String, String>(); Map<String, String> superHeaders = super.getHeaders(); if (superHeaders != null) { headers.putAll(superHeaders); } String cookie = ApiClient.getCookie(mAppContext); String userAgent = ApiClient.getUserAgent(mAppContext); headers.put("Host", URLs.HOST); headers.put("Cookie", cookie); headers.put("User-Agent", userAgent); return headers; } @Override protected Response<String> parseNetworkResponse(NetworkResponse response) { Map<String, String> responseHeaders = response.headers; String cookie = responseHeaders.get("Set-Cookie"); mAppContext.setProperty("cookie", cookie); return super.parseNetworkResponse(response); } @Override protected void deliverResponse(String response) { response = response.replaceAll("\\p{Cntrl}", ""); if (response.contains("result") && response.contains("errorCode") && mAppContext.containsProperty("user.uid")) { try { Result res = Result.parse(new ByteArrayInputStream(response.getBytes())); if (res.getErrorCode() == 0) { mAppContext.Logout(); mAppContext.getUnLoginHandler().sendEmptyMessage(1); } } catch (Exception e) { e.printStackTrace(); } } super.deliverResponse(response); } }