AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 76994885
Accepted
David Frick
David Frick
Asked: 2023-08-29 01:30:16 +0800 CST2023-08-29 01:30:16 +0800 CST 2023-08-29 01:30:16 +0800 CST

为什么我对 JSONObject 的键的第二次迭代没有运行?

  • 772

我有一个JSONObject我正在用来创建一个表。但是,当我第二次使用这些键创建每个单元格时,它什么也没做。我添加了日志语句来测试这一点。不key打印单数 s。叫我难住了。

class MovieFragment : Fragment(), FinraDataInterface {

    private lateinit var binding: MovieFragmentBinding

    val finraDataInterface: FinraDataInterface = this

    override fun drawTable(jsonArrayData: JSONArray) {
//         ------ Draw the table -----
//         Draw the keys first
        val headerRow = TableRow(requireActivity())
        Log.d("jsonArray", jsonArrayData[0].toString())
        val firstRecord = jsonArrayData[0] as JSONObject
        val keys = firstRecord.keys()

        for (key in keys) {
            val textView = TextView(requireActivity())
            textView.text = key
            headerRow.addView(textView)
        }
        binding.table.addView(headerRow)

        // Draw the data second
        for (i in 0 until jsonArrayData.length()) {
            val record = jsonArrayData[i] as JSONObject
            Log.d("Record", record.toString())
            val tableRow = TableRow(requireActivity())
            Log.d("Table Row", "Table Row created")
            Log.d("Keys", listOf(keys).toString())

            // Error is right here.
            for (key in keys) {
                Log.d("key", key)
                val textView = TextView(requireActivity())
                val cellText = record[key] as String
                textView.text = cellText
                tableRow.addView(textView)
            }
            binding.table.addView(tableRow)
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = MovieFragmentBinding.inflate(layoutInflater)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        finraGetBondInfo("AMC")
    }




    private fun finraGetBondInfo(companyName: String) {
        val url = "https://www.finra.org/finra-data/fixed-income/corp-and-agency"

        val queue = Volley.newRequestQueue(requireActivity())
        var cfruid = ""

        val stringRequest = object: StringRequest(Request.Method.GET, url,
            { response ->
                Log.d("A", "Response is: " + response.substring(0,500))
            },
            { error ->
                Log.e("Error", error.toString())
            })
        {
            override fun  parseNetworkResponse(response : NetworkResponse) : Response<String> {
                // since we don't know which of the two underlying network vehicles
                // will Volley use, we have to handle and store session cookies manually
                Log.i("response", response.headers.toString());
                val cookies = HttpCookie.parse(response.headers?.get("Set-Cookie"))
                Log.d("Cookies:", cookies[0].toString())
                val indexOfEqualSign = cookies[0].toString().indexOf('=')
                cfruid = cookies[0].toString().substring(indexOfEqualSign + 1)
                Log.d("Cfruid:", cfruid)


                return super.parseNetworkResponse(response)
            }
        }

        queue.add(stringRequest)

        // Create our JSON Object for the finra call
        val json = JSONObject()
        val fieldsArray = JSONArray()
        fieldsArray.put("issueSymbolIdentifier")
        fieldsArray.put("issuerName")
        fieldsArray.put("isCallable")
        fieldsArray.put("productSubTypeCode")
        fieldsArray.put("couponRate")
        fieldsArray.put("maturityDate")
        fieldsArray.put("industryGroup")
        fieldsArray.put("moodysRating")
        fieldsArray.put("standardAndPoorsRating")
        fieldsArray.put("lastSalePrice")
        fieldsArray.put("lastSaleYield")
        json.put("fields", fieldsArray)

        json.put("dateRangeFilters", JSONArray())
        json.put("domainFilters", JSONArray())
        json.put("compareFilters", JSONArray())

        val multiJson = JSONObject()
        multiJson.put("fuzzy", false)
        multiJson.put("searchValue", companyName)
        multiJson.put("synonym", true)
        val subfieldsJson = JSONObject()
        subfieldsJson.put("name", "issuerName")
        subfieldsJson.put("boost", 1)
        val fieldsArray2 = JSONArray()
        fieldsArray2.put(subfieldsJson)
        multiJson.put("fields", fieldsArray2)
        val multiArray = JSONArray()
        multiArray.put(multiJson)

        json.put("multiFieldMatchFilters", multiArray)
        json.put("orFilters", JSONArray())
        json.put("aggregationFilter", JSONObject.NULL)
        val sortFieldsArray = JSONArray()
        sortFieldsArray.put("+issuerName")
        json.put("sortFields", sortFieldsArray)
        json.put("limit", 50)
        json.put("offset", 0)
        json.put("delimiter", JSONObject.NULL)
        json.put("quoteValues", false)

        Log.d("JSON", json.toString())


        val url2 = "https://services-dynarep.ddwa.finra.org/public/reporting/v2/data/group/FixedIncomeMarket/name/CorporateAndAgencySecurities"
        val request2 = object: JsonObjectRequest(Request.Method.POST, url2, json,
            { response ->
                // TODO replace this with our calls to make tab2 display bond data
                val returnBody =  response["returnBody"] as JSONObject
                var stringData = returnBody["data"] as String
                stringData = stringData.replace("\\n", "").replace("\\", "")
                val jsonArrayData = JSONArray(stringData)

                finraDataInterface.drawTable(jsonArrayData)
            },
            { error ->
                Log.e("Error", error.toString())
            })
        {
            override fun getHeaders(): MutableMap<String, String> {
                val headers = HashMap<String, String>()
                headers["Authority"] = "services-dynarep.ddwa.finra.org"
                headers["Accept"] = "application/json, text/plain, */*"
                headers["Cookie"] = "XSRF-TOKEN=$cfruid;"
                headers["Origin"] = "https://www.finra.org"
                headers["Referer"] = "https://www.finra.org/"
                headers["X-XSRF-token"] = cfruid
                headers["user-agent"] =  "python-requests/2.31.0"
                Log.d("headers:", headers.toString())
                return headers
            }

            override fun getBodyContentType(): String {
                return "application/json"
            }
        }
        queue.add(request2)

    }

}

让我特别困惑的是,使用键创建标题行的第一个 for 循环工作正常。我尝试将内容转换为不同的类型,看看是否存在某种类型错误。然而,这只是第二个 for 循环没有运行。我没有收到任何错误消息。我缺少什么?谢谢。

android
  • 1 1 个回答
  • 31 Views

1 个回答

  • Voted
  1. Best Answer
    broot
    2023-08-29T05:10:04+08:002023-08-29T05:10:04+08:00

    假设您在这里使用JSON-java( org.json) 库,请注意JSONObject.keys()方法返回一个Iteratorover 键。迭代器与集合不同Iterable- 它是对某些数据的“实时”迭代,并且只能使用一次。在我们消耗完所有项目后,迭代器始终位于数据的末尾,并且不提供任何额外的项目。

    这很容易被忽视,因为大多数库不提供迭代器,而是提供可以多次使用的可迭代对象。

    为了解决这个问题,我们需要使用创建另一个迭代器,keys()或者我们可以使用keySet(),它返回一个集合,因此可以迭代多次。如果keySet()不可用,我们可以使用以下命令将迭代器转换为列表asSequence().toList():

    • 2

相关问题

  • 滚动 Recyclerview 应覆盖工具栏

  • 底部像素溢出并且导航功能不起作用

  • 从列表中选择一种颜色,在 Android 中找不到数组

  • 将 MapLibre 添加到新的 Android 项目不起作用

  • 我应该将矢量图像放入资源还是绘图中?我的应用程序中有数千个向量

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve