-1

私の問題は、私はandriodのhttpclientで作業していて、アプリケーションにインターネット許可を与え、アプリケーションを実行して、残念ながら停止したボタンをクリックすることです。私のコードを手伝ってください

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final   EditText user=(EditText) findViewById(R.id.username);
    final   EditText pass=(EditText) findViewById(R.id.password);
    Button login=(Button) findViewhere`ById(R.id.login);
    login.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {
            String u=user.getText().toString();
            String p=pass.getText().toString();
            HttpClient httpClient=new DefaultHttpClient();
            HttpPost httppost=new HttpPost("http://202.164.53.122");
            BasicNameValuePair usernameBaseNameValuePair=new BasicNameValuePair("id",u);
            BasicNameValuePair passBaseNameValuePair=new BasicNameValuePair("pass",p);
            List<NameValuePair> nameValuePairList=new ArrayList<NameValuePair>();
            nameValuePairList.add(usernameBaseNameValuePair);
            nameValuePairList.add(passBaseNameValuePair);
            try {
                UrlEncodedFormEntity urlEncodedFormEntity=new 
                UrlEncodedFormEntity(nameValuePairList,HTTP.UTF_8);
                httppost.setEntity(urlEncodedFormEntity);
                try {
                    HttpResponse httpResponse=httpClient.execute(httppost);
                } catch (ClientProtocolException e) {
                } catch (IOException e) {
                user.setText(e.getMessage());
                }

            }catch(UnsupportedEncodingException uee){
            }
        }
    });
}

@Override

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
4

5 に答える 5

0

Android 4.0+ でこのコードを使用している場合、例外が発生しますandroid.os.NetworkOnMainThreadExceptionAsyncTaskを使用して、http 通信を提供します。

于 2013-09-08T08:18:09.627 に答える
0

まず、リクエストを取得するための別のクラスを作成し、Asynctask を使用してすべてのアクションを実行します。String を使用して URI を渡し、その URI を Asynctask に渡します。このメソッドは、メイン UI スレッドをブロックしません。
Asynctask の使用方法については、このリンクを参照してください。 http://developer.android.com/reference/android/os/AsyncTask.html

于 2013-09-08T08:23:58.370 に答える
0

ネットワーク操作の場合、メイン スレッドではなく別のスレッドを使用する必要があります。メイン スレッドでネットワークを使用すると、これを回避するためにアプリケーション UI が応答しなくなる ためです

于 2013-09-08T08:26:09.270 に答える