1

大家好,我有可以在其他平台上运行的示例应用程序(从 1.6+ 开始)但是相同的应用程序在我的新 Android 4.1 模拟器上不起作用。问题是关于 HttpConnection 的。意味着假设我想登录然后我不能这样做。代码没有问题,因为它在所有其他 AVD(1.6,2.1,2.2) 上都可以正常工作。

我也尝试使用简单的 httpconnection 代码,但仍然无法正常工作。

在 4.1 的模拟器上运行互联网需要任何特殊设置。但是在我以前的平台上,我没有做任何设置。

我的 HttpConnection 代码如下:

public String httpGetResponse(String url) {
    connectionUrl = url;
    query_string="";
    String response = null;
    try {
        int loc = url.indexOf('?');
        if(loc>-1){
            try {
                query_string=url.substring(loc);
            } catch (Exception e) {
                query_string="";
            }
        }
        processGetRequest();
        HttpResponse httpresponse = httpclient.execute(host, get);
        response = EntityUtils.toString(httpresponse.getEntity());
    } catch (Exception e) {
        response = null;
    }
    return response;
}

我将此方法称为:

response = connectionUtil.httpGetResponse("My URL");

在所有其他平台上,我得到的响应为 String ,但在 4.1 中,我得到的响应为:

response:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org          /TR/html4/loose.dtd"><HTML><HEAD><META HTTP-EQUIV="Content-Type"    CONTENT="text/html; charset=iso-    8859-1"><TITLE>ERROR: The requested URL could not be retrieved</TITLE>

…………

任何建议将不胜感激提前谢谢。

4

1 回答 1

2

这个问题有两个解决方案。

1)不要在主 UI 线程中编写网络调用,为此使用异步任务。

2) 在 setContentView(R.layout.activity_main); 之后将以下代码写入 MainActivity 文件;

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

并将下面的 import 语句放入您的 java 文件中。

import android.os.StrictMode;
于 2012-11-01T10:31:51.303 回答