安卓使用http协议访问网络
书上写的代码我允许了一下发现有个错误,说是因为SDK3 版本以上谷歌已经不让访问网络主线程的方式了,所以就改成了异步处理,用的AsyncTask
image.png
image.png
第一步
创建了一个匿名的AsyncTask 它有三个参数,第一个是输入参数,第二个是后台任务执行的进度,第三个是后台计算结果的类型
创建好之后,再调用execute(把我们要传入的链接写入)比如http://192.168.6.111:9000/demo
第二步
protected String doInBackground(String... params) {
try {
URL url = new URL(params[0]); //之前传入了参数,在这里string...params就可以用到
HttpURLConnection connection= (HttpURLConnection) url.openConnection(); //获取链接的方式
int resultCode=connection.getResponseCode(); //获取到返回状态码 200是成功 可以忽视
//一下就是对服务器端返回的数据进行处理
StringBuffer response =null; if(HttpURLConnection.HTTP_OK==resultCode){ //可以不加这个判断 如果状态码是正常的就去处理数据
InputStream in =connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
response = new StringBuffer();
String line = null;
while((line=reader.readLine())!=null){
response.append(line);
}
}
return response.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "1";
}
//显示结果用的方法
@Override
protected void onPostExecute(String s) {
Toast.makeText(getApplicationContext(),s,Toast.LENGTH_LONG).show();
mPassWordEditText.setText(s);
super.onPostExecute(s);
}
第三步
最主要的就是1,2步,然后看看服务器的代码怎么写
image.png
1.集成Controller
2.写一个静态方法返回类型void play框架规定的
3.获取到客户端传递过来的参数
4.进行逻辑处理
5.操作结果返回给你客户端
public static void demo() {
String id=params.get("username"); //获取到客户端出入过来的值,值得名字叫username
if(id.equals("1")) { //逻辑处理
renderJSON("OK"); //成功结果返回
}else {
int unreadMessages =1;//失败结果返回
renderJSON("{\"messages\": " + unreadMessages +"}");
}
}
第四歩传递URL
image.png
初始的地址是 本地IP地址:端口号/方法名
然后对IP地址进行拼接
这个的访问方式是get的访问方式,Post的访问方式我折腾了很久一直说找不到链接,有点迷茫