Я боролся с Android в течение последних нескольких недель и получил первое приложение для работы ... на моем эмуляторе только, к сожалению. Я действительно надеюсь, что кто-то может помочь мне, чтобы он работал на моем устройстве Android. Эмулятор запускает v2.2, мои устройства 2.3+.Приложение для Android HTTP, работающее на эмуляторе, а не на моем телефоне
У меня есть singleton 'websiteervice'-класс, созданный классом, который расширяет «Приложение». Класс websiteservice создает 1 threadafeconnection-manager и содержит «CookieStore». Каждый HTTPGet/Post создает новый HTTPClient, к которому привязан threadafeconn.manager. Каждый раз, когда я делаю сообщение или получаю, я пытаюсь прикрепить файлы cookie, если они доступны. Файлы cookie устанавливаются один раз и устанавливаются только при входе в защищенную часть веб-сайта. Вместе с EntitityUtils.ToString и Jsoup я анализирую каждый результат HTML моей «защищенной» части сайта. При входе в систему я создаю таблицу sqllite в android, в которой храню только одну простую запись, пользователя, который вошел в систему.
Когда я запускаю это на своем эмуляторе, все работает так, как я бы хотел, но на моем устройстве что-то кажется ужасно неправильным. Я подключил отладчик к своему телефону. Запись в журнал, похоже, идет очень хорошо, и файлы cookie устанавливаются. Квадратный бит, вероятно, тоже прекрасен, поскольку я, похоже, не получаю ошибок. После загрузки страницы профиля я вижу, что HTTPGet-action получает файлы cookie, прикрепленные к CookieStore, но полученный HTML-результат/документ - 95% от времени входа в систему.
Я говорю 95%, потому что я попал на мою страницу профиля один или два раза на своем ухоженном Desire HD, но на другом Desire HD я этого не сделал, и на моем Sensation XE тоже. Время, которое я получил, загрузило страницу профиля (пользовательский список с хэшмапом в качестве ввода), я не мог начать никаких действий. Они сразу же прервались, и, вероятно, у них была одна и та же проблема (в результате был получен логин-страница).
Есть ли какие-либо разрешения, которые я забыл, есть ли что-нибудь, что я должен проверить, или вы знаете, что это может быть? Я действительно запутался прямо сейчас.
Небольшое обновление
Я только что перезагрузил свой телефон. Когда я запускаю программу, при первом входе в систему моя страница профиля загружается. Мое «подробное» действие, похоже, работает. Это действие не подключается к Интернету или так, оно просто отображает информацию, хранящуюся в классе. Мои другие 2 действия (копирование и удаление) не работают (я, вероятно, получу «страницу входа»). Когда я поворачиваю экран (изменения ориентации), страница «перезагружается», и она пытается снова загрузить страницу профиля. Список удаляется, и я не возвращаю страницу своего профиля (это список рекламных объявлений).
Обновление 2 - 08-03 В файле манифеста содержится только разрешение на доступ к Интернету, кроме регистрации моих действий. Маленький «странный» дополнительный. Кажется, мой «резервный» код почти равен моему коду, размещенному здесь. Каждый раз, когда он, похоже, прикрепляет мои файлы cookie, но все же он ничего не делает с этим :(Кроме того, я немного играл вчера с моим телефоном, я несколько раз менял оговорку (которая автоматически перезагружает активность) и вдруг у меня один или два раза был мой профиль впереди. Я не мог делать никаких действий, но мой класс, содержащий информацию, был доступен и заполнен. PS. Сейчас, в 8.15 утра, я снова могу загрузить свой профиль после переключения ориентация в 4-5 раз.
Update 08.03.2012 Я озадачивает и пробовал много вещей, в вечернее время, и теперь я даже получил мой эмулятор-версии обратно на площадь 1. у вас есть резервная копия, поэтому np, но я думаю, что я не использую свой http-клиент должным образом. Я удалил весь предыдущий код, вот мой текущий код, который я использую для своего «веб-сервиса», и мой «Webclient», который я создаю для каждого получения/сообщения, просто присоединяясь к диспетчеру связи.
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;
}
}
Мой websiteclient:
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 или так. Надеюсь, завтра я смогу решить это с ясным умом.
Идеи и ввод приветствуются!
Мы могли бы лучше рассмотреть, если вы разместили свой код. Скорее домой =) – androidnoob
Я сделаю это, когда смогу. Я только начал свой рабочий день, но я просто почувствовал желание отправить свой вопрос, так что через 7-8 часов я смогу обновить свой вопрос. У меня такое чувство, что я могу пропустить какое-то управление контекстом или что-то еще. Поскольку я никогда раньше этого не делал, я «захватывал» информацию из всех видов потоков, в результате чего я получил сейчас :) – Honnes
Спасибо за сообщение кода. Не могли бы вы добавить разрешения, определенные в манифесте xml? – androidnoob