私はここ数週間アンドロイドに苦労しており、残念ながら私のエミュレーターで最初の動作するアプリを手に入れました。私のAndroidデバイスで動作させるために誰かが私を助けてくれることを本当に願っています. エミュレーターは v2.2 を実行し、私のデバイスは 2.3 以降です。
「アプリケーション」を拡張するクラスによって作成されたシングルトン「websiteservice」クラスがあります。websiteservice-class は 1 つの threadsafeconnection-manager を作成し、「CookieStore」を含みます。各 HTTPGet/Post は、threadsafeconn.manager がアタッチされた新しい HTTPClient を作成します。投稿または取得するたびに、利用可能な場合は Cookie を添付しようとします。Cookie は、Web サイトの保護された部分にログインするときに一度だけ設定されます。EntityUtils.ToString および Jsoup と共に、「保護された」Web サイト パーツの各 HTML 結果を解析します。ログオン時に、Android で sqllite テーブルを作成します。このテーブルには、ログオンしたユーザーの単純なレコードが 1 つだけ保存されます。
これをエミュレータで実行すると、すべてが思いどおりに実行されますが、デバイスでは何かがひどく間違っているようです。デバッガーを携帯電話に接続しました。ログインはうまくいっているようで、Cookie が設定されています。エラーが発生していないように見えるので、sqlliteビットもおそらくうまくいきます。プロファイル ページを読み込むと、HTTPGet アクションが CookieStore に添付された Cookie を取得していることがわかりますが、受信した HTML 結果/ドキュメントはログイン ページの 95% です。
ルート化された Desire HD では 1 回か 2 回プロファイル ページにアクセスできたので、95% と言います。プロファイル ページ (ハッシュマップを入力として持つカスタム リストボックス) をロードしたときは、何のアクションも開始できませんでした。彼らはすぐに中止し、おそらく同じ問題が発生しました(結果としてログインページが表示されます)。
忘れたアクセス許可はありますか、確認する必要があるものはありますか、それとも何かわかりますか? 私は今本当に混乱しています。
小さな更新
私は自分の電話を再起動しました。プログラムを起動すると、初めてログオンしたときにプロファイル ページが読み込まれます。私の「詳細」アクションは機能しているようです。このアクションはインターネットなどには接続せず、クラスに保存した情報を表示するだけです。他の 2 つのアクション (コピーと削除) が機能しません (結果として、おそらく「ログイン ページ」が表示されます)。画面を回転させると (向きが変わると)、ページが「再起動」し、プロファイル ページを再度読み込もうとします。リストボックスがクリアされ、自分のプロフィール ページ (広告のリスト) が表示されません。
更新 2 - 08-03 私のマニフェスト ファイルには、活動の登録とは別に、インターネット アクセス許可のみが含まれています。小さな「奇妙な」おまけ。私の「バックアップ」コードは、ここに投稿されたコードとほぼ同じようです。毎回クッキーを添付しているように見えますが、それでも何もしません:(。また、昨日電話で少し遊んでいて、方向を数回変更しました(アクティビティが自動的にリロードされます)、そして突然、私は自分のプロファイルを前に1、2回持っていました. 私はそれに対して何のアクションも実行できませんでしたが、情報を含む私のクラスはアクセス可能でいっぱいでした. PS. ちょうど午前8時15分に私の時間でしたが、切り替え後に再びプロファイルをロードできました.オリエンテーションを 4 ~ 5 回行います。
更新 2012 年 8 月 3 日 困惑し、夕方に多くのことを試しましたが、今ではエミュレーターのバージョンも元の状態に戻りました。バックアップを取得したので、np ですが、http を使用していないと思います-クライアントを適切に。以前のコードをすべて削除しました。これは、「websiteservice」に使用する現在のコードと、単に接続マネージャーをアタッチするだけで、get/post ごとにインスタンス化する「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;
}
}
私のウェブサイトクライアント:
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 などを使用すべきではありません。明日また明晰な心でこの問題を解決できることを願っています。
アイデアや意見をお待ちしております!