引言:
作为新手,往往照着写代码会出现很多的bug。有时候还真要看看Logcat里面的报错,然后百度一下,你就会发现,大家都遇到过。
我遇到的问题:
1.运行闪退:其实是没加权限,既然使用OkHttp肯定要获取网络权限,添加

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

2.在子线程中使用了同步请求,即子线程中执行call.excute()语句,但是没有回到UI线程就更新UI。
3.点击按钮,无法获取页面源代码。这个问题困扰了我几个小时,最后解决了。
解决方案如下:

  • 协议改用https
  • targetSdkVersion 降到27以下
  • 这第三种方法给个大赞,就是在 res 下新增一个 xml 目录,然后创建一个名为:network_security.xml。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

然后在AndroidManifest.xml文件下的application标签增加以下属性

<application
...
 android:networkSecurityConfig="@xml/network_security"
...

下面我附上我成功的代码,是在碎片中实现的简单的GET,布局部分代码省略:

package com.example.test2;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import java.io.BufferedWriter;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class Fragment3 extends Fragment implements View.OnClickListener {
    private Button send,clear;
    private TextView textView;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.lay3,container,false);
        send=(Button)view.findViewById(R.id.send_request);
        clear=(Button)view.findViewById(R.id.clear_data);
        textView=(TextView)view.findViewById(R.id.receive_data);
        send.setOnClickListener(this);
        clear.setOnClickListener(this);
        return view;
    private void sendRequest(){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    OkHttpClient client = new OkHttpClient();
                    Request request = new Request.Builder()
                            .url("https://www.baidu.com")
                            .build();
                    Response response=client.newCall(request).execute();
                    String responseData=response.body().string();
                    showResponse(responseData);
                } catch (IOException e) {
                    e.printStackTrace();
        ).start();
    private void showResponse(final String response){
        getActivity().runOnUiThread(new Runnable(){
            @Override
            public void run() {
                textView.setText(response);
        });
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.send_request:
                sendRequest();
                break;
            case R.id.clear_data:
                Toast.makeText(getActivity(),"Text was cleared",Toast.LENGTH_SHORT).show();
                textView.setText("");
                break;
                default:
                    break;
				
候你可能会说,那我如果了解到一家公司的这些情况呢?那么「天眼查」可以完美解决你这个问题。我们可以通过这个网站详细了解到一家公司的融资、行业、竞品、法律风险、管理层、产品等等信息。 四、我的经验水平能拿多少的工资 对于这个问题,我真的很想说多少经验真的和多少工资没多大关系。 相同的一年经验,有人只能拿 10K,但是有人却能拿到 20K,原因就在于两个人的技术能力不一样。 你技术好,就能比别人多要工资;你技术一般,就只能拿少点的工资,这是一个很现实的问题。所以工资只与技术挂钩,而不是你所谓的经验。 问题okhttp版本问题 解决方案:使用最新的okhttp版本3.14.9 implementation 'com.squareup.okhttp3:okhttp:3.14.9' okhhtp官网链接: https://github.com/square/okhttp 具体原因没弄清楚,如果你弄明白了,麻烦告诉我一声哦! 原来我引用的okhttp3是最新的3.14.2,后改为3.1.0就能通过了,估计是和新版本的studio插件之类有冲突吧。 后来我详细测试了一下,到3.13.0版本就不兼容了,最高兼容到3.12.3 我的环境: andro...
手机刚刚升级到 9.0 了,之前运行的项目,崩了.... 之前 使用org.apache.http.legacy 的,网上找了好一大圈,都是加 xml 的,但是不知道为甚,两个项目,一个可以,一个不可以,同一个网络框架,好凉。。。。 后来找到一篇文章,帮忙解决了问题,现转载该文章,转载地址为https://blog.csdn.net/lyj1005353553/article/deta...
抛出异常android.os.NetworkOnMainThreadException 问题原因 在Android 4.0以上,网络连接方法execute()不能放在主线程上,不然就抛异常android.os.NetworkOnMainThreadException。但是4.0下版本可以不会报错。 新开用于网络请求的线程,直接使用匿名内部类创建新线程 // 新开用于网络请求的线程 new Thread(new Runnable(){ 5.开源的Android视频播放器–更新主界面,添加网页浏览 6.Android 开发实践 数据存储方案 持久化技术 7.Android Studio导入Vitamio多媒体开发框架 8.Android
一、背景介绍: 问题的出现是因为我的代码中需要进行网络请求,而网络请求又是在一个线程中,间隔几秒就会请求一次,为了方便,就是用的OkHttp进行网络访问,本来,是没问题的,谁知道,某次测试间长了一点,然后apk就突然闪退了,看了下log,是因为大量创建了线程,栈被撑爆了,OOM,遂卒~,通过网上找资料,最终查明原因是OkHttpclient没有进行单实例封装,每发一次请求,就会创建一个线程池,最终OOM,下面就这个问题,单独写了一个demo进行问题模拟及解决。 二、模拟复现: 1.OkHttp的异步访问
使用 OkHttp 返回信息,将 response.body().string() 转成对象,结果直接闪退 @Override public void onResponse(Call call, Response response) throws IOException { //response.body().string() 获得服务器返回的数据 Log.d(TAG, "onResponse:
一、OkSocket简介 OkSocket是一款基于阻塞式传统Socket的一款Socket客户端整体解决方案.你可以使用它进行基于Tcp协议的Socket通讯.就是我们所说的长连接. 对通讯协议几乎无限制,可以使用PB,可以使用JSON,可以使用XML.只要可以序列化成Byte数组的对象都可以传输. 兼容所有语言写的Socket服务端,解决了Tcp通讯中头疼的粘包拆包问题,断线重连问题,心...
implementation 'com.squareup.okhttp3:okhttp:3.8.0' 然后在project的build.gradle中记得加上mavenCentral() buildscript { repositories { mavenCentral()
以下是本人自己在进行制作软件遇到问题 1、因为我们是基于百度地图定位SDK来使用的,所以由于百度地图官网没有进行纠偏,所以会出现定位偏移,只要定位初始化initLocation中加上一句话就可以了,如下: option.setCoorType(“bd09ll”); 2、在Android端实现换页,那么在Android Studio中就是要从一个Activity跳转到另一个Activity中,比...
当开发版本targetSdkVersion提升到30: 在android10手机上安装app后,调用相册选择图片,相册会出现图片全部都是黑屏现象,选择后的图片也是黑屏图片,而且无法获取图片的小大; 在android10以下的手机安装app,可以正常选择图片; 把targetSdkVersion降到28,在android10手机上则可以正常选择相册的图片。 目前(2020.08.03)没有找到targetSdkVersion30的适配方法,如有大神有解决方法,望请告知,不甚感激。 【Android Studio】- 问题记录:Could not get resoure:..XXX..gradle.pom.Received status code 400 from server 【力扣】- 在排序数组中查找元素的第一个和最后一个位置