引言:
作为新手,往往照着写代码会出现很多的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,遂卒~,通过网上找资料,最终查明原因是OkHttp的client没有进行单实例封装,每发一次请求,就会创建一个线程池,最终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
【力扣】- 在排序数组中查找元素的第一个和最后一个位置