ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OkHttp访问服务器中的xml资源

2019-05-28 20:42:34  阅读:409  来源: 互联网

标签:xml String supported only Handler 服务器 OkHttp new


首先,添加OkHttp依赖

  implementation 'com.squareup.okhttp3:okhttp:3.14.2'

因为静态接口需要Java8才能支持使用,我们要使用静态接口,需要在build.gradle文件中添加如下配置声明,使用Java8编译

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

不然会出现如下异常:

错误一:

   Static interface methods are only supported starting with Android N (--min-api 24): java.util.List okhttp3.Dns.lambda$static$0(java.lang.String)
  Message{kind=ERROR, text=Static interface methods are only supported starting with Android N (--min-api 24): 
java.util.List okhttp3.Dns.lambda$static$0(java.lang.String),sources=[Unknown source file], tool name=Optional.of(D8)}

错误二:

   Invoke-customs are only supported starting with Android O (--min-api 26)
   Message{kind=ERROR, text=Invoke-customs are only supported starting with Android O (--min-api 26), sources=[Unknown source file], tool name=Optional.of(D8)}

 

在AndroidManifest.xml中添加网络访问权限

    <uses-permission android:name="android.permission.INTERNET" />

 

创建工具类:

 1 public class OkHttpTools {
 2     //创建OkHttpClient对象
 3     private final OkHttpClient client = new OkHttpClient();
 4     //获取章节信息的方法
 5     public String getDate(String url){
 6         //构建请求
 7         Request request = new Request.Builder()
 8                 .url(url)
 9                 .build();
10         //获取Response对象
11         try (Response response = client.newCall(request).execute()) {
12             //响应成功并返回响应内容
13             if (response.isSuccessful()) {
14                 return response.body().string();
15                 //此时代码执行在子线程,修改UI的操作使用handler跳转到UI线程
16             }
17         }catch (Exception e){
18             e.printStackTrace();
19         }
20         return " ";
21     }
22 }

 

Activity:在子线程中获取访问的数据,并把解析的数据通过Handler添加到适配器中

子线程:

 1         new Thread(){
 2             @Override
 3             public void run() {
 4                 OkHttpTools tools = new OkHttpTools();
 5                 String s = tools.getDate("http://192.168.*.*:8080/resource/chapter"+id+".xml");
 6                 if (s!=null){
 7                     //s.getBytes()返回的是字节数组
 8                    initData(new ByteArrayInputStream(s.getBytes()));
 9                    handler.sendEmptyMessage(MSG_OK);
10                 }
11             }
12         }.start();                                

initData()方法:接收流对象并进行解析数据

1     private void initData(InputStream is) {
2         try {
3             //获取解析xml的数据
4             ebl = AnalysisUtils.getExercisesInfos(is);
5         } catch (Exception e) {
6             e.printStackTrace();
7         }
8     }

Handler:进行数据的处理

 1      Handler handler = new Handler(){
 2          @Override
 3          public void handleMessage(Message msg) {
 4              if (msg.what== MSG_OK){
 5                  //将解析的数据添加到适配器
 6                  adapter.setData(ebl);
 7                  //刷新数据
 8                  adapter.notifyDataSetChanged();
 9              }
10          }
11      };

 

标签:xml,String,supported,only,Handler,服务器,OkHttp,new
来源: https://www.cnblogs.com/chaunceyji/p/10940041.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有