-4

它只是退出。有什么问题 ?

我找不到任何问题。

如果有更好的方式将 XML 下载到输入流,请告诉我。

或者同时读取 3 个或更多 XML 的好方法

package com.some.some;


import java.io.IOException;
import java.io.InputStream;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.os.Bundle;
import android.app.Activity;
import android.util.Base64;
import android.view.Menu;
import android.view.View;

public class Login extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        InputStream stream1 = downloadXmlFileStreamUsingUrl("URL IS CORRECT :|");
        // Parse check is login or not ...
    }


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.login, menu);
    return true;
}
public InputStream downloadXmlFileStreamUsingUrl(final String url) {



    final HttpGet getRequest = new HttpGet(url);
    String encodedStr = Base64.encodeToString("user:pass".getBytes(), 0);
    getRequest.setHeader("Authorization", "Basic " + encodedStr);
    HttpClient client = null;
    try {
      client =  new DefaultHttpClient();
      client.getConnectionManager();
      final HttpResponse getResponse = client.execute(getRequest);
      final int statusCode = getResponse.getStatusLine().getStatusCode();

      if (statusCode != HttpStatus.SC_OK) {
        return null;
      }

      final HttpEntity getResponseEntity = getResponse.getEntity();
      final InputStream content = getResponseEntity.getContent();
      return content;

    } catch (final IOException e) {
      getRequest.abort();
    }
    finally {
          client.getConnectionManager().shutdown();
        }

        return null;

      }

}
4

2 回答 2

2

您必须了解的第一件事是我们必须在哪里执行网络操作。

在谷歌开发者文档中,他们一步一步解释了这个链接,这里是关于我们执行的网络操作的一个更重要的链接。

因为您发布的代码我认为您在主线程上运行网络操作。

于 2013-07-05T13:23:16.577 回答
0

我假设您正在NetworkOnMainThreadException尝试从 UI 访问网络。
从 Android 3.0 开始,网络访问应在单独的线程上完成。换句话说,downloadXmlFileStreamUsingUrl()应该在单独的线程中运行。为此,
您可以使用AsyncTask 。

于 2013-07-05T13:46:36.243 回答