Последние несколько недель я боролся с android и получил себе первое работающее приложение ... на моем эмуляторе, к сожалению, только.Я действительно надеюсь, что кто-то может помочь мне заставить его работать на моем устройстве Android.Эмулятор запускает v2.2, мои устройства 2.3 +.
У меня есть одноэлементный класс websiteservice, который создается классом, расширяющим «Application».Класс websiteservice создает 1 потокобезопасный менеджер соединений и содержит «CookieStore».Каждый HTTPGet / Post создает новый HTTPClient с присоединенным к нему threadsafeconn.manager.Каждый раз, когда я делаю пост или получаю, я пытаюсь прикрепить куки, если они есть.Файлы cookie устанавливаются один раз и только при входе на защищенную часть веб-сайта.Вместе с EntitityUtils.ToString и Jsoup я анализирую каждый HTML-результат моей «защищенной» части веб-сайта.При входе в систему я создаю таблицу sqllite в Android, в которой я храню только 1 простую запись, пользователь, который вошел в систему.
Когда я запускаю это на своем эмуляторе, все работает так, как мне бы хотелосьбыть, но на моем устройстве, кажется, что-то идет ужасно неправильно.Я подключил отладчик к своему телефону.Вход в систему, кажется, идет хорошо, и куки устанавливаются.Бит sqllite, вероятно, тоже подходит, так как я не вижу ошибок.При загрузке страницы профиля я вижу, что HTTPGet-действие получает файлы cookie, прикрепленные к CookieStore, но HTML-результат / документ, который я получаю, составляет 95% от времени входа в систему.
Я говорю 95%, потому что я попадал на страницу своего профиля один или два раза на своем рутированном Desire HD, но на другом Desire HD я этого не делал, и на моем Sensation XE тоже нет.Когда я загружал страницу профиля (пользовательский список с хэш-картой в качестве входных данных), я не мог начать какое-либо действие.Они сразу же прервались, и, вероятно, у них возникла та же проблема (в результате была получена страница входа в систему).
Есть ли какие-то разрешения, которые я забыл, есть что-то, что я должен проверить, или у вас есть какие-либо идеи, что это моглобыть?Я сейчас очень запутался.
Небольшое обновление
Я только что перезагрузил свой телефон.При первом запуске программы страница моего профиля загружается.Похоже, мое действие «подробно» работает.Это действие не подключается к Интернету или около того, оно просто отображает информацию, которую я хранил в классе.Мои другие 2 действия (копирование и удаление) не работают (в результате я, вероятно, получаю «страницу входа»).Когда я переворачиваю экран (ориентация меняется), страница «перезагружается», и она пытается снова загрузить страницу профиля.Список очищается, и я не получаю обратно свою страницу профиля (которая представляет собой список объявлений).
Обновление 2 - 08-03 Мой файл манифеста содержит только Интернет-разрешение, кроме регистрации моей деятельности.Небольшое «странное» дополнение.Кажется, мой «резервный» код почти совпадает с моим кодом, размещенным здесь.Кажется, что каждый раз он прикрепляет мои куки, но все равно ничего с этим не делает :(. Кроме того, вчера я немного поиграл с телефоном, несколько раз менял orentiation (что автоматически перезагружает активность),и вдруг у меня один или два раза появился мой профиль впереди. Я не мог ничего с ним сделать, но мой класс, содержащий информацию, был доступен и заполнен. PS. Сейчас, в 8.15, я снова смог загрузить свой профиль после переключенияориентация 4-5 раз.
Обновление 08-03-2012 Вечером я ломал голову и много чего пробовал, а теперь даже вернул свою версию эмулятора обратно в квадрат 1Получил резервную копию, так что np, но я думаю, что я не правильно использую свой http-клиент. Я удалил весь предыдущий код, вот мой текущий код, который я использую для моей 'websiteservice', и мой 'Webclient', который я создаю для каждогоget / post, просто подключив менеджер соединений.
private static WebsiteService instance;
ThreadSafeClientConnManager manager;
HttpContext localContext;
CookieStore cookies;
public String returnCode = "";
public HttpPost httpPost = null;
public HttpGet httpGet = null;
public static WebsiteService getInstance()
{
// Return the instance
return instance;
}
private WebsiteService()
{
DefaultHttpClient client = new DefaultHttpClient();
ClientConnectionManager mgr = client.getConnectionManager();
HttpParams params = client.getParams();
manager = new ThreadSafeClientConnManager(params,mgr.getSchemeRegistry());
localContext = new BasicHttpContext();
cookies = new BasicCookieStore();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookies);
}
public static void initInstance()
{
if (instance == null)
instance = new WebsiteService();
}
public WebsiteClient postPage(String url, List<NameValuePair> nvps)
{
return postPage(url, nvps, true);
}
public WebsiteClient getPage(String url) {
WebsiteClient client = new WebsiteClient(manager);
DefaultHttpClient httpClient = client.httpClient;
httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
//HttpProtocolParams.setContentCharset(httpClient.getParams(), "CP1250");
if(cookies != null)
httpClient.setCookieStore(cookies);
httpGet = new HttpGet(url);
try {
client.response = httpClient.execute(httpGet,localContext);
} catch (ClientProtocolException e) {
System.out.println("HTTPService : ClientProtocolException : "+e.getMessage());
return null;
} catch (IOException e) {
System.out.println("HTTPService : IOException : "+e);
return null;
}
//cookies = httpClient.getCookieStore();
return client;
}
public WebsiteClient postPage(String url, List<NameValuePair> nvps, boolean autoRedirect) {
WebsiteClient client = new WebsiteClient(manager);
DefaultHttpClient httpClient = client.httpClient;
httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
if(cookies != null)
httpClient.setCookieStore(cookies);
if(!autoRedirect)
{
HttpParams params = httpClient.getParams();
HttpClientParams.setRedirecting(params, false);
}
httpPost = new HttpPost(url);
client.response = null;
//
httpPost.setHeader("User-Agent", "Mozilla/5.0 (X11; U; Linux " +
"i686; en-US; rv:1.8.1.6) Gecko/20061201 Firefox/2.0.0.6 (Ubuntu-feisty)");
httpPost.setHeader("Accept", "text/html,application/xml," +
"application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
try {
if(nvps != null)
httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.ISO_8859_1));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
System.out.println("HTTPHelp : UnsupportedEncodingException : "+e);
}
//httpPost.setEntity(tmp);
try {
client.response = httpClient.execute(httpPost, localContext);
} catch (ClientProtocolException e) {
System.out.println("HTTPService : ClientProtocolException : "+e.getMessage());
return null;
} catch (IOException e) {
System.out.println("HTTPService : IOException : "+e);
return null;
}
cookies = httpClient.getCookieStore();
return client;
}
}
Мой веб-клиент:
public DefaultHttpClient httpClient;
public HttpResponse response = null;
public WebsiteClient(ThreadSafeClientConnManager manager)
{
DefaultHttpClient client = new DefaultHttpClient();
HttpParams params = client.getParams();
httpClient = new DefaultHttpClient(manager, params);
}
Я, должно быть, что-то не так с куки-файлами, или покажиЯ бы не использовал тот же Httpget / Httppost или около того.Надеюсь, я смогу решить эту проблему с ясным разумом завтра.
Идеи и отзывы приветствуются!