Android Studio发送简单的GET/POST网络请求

  • 阅读文章需知
  • 前提准备
  • 权限添加
  • 启动子线程,发送网络请求
  • POST请求如何添加参数?
  • 后文必读


阅读文章需知

开发环境:Android Studio 4.1 安卓虚拟机版本(Target)android 11

开发语言: JAVA 

前提准备

众所皆知,咱们首先就要创建一下非常完美且正确的android项目

权限添加

<manifest >
<application> .......</application>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>

此代码一定要添加在<manifest>标签之内,<application>标签之外。

想必添加到其他的位置AS(Android Studio)也会给你报错,但是就怕报错了还不知道发生了什么= =

那么这是不是就🆗了呢? 这就🆗了我还要写这篇文章干啥呢 对吧😁

<application
	...
	...
	android:usesCleartextTraffic="true"
	...>
	<activity>
	...
	...
	</activity>
</application>

在你的<application>里面添加一句android:usesCleartextTraffic="true"是必不可少的一步,假设你没有这一步,那么你熟悉的老朋友就会来见你啦

启动子线程,发送网络请求

new Thread(){
              @Override
              public void run() {
                  networkRequest();
               }
             }.start();

开启一个子线程之后,在子线程中完成网络请求的处理。小弟建议将网络请求的代码封装一个函数,当然,萝卜青菜,各有所爱。

private void networdRequest(){
        HttpURLConnection connection=null;
        try {
            URL url = new URL("你要请求的网址,比如www.某度.com");
            connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(3000);
            connection.setReadTimeout(3000);
            //设置请求方式 GET / POST 一定要大小
            connection.setRequestMethod("POST");
            connection.setDoInput(true);
            connection.setDoOutput(false);
            connection.connect();
            int responseCode = connection.getResponseCode();
            if (responseCode != HttpURLConnection.HTTP_OK) {
                throw new IOException("HTTP error code" + responseCode);
            }
            String result = getStringByStream(connection.getInputStream());
            if (result == null) {
                Log.d("Fail", "失败了");
            }else{
                Log.d("succuss", "成功了 ");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

直接贴上代码,ctrl C +V 就能用,想必其他的代码都是啥意思,大家也不关心,小弟也就不啰嗦了。值得注意的是设置请求方式的时候一定要大写,否则后果自负(报错自己改)。本文实例采取的是POST请求的方式,因而采用字符串的形式接收返回的json结果。下面贴上处理json的代码:

private String getStringByStream(InputStream inputStream){
        Reader reader;
        try {
            reader=new InputStreamReader(inputStream,"UTF-8");
            char[] rawBuffer=new char[512];
            StringBuffer buffer=new StringBuffer();
            int length;
            while ((length=reader.read(rawBuffer))!=-1){
                buffer.append(rawBuffer,0,length);
            }
            return buffer.toString();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

那么至此,一个简单的网络请求就基本上完成啦!

POST请求如何添加参数?

如果是学习网络请求调用后端API或者网上公开API接口的童鞋们,那么这个时候我们往往需要有一些必备的参数,那么AS如何添加参数呢?本文给出一个简单的示例:

。。。
。。。
connection.connect();
-----------------------------------------------
DataOutputStream dos=new DataOutputStream(connection.getOutputStream());
String param="My param";
dos.writeBytes(param);

使用也是非常的简单,只要在上面网络请求的代码后面添加上这三句代码就可以了。 是不是很简单~