http网络请求

网络请求

需要在子线程中使用网络请求,网络请求需要有权限

new Thread(){
    void run(){
        //网络请求
        URL url = new URL("...");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        //配置超时
        conn.setConnectTimeout(5000);
        conn.setReadTimeout(5000);
       if(conn.getResponseCode() == 200){
            //数据转换
            //发送到主线程
        }
        //关闭连接
        conn.disconnect();
    }
}

private Handler mHandler= new Handler(){
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what){
            case 1:
                String s = (String) msg.obj;
                mTv.setText(s);
                break;
        }

    }
};

权限

<uses-permission android:name="android.permission.INTERNET"/>
Json
public class User{
    private String name;
    private int age;
} 

{} 表示对象

{name:张三,age:18}

[] 表示数组

[{name:张三,age:18},{name:lisi,age:20}]
[1,2,3]
["abc","123"]
使用GsonFormat插件

plugin–>GsonFormat–安装

用:在类中右单击–>generate–>gsonformat–>将json格式字符串粘贴进来–>fomat–>ok

json解析
//解析json数组
JSONArray ary = new JSONArray(jsonStr);
int len = ary.length();
for(int i = 0 ; i < len ; i++){
  //获取json对象
  JSONObject obj = ary.getJSONObject(i);
  String content = obj.getString("content");
  int id = obj.getInt("id");
  String time = obj.getString("pub_time");
  String title = obj.getString("title");
  list.add(new Diary(content,id,time,title));
 }
防止乱码问题

可以对参数编码

String title = URLEncoder.encode("我爱编程","UTF-8");
易语言中发送HTTP请求可以使用Wininet.dll库来实现。下面是一个基本的示例代码: ``` // 导入Wininet.dll库 import "wininet.dll" // 定义常量 const INTERNET_OPEN_TYPE_DIRECT = 1 INTERNET_SERVICE_HTTP = 3 INTERNET_FLAG_RELOAD = 0x80000000 HTTP_VERSION = "HTTP/1.1" HTTP_ACCEPT_TYPE = "*/*" HTTP_USER_AGENT = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)" HTTP_ACCEPT_LANGUAGE = "zh-cn" HTTP_ACCEPT_ENCODING = "gzip, deflate" HTTP_CONTENT_TYPE = "application/x-www-form-urlencoded" // 定义函数 func InternetOpenA(lpszAgent: string, dwAccessType: int, lpszProxy: string, lpszProxyBypass: string, dwFlags: int) as int32 from wininet.dll func InternetConnectA(hInet: int32, lpszServerName: string, nServerPort: int, lpszUserName: string, lpszPassword: string, dwService: int, dwFlags: int, dwContext: int) as int32 from wininet.dll func HttpOpenRequestA(hConnect: int32, lpszVerb: string, lpszObjectName: string, lpszVersion: string, lpszReferrer: string, lplpszAcceptTypes: int, dwFlags: int, dwContext: int) as int32 from wininet.dll func HttpSendRequestA(hRequest: int32, lpszHeaders: string, dwHeadersLength: int, lpOptional: int, dwOptionalLength: int) as int from wininet.dll func InternetReadFile(hFile: int32, lpBuffer: int, dwNumberOfBytesToRead: int, lpNumberOfBytesRead: int) as int from wininet.dll func InternetCloseHandle(hInet: int32) as int from wininet.dll // 发送HTTP请求 func SendHttpPostRequest(url: string, postData: string) as string // 初始化Wininet.dll var hInternet = InternetOpenA(HTTP_USER_AGENT, INTERNET_OPEN_TYPE_DIRECT, "", "", 0) if hInternet = 0 then return "" end if // 连接服务器 var hConnect = InternetConnectA(hInternet, url, 80, "", "", INTERNET_SERVICE_HTTP, 0, 0) if hConnect = 0 then InternetCloseHandle(hInternet) return "" end if // 打开请求 var hRequest = HttpOpenRequestA(hConnect, "POST", "/", HTTP_VERSION, "", 0, INTERNET_FLAG_RELOAD, 0) if hRequest = 0 then InternetCloseHandle(hConnect) InternetCloseHandle(hInternet) return "" end if // 添加请求头 var headers = "Content-Type: " + HTTP_CONTENT_TYPE + "\r\n" headers = headers + "Accept: " + HTTP_ACCEPT_TYPE + "\r\n" headers = headers + "Accept-Language: " + HTTP_ACCEPT_LANGUAGE + "\r\n" headers = headers + "Accept-Encoding: " + HTTP_ACCEPT_ENCODING + "\r\n" headers = headers + "User-Agent: " + HTTP_USER_AGENT + "\r\n" headers = headers + "Content-Length: " + str(len(postData)) + "\r\n\r\n" // 发送请求头和数据 var ret = HttpSendRequestA(hRequest, headers, len(headers), postData, len(postData)) if ret = 0 then InternetCloseHandle(hRequest) InternetCloseHandle(hConnect) InternetCloseHandle(hInternet) return "" end if // 读取响应数据 var buffer = string(1024 * 1024) var bytesRead = 0 var response = "" while InternetReadFile(hRequest, addr(buffer), len(buffer), addr(bytesRead)) > 0 and bytesRead > 0 response = response + left(buffer, bytesRead) end while // 关闭句柄 InternetCloseHandle(hRequest) InternetCloseHandle(hConnect) InternetCloseHandle(hInternet) // 返回响应数据 return response end func ``` 使用示例: ``` // 发送POST请求 var url = "http://www.example.com" var postData = "name=John&age=30" var response = SendHttpPostRequest(url, postData) print(response) ``` 注意:这是一个简单的示例,实际使用中还需要添加异常处理、编码转换等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值