最近这两天没怎么写Android代码,都在补习java的网络编程和http,UDP,TCP这些,总算是搞懂了大概要怎么操作。
首先网络通信用的是java中的URL类及方法,该类的参数是协议(http),IP及端口,其实完成通信只需要应用层的HTTP协议,UDP与TCP这两个传输层的协议这些也用java实现了一下,应该是后面才会用到。
考虑到现在我应该做不到自己搭一个服务器,所以我把别人搭好的服务器下载到了电脑上,链接https://github.com/TrillGates/SOBAndroidMiniWeb
,这个服务器感觉对新手挺友好的,读取图片和文字什么的都有相应的的API,比较推荐
在开始代码之前首先先在manifest里面把权限设置好!很大一个坑,因为代码如果一开始没设权限,运行到虚拟机上之后会报错(警告),关键是改了代码加了权限依然会报错,除非把app卸载了或者换一个虚拟机,而我至今没找到在虚拟机里卸载app的方法,因为连图标都没有,所以只有换一个虚拟机的方法……
//网络权限
<uses-permission android:name="android.permission.INTERNET"/>
注意是在<application外面加
新建按钮组件,设置监听器,在监听器里面敲代码
首先是新建url,这个API是读取文本。然后建立一个连接到该url的对象,之后的操作都是对这个连接对象进行。写完这里会报错,根据提示trycatch一下就行
URL url = new URL("http:10.0.2.2:9102/get/text");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection的方法比较多,都是设置(请求时)或者返回(响应时)该一些数据,这里举几个例子
connection.setConnectTimeout(10000); //设置最大连接时长10s
connection.setRequestMethod("GET"); //设置请求方法为get
connection.setRequestProperty("Accept-language", "zh-CN,zh;q=0.9");//设置语言为中文
connection.setRequestProperty("Accept", "*/*"); //设置响应内容格式
关键的一步connect
connection.connect();
到这里已经完成连接了,可以在日志里输出一些信息来检验,这里选择输出URL的内容
Object content = connection.getURL();
Log.d("teg","content为"+content);
到这里代码就基本完成了,运行之后会报错(警告),因为在主线程里面进行网络操作是不允许的,需要创建一个线程执行之前的操作,把代码剪切粘贴到线程里面
new Thread(new Runnable() {
}).start();
运行,点击按钮日志输出结果