android 发送http请求

好久没写博客了,由于公司要做android,笔者也是第一次接触。

这是在项目中遇到一个比較麻烦的问题。记录下来备忘(本人刚接触。有不正确的地方请不吝赐教)。

发送请求的代码:

package com.jiujian.mperdiem;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class AppUtil {

  // 本地測试路径
  public static final String webBaseUrl = "http://ip:端口";

  /*
   * 訪问URL。获取结果 method: GET, POST
   */
  public static String loadUrlResponse(String method, String urlString) {
    HttpURLConnection conn = null; // 连接对象
    InputStream is = null;
    StringBuffer result = new StringBuffer();
    try {
      URL url = new URL(urlString); // URL对象
      conn = (HttpURLConnection) url.openConnection(); // 使用URL打开一个链接
      conn.setDoInput(true); // 同意输入流,即同意下载
      conn.setDoOutput(true); // 同意输出流,即同意上传
      conn.setUseCaches(false); // 不使用缓冲
      conn.setRequestMethod(method); // 使用get请求
      is = conn.getInputStream(); // 获取输入流。此时才真正建立链接
      InputStreamReader isr = new InputStreamReader(is);
      BufferedReader bufferReader = new BufferedReader(isr);
      String inputLine = "";
      while ((inputLine = bufferReader.readLine()) != null) {
        result.append(inputLine).append("\n");
      }

    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      if (is != null) {
        try {
          is.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      if (conn != null) {
        conn.disconnect();
      }
    }

    return result.toString();
  }
}

调用代码:

StringBuffer sbUpdateDeviceRefreshInstall = new StringBuffer(AppUtil.webBaseUrl);
sbUpdateDeviceRefreshInstall.append("XXX?

UserId=");
sbUpdateDeviceRefreshInstall.append(getUserId());
AppUtil.loadUrlResponse("POST", sbUpdateDeviceRefreshInstall.toString());

代码是没有问题的,但是app端发送请求。server端却一直没有信息打印。

错误信息是:android.os.NetworkOnMainThreadException

最后才发现android 3.0以后就不同意在主线程上进行网络訪问的,

于是把代码改成:

new Thread(){
        	@Override
        	public void run() {
        		StringBuffer sbUpdateDeviceRefreshInstall = new StringBuffer(AppUtil.webBaseUrl);
        		sbUpdateDeviceRefreshInstall.append("XXX?UserId="<span style="font-family: 'Microsoft YaHei';">);</span>
        		sbUpdateDeviceRefreshInstall.append(getUserId());
        		AppUtil.loadUrlResponse("POST", sbUpdateDeviceRefreshInstall.toString());
        	}
        }.start();

这样就没问题了。

假设是刚接触android,能够推荐看:第一行代码,这本书对于入门来说挺不错的。

个人主页:http://www.itit123.cn/ 很多其它干货等你来拿

时间: 2024-07-29 04:04:46

android 发送http请求的相关文章

android发送get请求时报错

异常信息: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.synology.synologycloud/com.synology.synologycloud.MainActivity}: android.os.NetworkOnMainThreadException 第一次看到这异常,字面意思是说:在主线程中的网络异常.然后我就去了解了下这个异常,先看看官方的说明 public class Netwo

android发送post请求

//ps:此函数必须在线程中调用(因为函数抛出异常,调用时要包在try--catch里面) private void start_run() throws Exception{ String urlPath = new String("http://hnzldzkj.cn/readkey"); //String urlPath = new String("http://localhost:8080/Test1/HelloWorld?name=丁丁".getBytes

Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件

折腾了好几天的 HTTP 终于搞定了,经测试正常,不过是初步用例测试用的,因为后面还要修改先把当前版本保存在博客里吧. 其中POST因为涉及多段上传需要导入两个包文件,我用的是最新的 httpmine4.3 发现网上很多 MultipartEntity 相关的文章都是早起版本的,以前的一些方法虽然还可用,但新版本中已经不建议使用了,所以全部使用新的方式 MultipartEntityBuilder 来处理了. httpmime-4.3.2.jar httpcore-4.3.1.jar 下载地址:

Android面向HTTP协议发送get请求

/** * 採用get请求的方式 * * @param username * @param password * @return null表示求得的路径有问题,text返回请求得到的数据 */ public static String getRequest(String username, String password) { try { String path = "http://172.22.64.156:8080/0001AndroidWebService/LoginServlet?use

Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4006009.html 联系方式:[email protected] [系列]Android系列之网络:(持续更新) Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据) Android系列之网络(二)----HTTP请求头与响应头 Android

android使用apache httpclient发送post请求

package com.liuc; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.ht

Android面向HTTP协议发送post请求

/** * 采用post请求的方式 * * @param username * @param password * @return null表示求得的路径有问题,text返回请求得到的数据 */ public static String postRequest(String username, String password) { try { String path = "http://172.22.64.156:8080/0001AndroidWebService/LoginServlet&q

采用Android中的httpclient框架发送get请求

/** * 采用httpclientGet请求的方式 * * @param username * @param password * @return null表示求得的路径有问题,text返回请求得到的数据 */ public static String httpclientGet(String username, String password) { try { // 1.打开一个浏览器 HttpClient client = new DefaultHttpClient(); // 2.输入地

采用Android中的httpclient框架发送post请求

/** * 采用httpclientPost请求的方式 * * @param username * @param password * @return null表示求得的路径有问题,text返回请求得到的数据 */ public static String httpclientPost(String username, String password) { try { // 1.打开一个浏览器 HttpClient client = new DefaultHttpClient(); // 2.输