0

2.2 または 2.3.X バージョンで正常に動作している HttpClient を使用した http 要求に行き詰まりました。しかし、バージョン4.0.3のAndroidタブレットからそのリクエストを送信しようとすると、401エラーが発生します

これが私が実装した私のコードです。

HttpClient client = new DefaultHttpClient();
    HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
    HttpResponse response;
    JSONObject json = new JSONObject();
    try{
        HttpPost post = new HttpPost("MYURL");
        json.put("username", username);
        json.put("password", password);
        StringEntity se = new StringEntity( json.toString());  
        se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
        post.setEntity(se);
        response = client.execute(post);
        /*Checking response */
        statusCode = response.getStatusLine().getStatusCode();
        System.out.println("Status Code=>" + statusCode);
        if (statusCode == 200) {
            result = EntityUtils.toString(response.getEntity());
            Log.v("Login Response", "" + result);
        } else {
            response = null;
        }
    }
    catch(Exception e){

        e.printStackTrace();
        //createDialog("Error", "Cannot Estabilish Connection");
    }

あなたの最善の提案でこの問題を解決するのを手伝ってください。

ありがとう、

4

2 に答える 2

2
I'm getting stuck with http request using HttpClient that is working fine with 2.2 or 2.3.X versions.

NetworkOnMainThread例外について疑問があります。

android.os.NetworkOnMainThreadExceptionを修正する方法をご覧ください

AndroidAsyncTaskはそのための最良のソリューションです。

アップデート:

また、401エラーステータスコードが表示されます。

401 means "Unauthorized", so there must be something with your credentials.

Webサービスを要求する前に、資格情報を確認してください。

于 2013-01-04T10:41:37.953 に答える
1

メインスレッドでネットワーク操作を実行しています。非同期タスクを使用して、バックグラウンド スレッドでネットワーク操作を実行します。それがあなたが得ている理由ですandroid.os.NetworkOnMainThreadException

次のような非同期タスクで実行します。

class MyTask extends AsyncTask<String, Void, RSSFeed> {

    protected void onPreExecute() {
        //show a progress dialog to the user or something
    }

    protected void doInBackground(String... urls) {
        //do network stuff
    }

    protected void onPostExecute() {
        //do something post execution here and dismiss the progress dialog
    }
 }

 new MyTask().execute(null);

非同期タスクの使用方法がわからない場合は、次のチュートリアルを参照してください。

チュートリアル 1
チュートリアル 2

ここに公式ドキュメントがあります

于 2013-01-04T10:49:24.713 に答える