扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
文件命名后缀如.jpg、.png等等一般即为文件类型,但有些时候不能保证文件后缀名一定有效,所以尝试将后缀转换成对应mime类型,方法如下:
10年积累的成都网站设计、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有壶关免费网站建设让你可以放心的选择与我们合作。
如果转换结果返回为nul,则可以认为后缀名不是有效的文件类型。
此方法实际是由查找对应的ContentProvider来获取文件类型,会先在本进程内查找,失败后通过ActivityManagerService跨进程查找。
首先要设置数据源,常用的数据设置有两种方式:
无论哪种设置方式,其本质都是获取文件描述符FileDescriptor,然后调用以下方法:
设置之后直接调用extractMetadata方法,传入keyCode为MediaMetadataRetriever.METADATA_KEY_MIMETYPE,即可得到文件的mime类型。
这个方法是JAVA 1.6版本以后提供的,但是在Android中需要Api 26以上才可以使用,方法中的参数path可以使用File内的toPath()方法获取。
5.1. 使用java中URLConnection提供的“类型猜测”方法查询:
此方法与方法一查询mime方法本质相同,最终都会调用MimeUtils.guessMimeTypeFromExtension方法。MimeUtils中提前缓存了后缀与mime类型的映射关系(先尝试从特定的用户表中加载,如果失败则加载默认的内置表),于是根据传入的后缀查询对应mime。
先读取数据流的前16个字节,根据这16个字节可以判断出绝大部分的文件类型。不过URLConnection下的这个方法只提供网络传输中常用的几种类型判断。
5.2. 根据前16个字节进行判断
以下只列出部分常用类型的应对关系,更多类型可以搜索“根据文件头获取文件类型”查询:
如果确定可转为Bitmap,可以直接使用BitmapFactory.Options中的outMimeType属性。
github:
依赖版本: 'io.github.firstletterz:tool-file:0.0.2'
2021-08-10
1.新建一个URI.java用来存放网络请求地址和端口地址
如
public class URI {
public static final String LOGIN = "192.168.2.1/api/login";
}
2.新建界面TestActivity.java
3.编写界面,由于只用于测试用,所以在这只写了TextView,具体需求看自己。
xmlns:app=""
xmlns:tools=""
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".TestActivity"
android:id="@+id/tv_one"
android:layout_width="0dp"
android:minHeight="48dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
tools:text="数据"/
android:id="@+id/tv_two"
android:layout_width="0dp"
android:minHeight="48dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
tools:text="数据"/
android:id="@+id/tv_three"
android:layout_width="0dp"
android:minHeight="48dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
tools:text="数据"/
android:id="@+id/tv_fore"
android:layout_width="0dp"
android:minHeight="48dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
tools:text="数据"/
android:id="@+id/tv_five"
android:layout_width="0dp"
android:minHeight="48dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
tools:text="数据" /
效果图如下:
4.编写实体类TestBean
这个根据所给的Json数据来写
5.编写适配器TestAdapter(我这里用的是BaseQuickAdapter万能适配器)
class TestAdapter :BaseQuickAdapter实体类, BaseViewHolder(你要传数据界面) { override fun convert(helper: BaseViewHolder, item: 实体类) {
helper.setText(控件名,item.要放的数据)
.setText(控件名,item.要放的数据)
.setText(控件名,item.要放的数据)
.setText(控件名,item.要放的数据)
.setText(控件名,item.要放的数据)
}
}
6.最主要的一步,编写Activity.java
首先要初始化,由于kotlin不需要初始化控件,所以我们只需要初始化我们的适配器
mAdapter = ManagementAdapter()
然后我们要获取数据(我这里用了一下RxJava的东西)
fun getManagerfee(){
NetWork.getEnquiryDetailsApi().getManagerPriceList(inquiryId).async(this).subscribe({
it.isSuccess.yes {
mAdapter.setNewData(it.data)
}.otherwise {
onRequestFail(it.code, it.message)
}
}
}
7.最后基本上如果需要从上一个界面获取数据,需要从上一个接口带过来一个id的字段,比如我这个从上一个界面带过来的inquiryId,我们就需要写一下object
companion object {
private const val EXTRA_PARAM_ID ="inquiry_id"
fun launch(context: Context, inquiryId: String) {
context.startActivity(Intent(context, ManagePreActivity::class.java).apply {
putExtra(EXTRA_PARAM_ID, inquiryId)
})
}
}
android读取数据库可以使用sqlite一些api进行读取,实例如下:
/**
* 查找一条数据
* @param uid
*/
public User find(Integer uid){
SQLiteDatabase db=dbOpenHelper.getReadableDatabase(); //创建数据库辅助类
Cursor cursor =db.rawQuery("select * from user where uid=?", new String[]{uid.toString()}); //创建一个游标
if(cursor.moveToFirst()){ //循环遍历查找数组
int uid2=cursor.getInt(cursor.getColumnIndex("uid"));
String uname=cursor.getString(cursor.getColumnIndex("uname"));
String uaddress=cursor.getString(cursor.getColumnIndex("uaddress"));
User user=new User();
user.setUid(uid2);
user.setUname(uname);
user.setUaddress(uaddress);
return user;
}
cursor.close();
return null;
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流