android中如何通过网络传输数据 HttpURLConnection OKHttp JsonObject Gson
2017/3/11 记载
使用网络技术:利用网络上的数据,来让我们的APP跟后台服务器交互
WebView的用法:在APP中嵌入一个浏览器展示我们的web页面(学过web都知道最好开发啊一个响应式页面)
小例子:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
增加网络请求权限:
<uses-permission android:name="android.permission.INTERNET"/>
MainActivity.java
package com.example.ldp.com.webview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = (WebView)findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.baidu.com");
}
}
效果图:这里使用到一个HTTP协议请求的,网上这类知识很多,感兴趣的网友可以去看看。
学会使用HttpURLConnection
两种方式:HttpURLConnection 和 HttpClient(这种方式缺点过多,不建议使用)
步骤:
ERL url = new URL("http://www.baidu.com");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnecTimeout(8000);
connection.setReadTimeout(8000);
InputStream in = connection.getInputStream();
connection.disconnect();
这个步骤应该是一目了然了吧。
<ScorllView>控件:手机屏幕很小,一般是内容都显示不下的,用这个可以上下滑动显示
接下来这个例子,我就截图演示:
最后记得开启网络访问权限INTERNET
为什么要用runOnUiThread()方法呢?因android中是不允许子线程进行UI操作的,所以使用这个方法
可以将子线程转换成主线程。
我们进行网络访问并不是非要用HttpURLConnection,市面上有很多网络通信库都可以代替,
比如OKHttp、Picasso、Retrofit等
重点说OKHttp(加入库依赖):
效果图:
重点学习如何解析来自网络上的JSON数据,最初的时候网络的数据都是采用xml的来传输的,哪个是传输的
后来发现这种数据个不仅效率极慢,而且开发效率不高。后来采用的json数据格式:
使用JSONObject来解析(在web中我也经常使用)
效果图:
使用GSON解析:
加入依赖库:com.google.code.gson:gson:2.8.0
它比JSONObject更简便的地方在哪里呢,就是将json数据格式转化成对象,学对象映射的
这样是不是很容易明白,使用也越来越简单了。
两句代码就搞定了:
Gson gson = new Gson();
Person person = gson.fromJson(jsonData,Person.class);
如果说一组还好,但是如果是多组呢?想起List了没,借助TypeToken期望解析成的数据类型传入到fromJson中
List<Person> people = gson.fromJson(jsonData,new TypeToken<Lsit<Person>>(){}.getType());
使用方法效果图:
当使用网络传输的时候我们都需要对 网络进行一次HTTP请求,就会出现很多相同而冗余的代码
这个时候我们就要想着将这个写成工具类:
效果图: