全部 文章 问答 分享 共找到170个相关内容

[文章] 开源图表框架MPAndroidChart - LineChart的简单使用
supportingline-bar-pie-radar-bubble-andcandlestickchartsaswellasscaling,panningandanimations.译:一个强大的🚀Android图表视图
[问答] 网络编程的框架
请问一下拉大锯,Android网络编程现在运用到的框架有哪些?
2023-11-21 15:11
·
网络编程
[问答] java有没有实现了具体功能的框架?
学完ssm框架之后发现,虽然方便了一些,但是大部分细部功能都要自己来手动写。举个例子吧,php有个yii框架,其中用户的验证登录功能框架直接提供了,只需要配置一下就可以使用(大概是)。

[文章] vivo手机使用下拉刷新框架的问题
领券联盟中使用了一个下拉刷新框架,起初的原因是下拉刷新一次内存结束增加70左右,然后以为是我代码的原因,就从gihub下载了刷新框架的demo以及学院里领券联盟的demo,真机跑起来后,也是同样的结果。
2020-06-24 17:11
·
内存暴涨

[文章] 25000字总结Android优秀的第三方框架、各种学习资料(上)
可以和任何下拉刷新框架结合使用GithubAndroidRecyclerView顶部悬浮实现简书RecyclerView:利用打造悬浮效果Github一个如你熟悉ListView、GridView一样熟悉的
2020-05-18 19:56
·
android

[文章] 小程序集成echart
简介小程序要集成图表有很多方式,尝试使用F2,uchart....等多个图表,其中集成进去包最小的是F2,但是F2对于Taro+Typescript的小程序的来说,不是很方便,但是架不住人家编译后的包小

[文章] 根据之前提问过的换肤框架的解决方法
之前在社区上提问过如何更换三种主题、评论区里有大哥提供了换肤框架然后发现其实有一个换肤框架的学习成本很低很方便在此记录各位也可以参考换肤框架Android-skin-support链接:https://

[文章] 根据之前提问过的换肤框架的解决方法
之前在社区上提问过如何更换三种主题、评论区里有大哥提供了换肤框架然后发现其实有一个换肤框架的学习成本很低很方便在此记录各位也可以参考换肤框架Android-skin-support链接:https://

[文章] 25000字总结Android优秀的第三方框架、各种学习资料(下) Camera、Video、指纹、聊天IM、投屏等
libphonenumber全球手机号验证工具packer-ng-plugin多渠道打包依赖注入kotlin中的依赖注入替换dagger2dagger是Java常用的依赖注入框架Koin是一款轻量级的依赖注入框架
[文章] Android 智能刷新框架SmartRefreshLayout
Android智能刷新框架SmartRefreshLayoutSmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的View,还支持多层嵌套的视图结构
2020-08-03 23:25
·
UI
[问答] indicator框架下面的3个fragment能直接提交数据到后台吗?
indicator框架下面的3个fragment,其中1个fragment用来作为加班申请表填写,如果我想用retrofit提交表单到后台,能在fragment类下面直接post实现吗?
2020-05-08 21:29
·
fragment下能否直接提交数据
[问答] 用vue-image-crop-upload框架时上传路径跨域时报错
这是前端使用框架那一部分的代码,跟着视频走的的<avatar-upload:withCredentials="true"v-model="showAvatarCutter"field="img":
2021-01-04 01:29
·
vue
[问答] 简单天气预报界面实现
像这种界面应该怎么做最近学校要交作业,有点纠结做法主要是下半折线图和信息的实现:想了两种方法哪种更好一些一种是分上半部分是gridview,下面折线图是第三方图表库2.另一种是,整个是一个gridview
[文章] SSM框架整合
SSM框架整合springmvc-servlet.xml<?xmlversion="1.0"encoding="UTF-8"?

[文章] 非常好用的RecyclerView框架——BRVAH使用指南
遂学习之,学习后发现针不戳,只要熟悉RecyclerView的基础使用即可快速上手,并且框架高度封装,能极大提高开发效率。

[文章] Android Hilt 依赖注入框架初体验 🗡️
Hilt意为“刀柄”,是谷歌在著名依赖注入框架Dagger的基础上,针对Android开发的场景化实现添加依赖项首先,将hilt-android-gradle-plugin插件添加到项目的根级build.gradle

[文章] 今日水文章:JS,生成某个时间段内的所有日期
今日水文章:JS,生成某个时间段内的所有日期需求背景:图表用户没有选择时间时,我默认显示1个月的数据,也就是我要生成从今天2024-05-09~2024-04-09里的每一天的时间用户有选择时间,则显示时间范围内每一天的时间
[分享] 图片框架的选择
如果tv低版本咨询了大佬说使用Fresco
2022-05-27 10:10
·
图片

[文章] 好轮子分享(感谢分享)
pagingWorkManager(Kotlin+coroutines):https://developer.android.google.cn/jetpack/androidx/releases/work标题栏框架
2022-05-10 10:42
·
Android轮子
[问答] 关于MediaSession框架的问题
MediaBrowser和MediaBrowserService连接操作时,传入的回调不回调
我想要的结果:MediaBrowser.ConnectionCallback回调连接结果
客户端代码:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG, "onCreate: "); initView(); mMediaBrowser = new MediaBrowser(this, new ComponentName(this, MusicService.class),mConnectionCallback,null ); } @Override protected void onStart() { super.onStart(); mMediaBrowser.connect(); } @Override protected void onStop() { super.onStop(); mMediaBrowser.disconnect(); } private void initView() { mList = new ArrayList<>(); } private MediaBrowser.ConnectionCallback mConnectionCallback = new MediaBrowser.ConnectionCallback(){ @Override public void onConnected() { Log.d(TAG, "onConnected: "); if (mMediaBrowser.isConnected()){ String mediaId = mMediaBrowser.getRoot(); mMediaBrowser.unsubscribe(mediaId); mMediaBrowser.subscribe(mediaId,mBrowserSubscriptionCallback); } } @Override public void onConnectionSuspended() { Log.d(TAG, "onConnectionSuspended: "); } @Override public void onConnectionFailed() { Log.d(TAG, "onConnectionFailed: "); } };
服务端代码:
@Override public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate: "); mPlaybackState = new PlaybackState.Builder() .setState(PlaybackState.STATE_NONE, 0, 1.0f) .build(); mSession = new MediaSession(this, "MusicService"); mSession.setCallback(SessionCallback);//设置回调 mSession.setFlags(MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS); mSession.setPlaybackState(mPlaybackState); setSessionToken(mSession.getSessionToken()); mMediaPlayer = new MediaPlayer(); mMediaPlayer.setOnPreparedListener(this); mMediaPlayer.setOnCompletionListener(this); } private MediaSession.Callback SessionCallback = new MediaSession.Callback() { @Override public void onCommand(@NonNull String command, @Nullable Bundle args, @Nullable ResultReceiver cb) { super.onCommand(command, args, cb); } };
2022-03-17 17:19
·
Android

[文章] [毕业设计]一个带后端的影音播放app
期间在考虑用什么视频播放框架,当时正好群里有人问视频播放框架用什么比较好,断电哥推荐了一个b站出的框架,我就直接拿来用了。

[文章] android开发网络框架OkHttp
OkHttp本文属于android网络编程课程里的系列文章之一详情请查看网络编程课程Android开发之网络和多媒体前面我们学习了http协议,然后使用java的api去访问网络,需要准备请求头,设置好各种东西,自己处理线程。会不会很麻烦呢?于是,很多前辈觉得这样子很麻烦,就把这些复杂的东西封装起来,我们通过简单的调用,就可以实现网络请求了。github地址官方文档地址优点的话去看官网吧,这里就写成中文的了请求同一主机的时候,一般是指同一域名,支持共享同一个socket通过连接池减少请求延时传输通过GZIP压缩,减少下载内容的体积用缓存的方式避免重复的请求应用场景学习一门技术,从应用场景上手是最快的。毕竟你要落实到用处的嘛。OkHttp在我们android开发中有哪些使用场景呢?请求内容数据(目前来说,数据格式主要是json,xml比较少用了)加载图片(一般来说,图片地址以内容的形式返回到手机端,然后再通过图片地址进行加载到控件中)上传文件/数据(头像的上传,采集数据的上传,甚至是录像之类的大文件上传)使用api文档这里我们使用到的api文档是商城的api文档阳光沙滩商城的API文档后面我们也会开放更多的文档关于高版本(27以上)http访问的配置如果访问为https协议的话,略过即可如果在android27以上,默认是不支持Http访问的了,需要使用https,如果你要使用Http明文访问,那么需要配置一下。在清单文件,application节点,添加android:networkSecurityConfig="@xml/network_security_config"network_security_config<?xmlversion="1.0"encoding="utf-8"?><network-security-config><domain-config><domainincludeSubdomains="true">sunofbeaches.com</domain><domain-configcleartextTrafficPermitted="true"><domainincludeSubdomains="true">www.sunofbeach.net</domain><domainincludeSubdomains="true">imgs.sunofbeaches.com</domain></domain-config></domain-config></network-security-config>关于网络安全配置文件的说明请看这篇文章网络安全配置声明权限<uses-permissionandroid:name="android.permission.INTERNET"/>添加依赖implementation("com.squareup.okhttp3:okhttp:4.2.2")异步get请求步骤:创建OkHttpClient创建请求内容浏览器根据请求内容创建请求任务执行请求任务代码:publicvoidasyncGet(Viewview){//获取商城的分类信息Stringurl="https://www.sunofbeach.net/shop/api/discovery/categories";//1、创建client,理解为创建浏览器OkHttpClientokHttpClient=newOkHttpClient();//2、创建请求内容Requestrequest=newRequest.Builder().url(url).get().build();//3、用浏览器创建调用任务Callcall=okHttpClient.newCall(request);//4、执行任务call.enqueue(newCallback(){@OverridepublicvoidonFailure(@NotNullCallcall,@NotNullIOExceptione){Log.d(TAG,"onFailure-->"+e.toString());}@OverridepublicvoidonResponse(@NotNullCallcall,@NotNullResponseresponse)throwsIOException{Log.d(TAG,"response-->"+response.body().string());}});}执行结果:同步的get请求步骤跟前面一样,只是在执行任务的时候,不是异步的。同步的请求,需要自己处理线程的问题,不可以在UI线程去执行任务。代码publicvoidsyncGet(Viewview){//获取商城的分类信息Stringurl="https://www.sunofbeach.net/shop/api/discovery/categories";//1、创建client,理解为创建浏览器OkHttpClientokHttpClient=newOkHttpClient();//2、创建请求内容Requestrequest=newRequest.Builder().url(url).get().build();//3、用浏览器创建调用任务finalCallcall=okHttpClient.newCall(request);//4、执行任务newThread(newRunnable(){@Overridepublicvoidrun(){try{Responseresponse=call.execute();Log.d(TAG,"response-->"+response.body().string());}catch(IOExceptione){e.printStackTrace();Log.d(TAG,"failure-->"+e.toString());}}}).start();}post请求++举一反三呀++,对吧!前面get请求,在创建请求的时候.get(),那么post呢?我们也有post请求的方法测试一下商城的搜索接口https://www.sunofbeach.net/shop/api/search/pagepage是页码参数:keywordpublicvoiddoSearch(Viewview){Stringurl="https://www.sunofbeach.net/shop/api/search/1";RequestBodyrequestBody=newFormBody.Builder().add("keyword","电脑").build();OkHttpClientclient=newOkHttpClient();Requestrequest=newRequest.Builder().url(url).post(requestBody).build();Callcall=client.newCall(request);call.enqueue(newCallback(){@OverridepublicvoidonFailure(@NotNullCallcall,@NotNullIOExceptione){Log.d(TAG,"onFailure-->"+e.toString());}@OverridepublicvoidonResponse(@NotNullCallcall,@NotNullResponseresponse)throwsIOException{Log.d(TAG,"responsejson-->"+response.body().string());}});}可以看到,上面requestBody是FormBody,我们看看RequestBody的继承关系:除了表单数据以外,还可以是文件。学习神器SOBAndroidMiniWeb程序地址:SOBAndroidMiniWeb具体的使用方法请看里面的文档说明。有了这个神器,我们就可以做接下来的网络学习了。post上传单文件使用场景:比如说我们上传头像,比如说我们上传log权限<uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/>一般来说,我们读取的数据在扩展卡里,所以要加上这个权限。比如说我们上传一张图片试试看。之前我们不是有imagePicker嘛,同学们可以结合那个案例去整一个,我这里为了比较快一点,我就直接复制一张图片到特定目录下了。关于读取图片的动态权限获取请看这里:Android6.0+应用权限获取步骤publicvoidpostFile(Viewview){Stringurl="https://10.0.2.2:9102/file/upload";OkHttpClienthttpClient=newOkHttpClient.Builder().build();Filefile=newFile("/storage/emulated/0/Download/1.jpg");MediaTypemediaType=MediaType.parse("image/jpeg");RequestBodyfileBody=RequestBody.create(file,mediaType);RequestBodyrequestBody=newMultipartBody.Builder().addFormDataPart("file",file.getName(),fileBody).build();Requestrequest=newRequest.Builder().url(url).post(requestBody).build();Callcall=httpClient.newCall(request);call.enqueue(newCallback(){@OverridepublicvoidonFailure(@NotNullCallcall,@NotNullIOExceptione){Log.d(TAG,"上传失败-->"+e.toString());}@OverridepublicvoidonResponse(@NotNullCallcall,@NotNullResponseresponse)throwsIOException{Log.d(TAG,"上传结果:"+response.body().string());}});}类型可以查看这里Mime类型列表上传结果:{"success":true,"code":10000,"message":"上传成功.文件路径为:E:\\sobCourse\\sobAndroidWeb\\SOBAndroidMiniWeb\\sobUpload\\1.jpg","data":null}查看路径上的图片:多文件上传那如何上传多文件呢?在web程序里,我定义的接口/file/upload为单文件上传而多文件上传的接口为参数Kye为:file/files/upload为多文件上传参数key为files上传代码:publicvoidpostMultiFile(Viewview){Stringurl="https://10.0.2.2:9102/files/upload";OkHttpClienthttpClient=newOkHttpClient.Builder().build();FilefileOne=newFile("/storage/emulated/0/Download/1.jpg");FilefileTwo=newFile("/storage/emulated/0/Download/rBsADV3nxtKACoSfAAAPx8jyjF8169.png");FilefileThree=newFile("/storage/emulated/0/Download/rBsADV2rEz-AIzSoAABi-6nfiqs456.png");MediaTypemediaType=MediaType.parse("image/jpeg");RequestBodyfileOneBody=RequestBody.create(fileOne,mediaType);RequestBodyfileTwoBody=RequestBody.create(fileTwo,mediaType);RequestBodyfileThreeBody=RequestBody.create(fileThree,mediaType);RequestBodyrequestBody=newMultipartBody.Builder().addFormDataPart("files",fileOne.getName(),fileOneBody).addFormDataPart("files",fileTwo.getName(),fileTwoBody).addFormDataPart("files",fileThree.getName(),fileThreeBody).build();Requestrequest=newRequest.Builder().url(url).post(requestBody).build();Callcall=httpClient.newCall(request);call.enqueue(newCallback(){@OverridepublicvoidonFailure(@NotNullCallcall,@NotNullIOExceptione){Log.d(TAG,"多文件上传失败-->"+e.toString());}@OverridepublicvoidonResponse(@NotNullCallcall,@NotNullResponseresponse)throwsIOException{Log.d(TAG,"多文件上传结果:"+response.body().string());}});}结果:{"success":true,"code":10000,"message":"上传成功3个文件,路径:E:/sobCourse/sobAndroidWeb/SOBAndroidMiniWeb/sobUpload","data":null}好啦,学习android知道这些基本上够用了。知道怎么请求数据,怎么样上传数据。任务就这两个。至于下载那些也是一样的,本质还是一个请求任务,而内容则在response里头,读取出来写入文件即可。这些我们都会在后面的案例里有。同学们先掌握这些先。代码一定要写。如果遇到问题,就发帖子交流吧。
- 1
- 2
- 3
- 4
- 5
- 6