在进行网络编程之前,我们需要做的准备工作
开启网络访问权限
http请求数据一般不加密
https一般是加密的
Https访问比Http安全,所以android默认只允许我们使用Https协议,如有需要可以开启http访问权限。
android:usesCleartextTraffic=“true”
===========================================================================
1.MainActivity.java核心代码:
try {
URL url=new URL(“http://148.70.46.9/user”);//获取服务器地址
HttpURLConnection urlConnection= (HttpURLConnection) url.openConnection();//双方建立连接
urlConnection.setRequestMethod(“GET”);//给服务器发送请求
//服务器返回的数据 我们需要返回的是文本 所以返回的数据默认是字节流
InputStream inputStream=urlConnection.getInputStream(); //字节流
Reader reader=new InputStreamReader(inputStream); //把字节流转化成字符流
BufferedReader bufferedReader=new BufferedReader(reader);//字符流 转成 缓冲流,一次可以读一行
String result = “”;
String temp;
while ((temp=bufferedReader.readLine())!=null){//当temp读到的数据为空就结束
result += temp;
Log.i(“Main”,“result :”+result);
}
inputStream.close();
reader.close();
bufferedReader.close();
//todo 关闭流
} catch (Exception e) {
e.printStackTrace();
}
2.运行之后发现会报错android.os.NetworkOnMainThreadException
这个错误说明网络在 主线程异常。 网络访问不能在主线程。
所以我们需要创建一个线程。
3.创建线程
代码:
Thread thread = new Thread(){//方法1
@Override
public void run() {
super.run();
//子线程
}
};
thread.start();
将发送请求,接收服务器数据代码放到子线程中
4.最终代码:
package com.hnucm.a_test10;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread thread = new Thread(){//方法1
@Override
public void run() {
super.run();
//子线程
try {
URL url=new URL(“http://148.70.46.9/user”);//获取服务器地址
HttpURLConnection urlConnection= (HttpURLConnection) url.openConnection();//双方建立连接
urlConnection.setRequestMethod(“GET”);//给服务器发送请求
//服务器返回的数据 我们需要返回的是文本 所以返回的数据默认是字节流
InputStream inputStream=urlConnection.getInputStream(); //字节流
Reader reader=new InputStreamReader(inputStream); //把字节流转化成字符流
BufferedReader bufferedReader=new BufferedReader(reader);//字符流 转成 缓冲流,一次可以读一行
String result = “”;
String temp;
while ((temp=bufferedReader.readLine())!=null){//当temp读到的数据为空就结束
result += temp;
Log.i(“Main”,“result :”+result);
}
inputStream.close();
reader.close();
bufferedReader.close();
//todo 关闭流
} catch (Exception e) {
e.printStackTrace();
}
}
};
thread.start();
}
}
5.获取TextView控件,将结果赋值
因为在android中UI 操作 ,控件设置属性,点击事件 ,不能在子线程执行,只能在主线程执行
所以修改以上代码
最终代码:
package com.hnucm.a_test10;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import org.json.JSONObject;
import java.awt.font.TextAttribute;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.*;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView=findViewById(R.id.tv);
textView.setText(“初始化”);
Thread thread = new Thread(){//方法1
@Override
public void run() {
super.run();
//子线程
try {
// URL url=new URL(“http://www.baidu.com”);//这访问的是域名
URL url=new URL(“https://www.fastmock.site/mock/2af8e2ac7371144c506cf0390b19e6c2/test/test01”);//获取服务器哦地址
HttpURLConnection urlConnection= (HttpURLConnection) url.openConnection();//双方建立连接
最后
总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。
在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司20年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
0年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
[外链图片转存中…(img-VA78vuyt-1714702270085)]
[外链图片转存中…(img-rOCcT7wb-1714702270085)]
[外链图片转存中…(img-HX0JWqKE-1714702270085)]
还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!