httpResponse = httpClient.execute(httpGet);

时间:2014-05-04 10:01:27

标签: android

我的Android应用程序一直在崩溃。 我正试图通过电话后连接到网络服务。 但是我的应用程序每次尝试调用Web服务时都会继续崩溃。

 import android.app.Activity;

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

    import java.io.IOException;
    public class PostActivity extends Activity {

        //static String response = null;

        public void loadPost() throws IOException {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpEntity httpEntity = null;
            HttpResponse httpResponse = null;

            String blogFeedUrl = "http://localhost/medapp/public/mobile/post";

            HttpGet httpGet = new HttpGet(blogFeedUrl);
            httpResponse = httpClient.execute(httpGet);  // <-- this is where the application crashes

        }

    }

1 个答案:

答案 0 :(得分:0)

根据您发布的代码和相关的导入,取决于O.S(Esp Honeycomb及以后版本),您的应用程序将因NetworkOnMainThreadException而崩溃。您正在主线程上尝试网络操作,而不是在后台线程或Asyctask中。

在您的logcat中(如果您发布了它的帮助),将会抛出NetworkOnMainThreadException

E/AndroidRuntime(673): java.lang.RuntimeException: Unable to start activity
    ComponentInfo{com.example/com.example.ExampleActivity}: android.os.NetworkOnMainThreadException

Android developer's site

详细记录了为何发生这种情况的原因
  

应用程序时抛出NetworkOnMainThreadException   尝试在其主线程上执行网络操作。这是   仅针对Honeycomb SDK或更高版本的应用程序抛出。   允许使用早期SDK版本的应用程序   他们的主要事件循环线程上的网络,但它很重要   气馁。

通过:

Why the app would crash or work depending on O.S.

Try AsyncTask to avoid NetworkOnMainThread

为什么不使用Strict Mode替代方案作为您的解决方案并且仅用于调试(我建议实际上避免使用,您现在知道问题是什么):
Critical to fix it, not by setting Thread policies