当前位置: 首页 > 知识库问答 >
问题:

Android上的HTTP请求不起作用

荆乐
2023-03-14

我到处都搜索了,但找不到答案,我怎么能发出HTTP请求?我尝试了几种可能性,但都不起作用。我总是出错。

InputStream is = null;
// Only display the first 500 characters of the retrieved
// web page content.
int len = 500;

try {
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
// Starts the query
conn.connect();
int response = conn.getResponseCode();
Log.d("Debug:", "The response is: " + response);
is = conn.getInputStream();

// Convert the InputStream into a string
String contentAsString = readIt(is, len);
return contentAsString;

// Makes sure that the InputStream is closed after the app is
// finished using it.
}
catch(Exception ex)
{
    Log.v("Message: ", ex.getMessage());
    return "Helemaal niks!";
}
finally {
    if (is != null) {
        is.close();
    }
}

02-27 17:52:58.611 13571-13571/com.example.app E/AndroidRuntime﹕ 致命异常:主java.lang.IllegalStateException:无法在android.view.view$1.onClick(view.java:3838)在android.view.view.performClick(view.java:4475)在android.view.view$performClick.run(view.java:18786)在android.os.Handler.handleCallback(Handler.java:730)在android.os.Handler.dispatchMessage上执行活动方法android.app.ActivityThread.main(ActivityThread.java:5419)中的android.os.Looper.loop(Looper.java:137)中的Handler.java:92;java.lang.reflect.Method.invokenactive(Native Method)中的java.lang.reflect.Method.invoke(Method.java:525)中的com.android.internal.os.zyoteinit$MethodAndArgsCaller.run(zyoteinit.java:1187)位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003),位于dalvik.system.NativeStart.main(本机方法)

共有2个答案

戚承业
2023-03-14

如果只想发出HTTP get请求,可以使用此代码代替代码。

try{
    String result = null;
    HttpClient httpClient = new DefaultHttpClient();
    String myUrl = "your url";
    HttpContext localContext = new BasicHttpContext();
    HttpGet httpGet = new HttpGet(myUrl);
    HttpResponse response = httpClient.execute(httpGet, localContext);

    BufferedReader reader = new BufferedReader(new InputStreamReader(
            response.getEntity().getContent()));

    String line = null;
    while ((line = reader.readLine()) != null) {
        result += line + "\n";
    }
    return result;
}catch(Exception ex)
{
    Log.v("Message: ", ex.getMessage());
    return "Helemaal niks!";
}
胥宏义
2023-03-14

所有的webservice调用等都应该在AsyncWork中完成。

这有助于它在不使应用等待的情况下执行。

下面是一个示例代码,可以帮助您了解如何进行网络电话。

try {


        HttpClient httpclient = new DefaultHttpClient();

        HttpParams httpParameters = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParameters, 2000);
        HttpConnectionParams.setSoTimeout(httpParameters, 2000);
        httpclient = new DefaultHttpClient(httpParameters);

        HttpGet request = new HttpGet(Constants.CHECK_UPDATE_URL);

        String responseString = null;

        HttpResponse response = httpclient.execute(request);
        StatusLine statusLine = response.getStatusLine();

        if (statusLine.getStatusCode() == HttpStatus.SC_OK) {

            // Logging Server Responded

            LogActions.systemActions("Server Responded");

            ByteArrayOutputStream out = new ByteArrayOutputStream();
            response.getEntity().writeTo(out);
            out.close();


                            //do your tasks here

        }

    } catch (Exception e) {

        Log.e("Exception", "An impossible exception", e);
    }
 类似资料:
  • 问题内容: 由于jQuery中的Ajax请求,存在未定义的错误。但是它在本地工作。jquery1.3.2.js @ 3633行中的错误引用 我的代码是: 代码中的警报向我显示(0,“未定义”); 我做错了什么? 问题答案: 如果您的ajax请求在完成之前被取消,则可能会发生这种情况。当用户通过刷新,单击链接或更改浏览器中的URL离开页面时,jQuery引发错误事件。通过为ajax调用实现错误处理程

  • 但当我运行它时,它会给我这个错误: E/AndroidRuntime:致命异常:主进程:com.example.webTestConnection,PID:23550 Android.os.networkonMaintHreadexception,Android.os.strictmode$AndroidBlockGuardPolicy.onNetwork(strictmode.java:1166

  • 问题内容: 我开始使用AWS Lambda,并且尝试从处理程序功能请求外部服务。根据,HTTP请求应该可以正常工作,而且我还没有找到其他说明的文档。(实际上,人们已经发布了使用TwilioAPI发送SMS的代码。) 我的处理程序代码是: 我在CloudWatch日志中看到以下4行: 我希望在那里有另一行: 但这是缺失的。如果我使用的是本机上节点中没有处理程序包装的基本部分,则代码将按预期工作。 在

  • 你好,我正在尝试做一个简单的Http GET请求,但是无法在ionic v2 Beta中运行... 这是我的应用程序.js: 这是我的页面1.js: 将http:http添加到构造函数时- 错误:找不到模块“./page1/page1” 我也在Page1.js尝试过: ,然后在第 1 页中的(单击)上调用生成生成请求().html但它返回这些注释: 例外:评估“单击”时出错 this.http未定

  • 问题内容: 跨域AJAX POST请求在Web浏览器(包括手机上的浏览器)上可以很好地工作,但不适用于使用以下工具构建的本机应用程序 我创建了一个登录表单,用户必须输入他们的登录凭据,然后由heroku上托管的服务器对其进行验证,如果输入了有效的凭据,则返回json 。 我的Ajax脚本: 解决此问题所采取的步骤: 域白名单 -config.xml 告诉jQuery允许跨域 要么 禁用缓存 任何帮

  • 我试图使用cURL获取一个HTTP请求响应,这很好。然而,当我在Python中使用“请求”包时,我没有得到任何响应(它只是超时,没有错误或返回响应)。 我的cURL代码如下: 当我在cURL代码中使用-v时,我得到以下消息: 试图144.126.138.12... TCP_NODELAY集 连接到144.126.138.12(144.126.138.12)端口17001(#0) POST/api/