You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何从.js格式URL获取数据?

如何从指定JS URL获取数据并导入Android金融应用?

嘿,我来帮你搞定这个问题!你要抓取的这个JS文件其实是直接定义了一个包含港股行情数据的变量,咱们一步步来实现数据的获取和解析:

1. 先搞清楚目标JS的结构

这个URL返回的内容大概是这种格式:

var quote_00001_r = {
"code": "00001",
"name": "长和",
"price": "65.25",
// 其他行情字段...
};

核心就是把{}包裹的JSON部分提取出来,这就是咱们需要的有效数据。

2. 在Android中发起网络请求获取JS内容

我推荐用OkHttp(Android生态里最常用的网络库)来做请求,步骤如下:

第一步:添加依赖

在你的Module级别的build.gradle文件里加入OkHttp的依赖:

implementation 'com.squareup.okhttp3:okhttp:4.11.0'

第二步:编写请求代码

注意:Android不允许在主线程发起网络请求,所以咱们用协程来处理(这是现在最主流的异步处理方式):

import okhttp3.OkHttpClient
import okhttp3.Request
import kotlinx.coroutines.launch
import androidx.lifecycle.viewModelScope // 如果用ViewModel的话,或用其他协程作用域

// 初始化OkHttp客户端
val okHttpClient = OkHttpClient()

// 在ViewModel或者Activity/Fragment的协程中执行请求
viewModelScope.launch {
    try {
        val request = Request.Builder()
            .url("http://money18.on.cc/js/real/quote/00001_r.js")
            .build()
        
        val response = okHttpClient.newCall(request).execute()
        if (response.isSuccessful) {
            // 获取JS文件的文本内容
            val jsContent = response.body?.string() ?: ""
            // 下一步解析数据
            parseJsToData(jsContent)
        } else {
            // 处理请求失败的情况,比如打印错误码
            Log.e("DataFetch", "请求失败,错误码: ${response.code}")
        }
    } catch (e: IOException) {
        // 处理网络异常,比如无网络的情况
        Log.e("DataFetch", "网络出问题啦: ${e.message}")
    }
}

3. 解析JS内容,提取有效数据

拿到JS文本后,咱们需要把里面的JSON部分抠出来,然后解析成Android可以直接用的实体类:

第一步:添加JSON解析库(比如Gson)

同样在build.gradle里加依赖:

implementation 'com.google.code.gson:gson:2.10.1'

第二步:编写解析逻辑

import com.google.gson.Gson

fun parseJsToData(jsContent: String) {
    // 找到JSON的起始和结束位置:从第一个{到最后一个}
    val jsonStartIndex = jsContent.indexOf('{')
    val jsonEndIndex = jsContent.lastIndexOf('}')
    
    if (jsonStartIndex != -1 && jsonEndIndex != -1) {
        // 提取JSON字符串
        val jsonString = jsContent.substring(jsonStartIndex, jsonEndIndex + 1)
        
        // 用Gson解析成实体类
        val gson = Gson()
        val stockQuote = gson.fromJson(jsonString, StockQuote::class.java)
        
        // 现在stockQuote就是你需要的行情数据啦,可以直接用在你的金融应用里
        Log.d("DataParse", "成功获取到${stockQuote.name}的价格:${stockQuote.price}")
    } else {
        Log.e("DataParse", "哎呀,没找到有效的JSON数据,可能JS格式变了?")
    }
}

// 根据JS里的字段定义对应的实体类,字段名要和JS里的一致哦
data class StockQuote(
    val code: String,
    val name: String,
    val price: String,
    // 这里可以根据JS里的其他字段继续添加,比如change, volume等等
)

4. 必须注意的几个坑

  • 网络权限:一定要在AndroidManifest.xml里添加网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
  • HTTP明文请求限制:这个URL是HTTP协议的,Android 9及以上默认禁止明文HTTP请求。解决办法是创建一个网络安全配置文件:
    在res/xml目录下新建network_security_config.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config cleartextTrafficPermitted="true">
            <domain includeSubdomains="true">money18.on.cc</domain>
        </domain-config>
    </network-security-config>
    
    然后在AndroidManifest.xml的application标签里引用:
    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config">
        ...
    </application>
    
  • 数据格式兼容性:如果目标网站改了JS的变量名或者结构,你的解析逻辑也要跟着调整,建议加一些异常捕获,避免崩溃。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:01:27