文件命名后綴如.jpg、.png等等一般即為文件類型,但有些時(shí)候不能保證文件后綴名一定有效,所以嘗試將后綴轉(zhuǎn)換成對(duì)應(yīng)mime類型,方法如下:
10年積累的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有壺關(guān)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
如果轉(zhuǎn)換結(jié)果返回為nul,則可以認(rèn)為后綴名不是有效的文件類型。
此方法實(shí)際是由查找對(duì)應(yīng)的ContentProvider來(lái)獲取文件類型,會(huì)先在本進(jìn)程內(nèi)查找,失敗后通過(guò)ActivityManagerService跨進(jìn)程查找。
首先要設(shè)置數(shù)據(jù)源,常用的數(shù)據(jù)設(shè)置有兩種方式:
無(wú)論哪種設(shè)置方式,其本質(zhì)都是獲取文件描述符FileDescriptor,然后調(diào)用以下方法:
設(shè)置之后直接調(diào)用extractMetadata方法,傳入keyCode為MediaMetadataRetriever.METADATA_KEY_MIMETYPE,即可得到文件的mime類型。
這個(gè)方法是JAVA 1.6版本以后提供的,但是在Android中需要Api 26以上才可以使用,方法中的參數(shù)path可以使用File內(nèi)的toPath()方法獲取。
5.1. 使用java中URLConnection提供的“類型猜測(cè)”方法查詢:
此方法與方法一查詢mime方法本質(zhì)相同,最終都會(huì)調(diào)用MimeUtils.guessMimeTypeFromExtension方法。MimeUtils中提前緩存了后綴與mime類型的映射關(guān)系(先嘗試從特定的用戶表中加載,如果失敗則加載默認(rèn)的內(nèi)置表),于是根據(jù)傳入的后綴查詢對(duì)應(yīng)mime。
先讀取數(shù)據(jù)流的前16個(gè)字節(jié),根據(jù)這16個(gè)字節(jié)可以判斷出絕大部分的文件類型。不過(guò)URLConnection下的這個(gè)方法只提供網(wǎng)絡(luò)傳輸中常用的幾種類型判斷。
5.2. 根據(jù)前16個(gè)字節(jié)進(jìn)行判斷
以下只列出部分常用類型的應(yīng)對(duì)關(guān)系,更多類型可以搜索“根據(jù)文件頭獲取文件類型”查詢:
如果確定可轉(zhuǎn)為Bitmap,可以直接使用BitmapFactory.Options中的outMimeType屬性。
github:
依賴版本: 'io.github.firstletterz:tool-file:0.0.2'
2021-08-10
1.新建一個(gè)URI.java用來(lái)存放網(wǎng)絡(luò)請(qǐng)求地址和端口地址
如
public class URI {
public static final String LOGIN = "192.168.2.1/api/login";
}
2.新建界面TestActivity.java
3.編寫(xiě)界面,由于只用于測(cè)試用,所以在這只寫(xiě)了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="數(shù)據(jù)"/
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="數(shù)據(jù)"/
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="數(shù)據(jù)"/
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="數(shù)據(jù)"/
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="數(shù)據(jù)" /
效果圖如下:
4.編寫(xiě)實(shí)體類TestBean
這個(gè)根據(jù)所給的Json數(shù)據(jù)來(lái)寫(xiě)
5.編寫(xiě)適配器TestAdapter(我這里用的是BaseQuickAdapter萬(wàn)能適配器)
class TestAdapter :BaseQuickAdapter實(shí)體類, BaseViewHolder(你要傳數(shù)據(jù)界面) { ? ? override fun convert(helper: BaseViewHolder, item: 實(shí)體類) {
helper.setText(控件名,item.要放的數(shù)據(jù))
.setText(控件名,item.要放的數(shù)據(jù))
.setText(控件名,item.要放的數(shù)據(jù))
.setText(控件名,item.要放的數(shù)據(jù))
.setText(控件名,item.要放的數(shù)據(jù))
}
}
6.最主要的一步,編寫(xiě)Activity.java
首先要初始化,由于kotlin不需要初始化控件,所以我們只需要初始化我們的適配器
mAdapter = ManagementAdapter()
然后我們要獲取數(shù)據(jù)(我這里用了一下RxJava的東西)
fun getManagerfee(){
NetWork.getEnquiryDetailsApi().getManagerPriceList(inquiryId).async(this).subscribe({
it.isSuccess.yes {
mAdapter.setNewData(it.data)
}.otherwise {
onRequestFail(it.code, it.message)
}
}
}
7.最后基本上如果需要從上一個(gè)界面獲取數(shù)據(jù),需要從上一個(gè)接口帶過(guò)來(lái)一個(gè)id的字段,比如我這個(gè)從上一個(gè)界面帶過(guò)來(lái)的inquiryId,我們就需要寫(xiě)一下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讀取數(shù)據(jù)庫(kù)可以使用sqlite一些api進(jìn)行讀取,實(shí)例如下:
/**
* 查找一條數(shù)據(jù)
* @param uid
*/
public User find(Integer uid){
SQLiteDatabase db=dbOpenHelper.getReadableDatabase(); //創(chuàng)建數(shù)據(jù)庫(kù)輔助類
Cursor cursor =db.rawQuery("select * from user where uid=?", new String[]{uid.toString()}); //創(chuàng)建一個(gè)游標(biāo)
if(cursor.moveToFirst()){ //循環(huán)遍歷查找數(shù)組
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;
}