溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在android中讀寫(xiě)Json文件

發(fā)布時(shí)間:2021-04-08 17:30:36 來(lái)源:億速云 閱讀:718 作者:Leah 欄目:移動(dòng)開(kāi)發(fā)

怎么在android中讀寫(xiě)Json文件?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

首先在SD卡上的讀寫(xiě)權(quán)限是一定要申請(qǐng)的。那么還是老辦法,在 AndroidManifest.xml 文件中添加 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

這在android 6.0 以下的系統(tǒng)就足夠了。6.0及以上的更新的系統(tǒng),在代碼中需要申請(qǐng)SD卡的讀寫(xiě)權(quán)限。

先來(lái)構(gòu)建界面,兩個(gè)按鈕一個(gè)文字顯示組件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  tools:context="com.cofox.functions.ReadWriteJsonData.ReadWriteJsonDataActivity">

  <Button
    android:id="@+id/btnSingleWJson"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="獨(dú)立寫(xiě)Json文件" />

  <Button
    android:id="@+id/btnSingleRJson"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="獨(dú)立讀JSON文件" />

  <TextView
    android:id="@+id/ttvwJson"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:textSize="20sp"/>
</LinearLayout>

怎么在android中讀寫(xiě)Json文件

默認(rèn)界面

在onCreate方法中增加按鈕動(dòng)作

// 獨(dú)立寫(xiě)Json文件
    btnSingleWJson.setOnClickListener {
}
// 獨(dú)立讀Json文件
    btnSingleRJson.setOnClickListener{
}

寫(xiě)入Json文件要先判斷SD卡的讀寫(xiě)權(quán)限,沒(méi)權(quán)限要申請(qǐng)權(quán)限,如果有權(quán)限才執(zhí)行寫(xiě)操作。

// 獨(dú)立寫(xiě)Json文件
    btnSingleWJson.setOnClickListener {
      // 判斷有無(wú)寫(xiě)SD卡的權(quán)限
      if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        //申請(qǐng)寫(xiě) SD 卡的權(quán)限
        ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), COFOX_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE)
      } else {
        saveSingleJson()
      }
    }

這其中的saveSingleJson()方法是具體的寫(xiě)Json的實(shí)現(xiàn)。

fun saveSingleJson(){
    Toast.makeText(this, "保存獨(dú)立Json文件", Toast.LENGTH_LONG).show()
    //打開(kāi)要寫(xiě)入的json文件
    val fos = FileOutputStream(jsonFile)
    //json數(shù)據(jù)
    val products = arrayListOf<Product>()
    products.add(Product("0001", "微服務(wù)核心服務(wù)端"))
    products.add(Product("0002", "平臺(tái)管理android端"))
    products.add(Product("0003", "平臺(tái)管理web端"))
    products.add(Product("0004", "企業(yè)用戶android端"))
    products.add(Product("0005", "終端用戶wx/android/web端"))
    products.add(Product("0006", "android全功能端"))
    products.add(Product("0007", "明月端"))
    //創(chuàng)建JsonWrite對(duì)象
    val writer = JsonWriter(OutputStreamWriter(fos, "utf-8"))
    writer.setIndent("  ")
    writer.beginArray()
    for (product in products){
      writer.beginObject()
      writer.name("id").value(product.id)
      writer.name("name").value(product.name)
      writer.endObject()
    }
    writer.endArray()
    writer.close()
  }

注意writer.close()不能丟失,不然你就寫(xiě)不到文件里了。

代碼中的Json文件保存位置存放在一個(gè)變量中

val jsonFile = "/sdcard/cofoxtest.json"

讀取Json文件,一個(gè)對(duì)列表的記錄進(jìn)行循環(huán)讀取,一個(gè)是對(duì)記錄內(nèi)的字段循環(huán)讀取,兩個(gè)循環(huán)嵌套。

// 獨(dú)立讀Json文件
    btnSingleRJson.setOnClickListener {
      val fis = FileInputStream(jsonFile)
      var reader = JsonReader(InputStreamReader(fis,"utf-8"))
      val products = ArrayList<Product>()
      reader.beginArray()
      while (reader.hasNext()){
        var id = ""
        var name = ""
        reader.beginObject()
        while (reader.hasNext()) {
          var field = reader.nextName()
          if (field.equals("id")){
            id = reader.nextString()
          }else if (field.equals("name")){
            name = reader.nextString()
          }else{
            reader.skipValue()
          }
        }
        reader.endObject()
        products.add(Product(id, name))
      }
      reader.endArray()
      reader.close()

      if (products != null) {
        var result = ""
        for (product in products) {
          result += "id:" + product.id + " name:" + product.name + "\n"
          ttvwJson.setText(result)
        }
      }
    }

如果是高版本的android,第一次運(yùn)行,會(huì)對(duì)權(quán)限做一個(gè)判斷,根據(jù)操作人的權(quán)限賦予的選擇,有一個(gè)相應(yīng)的系統(tǒng)反應(yīng)。這就是權(quán)限選擇結(jié)果的一個(gè)方法重寫(xiě)。如果同意了權(quán)限就寫(xiě)入,如果不同意就顯示提示信息。

  override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    when (requestCode) {
      COFOX_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE -> {
        if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
          saveSingleJson()
        } else {
          Toast.makeText(this, "您拒絕了寫(xiě)入", Toast.LENGTH_LONG).show()
        }
      }
    }
  }

關(guān)于怎么在android中讀寫(xiě)Json文件問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI