先讲一下前面的http部分:
webview控件我们可以通过创建一个webview :WebView webView=(WebView) findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);//可以设置浏览器的属性,这里通过调用方法使webview支持javascript;
webView.setWebView(new WebViewClient());//传入webviewclient实例使目标网页仍然在webview当中显示;
webView.loadUrl("http://www.baidu.com");//将网址传入
需要修改权限<uses-permission android:name="android.permission.INTERNET">
首先,先创建一个OkHttpClient 的实例
同时要添加一个包implementation 'com.squareup.okhttp3:okhttp3:3.4.1'
OkHttpClient client=new OkHttpClient();
Request request=new Request.Builder().url("http://www.baidu.com").build()//发起一条请求就要创建一个request对象
并且设置目标的网络地址;
Response response=client.newCall(request).execute();//创建一个call对象调用execute方法发送请求并获取数据。
String responseData=response.body().string();//获取返回的数据
然后通过按键获取事件用多线程启动网络发送数据请求
new Thread(new Runnable())然后要用catch 来捕捉异常。
然后UI界面只能出现在主界面中
所以还要创建一个显示ui界面的函数即runOnUiThread(new Runnable())
json解析网络格式:
JSONArray jasonArray=new JSONArray(String data)
然后遍历数组JSONObject object=JSONArray.get(position);
String name=object.getString("name");
String id=object.getString("id"):
还可以使用gson来解析json:引入implementation'com.google.code.gson:gson:2.6'
Gson gson=new Gson()
Class T=gson.fromJson(jsonData,T.class)
还可以new TypeToken<class>(){}.getType();
java回调机制来处理服务器来不及返回数据的问题
public interface HttpCallbackListener{
void onFinish(String response);
void onError(Exception e);}
public class HttpUtil{
public static void sendOKHttpRequest(String address,okhttp.Callback callback){
OkHttpClient client;
Request request=new Request.Builder().build();
client.newCall(request).enqueue(callback);}}
调用函数HttpUtil.sendOkHttpRequest(address,new okhttp3.Callback(){
@Override
public void onResponse(Call call,Response response)throws IOException{
String responseData=response.body().string();}
@Override
public void onFailure(Call call,IOException e){}
});