У меня есть приложение для Android, в котором используется несколько одноэлементных объектов. Эти объекты используются во многих видах деятельности. Когда исключение бросается в действие, разные поля в моих синглонах становятся нулевыми, а все другие действия также вызывают исключения. Например, у меня есть одноэлементный класс для обработки моего файла cookie, у которого есть статическое поле HTTPCookie
, и если в какой-либо деятельности возникает исключение, это поле cookie также становится null
.android exception в действии делает все одноэлементные поля нулевыми
Хотелось бы знать, почему это происходит. Как я могу предотвратить это?
ОБНОВЛЕНИЕ: код для одного из моих синглетов.
public class CookieHandler {
public interface CookieHandlerCallback {
void OnNewCookieReceived();
void OnNewCookieFailed();
}
public static HttpCookie myCookie;
private static CookieHandler singleton = new CookieHandler();
private static CookieHandlerCallback cookieHandler;
private static Context context;
public static CookieHandler getInstance() {
return singleton;
}
private CookieHandler() {
}
public HttpCookie getMyCookie() {
return myCookie;
}
public static void setupInterface(CookieHandlerCallback co) {
cookieHandler = co;
}
public static void getNewCookie() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
final SharedPreferences.Editor editor = prefs.edit();
Gson gson = new Gson();
String json = prefs.getString("cookie", "");
myCookie = gson.fromJson(json, HttpCookie.class);
AppidoRetroAPI apiRetro = RetrofitService.getAppidoAPI();
Call<ResponseBody> call = apiRetro.getCookie(myCookie == null ? "" : myCookie.getValue());
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.code() == 401) {
Log.d("app process", "my debug" + "requestCategories in code 401 ");
String headerCookie = response.headers().get(ApiCnst.COOKIES_HEADER);
if (headerCookie != null) {
myCookie = new HttpCookie(ApiCnst.MY_COOKIE_NAME, headerCookie);
Gson gson = new Gson();
String json = gson.toJson(myCookie);
myCookie = gson.fromJson(json, HttpCookie.class);
editor.putString("cookie", json);
editor.commit();
}
} else if (response.code() == 200) {
UserProfileInfo.getInstance().setIs_logged_in(true);
try {
JSONObject jsonObject = new JSONObject(HttpManager.JsonTOString(response.body().byteStream()));
UserProfileInfo.getInstance().setUserJson(jsonObject);
} catch (Exception e) {
e.printStackTrace();
}
Log.d("app process", "my debug" + "requestCategories in code 200 ");
}
cookieHandler.OnNewCookieReceived();
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
t.printStackTrace();
cookieHandler.OnNewCookieFailed();
}
});
}
public static void updateContext(Context ctx) {
context = ctx;
}
Показать код. –
@N neeraj Lal это очень огромное приложение с большим количеством классов. –
Не показывать весь код. Покажите фрагмент кода, который имеет отношение к вопросу. –