2012-03-06 15 views
0

私は誰かがこの問題を見つけることを望んでいます。私は完全にサーバー通信で働いていたアプリを持っていました。残念ながら、私はWindows 8 CPに移行するときにEclipseワークスペースを何とか失ってしまいました。私はまだ.apkを持っていて、Dex2jarとjd-guiを使って、たくさんのコードを取り戻すことができました。私はそれをすべて作業状態に戻しましたが、これがあります。私は、サーバーにURLを送信しようとしているし、文字列応答を取得しています。コードは次のとおりです。Android HTTPクライアントの問題

import org.apache.http.client.HttpClient; 
import org.apache.http.client.ResponseHandler; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.BasicResponseHandler; 
import org.apache.http.impl.client.DefaultHttpClient; 

public class login extends Activity{ 

<code> 

public void pushLogin(View paramView){ 

    try{ 
    HttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet(loginFinal); 
    ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
    errorTextView.setText(loginFinal); 

    //code gets here 
    String response = client.execute(request, responseHandler); 
    //does not get here 
    errorTextView.setText(response); 
    } 

My TextViewには常にloginFinalという文字列が含まれていますが、応答を表示することができません。これを確認するために、私はerrorTextView.setText(loginFinal);をString応答を取得しようとした後に行に移動しました。それはその時点で実行されませんでした。私は私の髪を引き裂いている、そして私はそれが何か簡単だと確信しています。私はインターネットの許可を得て、私は別の質問をして投稿したので、私はこのサイトのこの部分のアプリケーションのための私のオリジナルコードを見つけました。このコードは、私が知る限り、同一である。私が考えているのは、ビルドターゲットをFroyoからHoneycombに移したことです。私は錠剤に集中したいと思っていました。

私がボタンを押したときにLogCatが絶対に何もしないということは、pushLoginを起動することです。 client.execute(request, responseHandler)はまったく起動していないようです。

+0

なぜ、例外がスローされているかどうかを確認するためにclient.executeをチェックしないでください。あなたが接続しようとしているサーバーがアップしていますか? – dbryson

+0

try {}の後のcatchブロックには何がありますか?もしそれがclient.executeの後の行を実行しないとすれば、例外を打つことを仮定しなければなりません。あなたはデバッガで踏み込んだことがありますか? – Tim

+0

私はキャッチメソッドを持っていました。私はまだこれに信じられないほど新しいですが、私はこれが何らかの形のエラーを焼き付けなければならないという印象を受けています。 'catch(Exception e){ Toast.makeText(this、e.getMessage()、Toast.LENGTH_LONG); ' トーストにエラーが発生したことはありません。何か間違えている? –

答えて

0

APIレベル11(HONEYCOMB)、要するにネットワーク操作(HttpClientとHttpUrlConnectionを含む)がUIで実行されないため、スレッドポリシーが変更されていることに注意してくださいそれ以外の場合は、NetworkOnMainThreadExceptionを取得します。正しい戦略は、バックグラウンドスレッド(良い例としてAsycnTask)でpushLogin()を呼び出すことです。

このヘルプが必要です。

+0

それは、ありがとう。私はそれを非同期タスクに移す予定です。実際、それは私のコードを紛失したときに私が取り組んでいたものでした。しかし、何か新しいことを試してみる前に、中止したところに戻りたいと思っていました。好奇心のために、その目標はビルド目標に基づいていますか?私が尋ねる理由は、同じICS電話機のUIスレッド上でhttp通信を使って(基本的に)同じコードを実行していて、ターゲットが11ではなく8だったときにうまく走ったということです。 –

+0

これはif条件テストの内側にあるため、StrictMode.ThreadPolicyはAPIレベル9以降に導入されています。実行時に条件がチェックされます。投稿したコードはすべてのAndroidバージョンで動作します。 – yorkw