第一阶段开发遇到的问题

简介: 这个问题已经确定好了,就是虚拟机的网络出现了问题,好像是ip地址不一样什么的,重置一下虚拟机即可解决

一、虚拟机网络请求始终出问题

这个问题已经确定好了,就是虚拟机的网络出现了问题,好像是ip地址不一样什么的,重置一下虚拟机即可解决

java.net.UnknownHostException: Unable to resolve host "www.example.com": No address associated with hostname

二、对于不标准json数据进行处理

参考博客链接:https://blog.csdn.net/w525721508/article/details/78018207?spm=1001.2014.3001.5506
由于服务器返回的不是标准的json数据,需要对字符串进行切割,但是retrofit封装的太好了,导致无法获取原始数据

这个最终采用重写retrofit封装的三个类来进行了一个实现,不过难度不是很大,就是找原始数据的时候头疼

采取网络上的做法重写转换库,并且添加自己处理字符串的逻辑

这边贴一下代码

DecodeConverterFactory.java

public class DecodeConverterFactory extends Converter.Factory {
    public static DecodeConverterFactory create() {
        return create(new Gson());
    }

    public static DecodeConverterFactory create(Gson gson) {
        return new DecodeConverterFactory(gson);
    }

    private final Gson gson;

    private DecodeConverterFactory(Gson gson) {
        if (gson == null) {
            throw new NullPointerException("gson == null");
        }
        this.gson = gson;
    }

    @Override
    public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
        TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
        return new DecodeResponseBodyConverter<>(adapter);
    }

    @Override
    public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
        TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
        return new DecodeRequestBodyConverter<>(gson, adapter);
    }
}

DecodeRequestBodyConverter.java

public class DecodeRequestBodyConverter<T> implements Converter<T, RequestBody> {
    private static final MediaType MEDIA_TYPE = MediaType.parse("application/json; charset=UTF-8");
    private static final Charset UTF_8 = Charset.forName("UTF-8");

    private final Gson gson;
    private final TypeAdapter<T> adapter;
    DecodeRequestBodyConverter(Gson gson,TypeAdapter<T> adapter){
        this.gson = gson;
        this.adapter = adapter;
    }
    @Override
    public RequestBody convert(T value) throws IOException {
        Buffer buffer = new Buffer();
        Writer writer = new OutputStreamWriter(buffer.outputStream(),UTF_8);
        JsonWriter jsonWriter = gson.newJsonWriter(writer);
        adapter.write(jsonWriter,value);
        jsonWriter.flush();
        return RequestBody.create(MEDIA_TYPE,buffer.readByteString());
    }
}

DecodeResponseBodyConverter.java

这个类就是要具体修改逻辑的类

其他两个基本上就是源码

public class DecodeResponseBodyConverter<T> implements Converter<ResponseBody, T> {
    private final TypeAdapter<T> adapter;

    DecodeResponseBodyConverter(TypeAdapter<T> adapter) {
        this.adapter = adapter;
    }

    @Override
    public T convert(ResponseBody value) throws IOException {
        /**
         * 这里对服务器返回的原始数据进行处理
         * 这里的temp就是原始数据,可以对其做一些操作
         */
        String temp = new String(value.bytes(), "utf-8");
      
        return adapter.fromJson(temp);
    }
}

然后在构建retrofit时进行替换

private val retrofit = Retrofit.Builder()
    .baseUrl(BASE_URL)
    .addConverterFactory(DecodeConverterFactory.create())
    .build()

三、调试过程的一个bug,recyclerView出问题了

E/RecyclerView: No adapter attached; skipping layout

昨天测试的时候还没问题,刚刚一跑又出问题了

哈哈哈,主Activity的layout设置错了,设成了测试的界面,没有能响应界面的activity,所以导致了这种情况

四、git回退版本

当时想看问题出在哪的时候找的

$ git reset --hard HEAD^         回退到上个版本
$ git reset --hard HEAD~3        回退到前3次提交之前,以此类推,回退到n次提交之前
$ git reset --hard commit_id     退到/进到 指定commit的sha码

五、动态替换retrofit的url

待处理,如果有好的想法,评论区留言交流哦

六、动态替换json数据的处理方式

待处理,如果有好的想法,评论区留言交流哦

这个就是上面那个切割json数据的后续

目录
相关文章
|
6月前
|
Linux
第一阶段复习总结——第二阶段复习提纲
在紧张的工作和出差中,我完成了第一阶段的复习,覆盖了所有预设内容,后期需要继续加强组网实战和学习阿里云的云速搭(CADT)工具。第二阶段复习计划从2024年3月21日至4月20日,时间延长以确保质量,将利用阿里云在线沙箱进行实践学习。
|
前端开发 API 数据库
第五阶段项目
api Dao UserDaoImpl Service Controler pom文件
120 0
|
分布式计算 算法 大数据
阶段练习_总结 | 学习笔记
快速学习 阶段练习_总结
阶段练习_总结 | 学习笔记
|
数据采集 消息中间件 监控
第六阶段总结| 学习笔记
快速学习第六阶段总结
第六阶段总结| 学习笔记
|
数据采集 消息中间件 大数据
第五阶段总结|学习笔记
快速学习第五阶段总结。
100 0
第五阶段总结|学习笔记
|
数据采集 消息中间件 NoSQL
第一阶段总结|学习笔记
快速学习第一阶段总结
第一阶段总结|学习笔记
|
数据采集 消息中间件 JSON
第七阶段总结|学习笔记
快速学习第七阶段总结
第七阶段总结|学习笔记
|
消息中间件 数据采集 分布式计算
第二阶段总结|学习笔记
快速学习第二阶段总结
第二阶段
第二阶段
137 0
第二阶段
|
Java
项目中遇到的问题 - 准备阶段
前两天建的CVS库看来是有点问题,同步时经常提示错误,然后就只能从库里删除相关文件重新提交。不知道是不是这个版本比较不稳定(以前看过文章说新版的CVSNT有什么什么问题来着)。 项目估计涉及30-40个对象,每个对象的属性还比较多,大约8-12个。
949 0