マスクはドージコインが素晴らしいと言いました、私はアイデアプラグインがあなたが魚を監視するのを助けると言いました

古い馬と古い馬


数日前、マスクは彼のお気に入りの暗号通貨がドージコインである可能性があるとツイートしただけでなく、Twitterアカウントのプロファイルを「元ドージコインCEO」に変更しました。

「カーゴマスター」の世代である「シリコンバレーアイアンマン」は、最も裕福な男になった後、少し頭が強いようです。これはボスマとの戦いです。どちらの古い馬もとても印象的で、それを思い出させます。ソン・タンタンのスケッチでは、「彼らはすべてこのような有名人です」。彼らが金持ちになると、彼らは意図的になります。このようなものは人々の遺伝子で書かれているようです。

マスクはカレンシーサークルの旗を振ったため、価格上昇の波に直結しました。幸せな人もいれば心配した人もいました。とても活気がありました。もちろん、コインを推測しない小さなペニスとして、他の人の興奮は私とは何の関係もありません。結局のところ、彼は貧しくて臆病です。しかし、仕事をしているITマンとして、デジタル通貨をどのように見るか彼の上司のまぶた、これはまだです結局のところ、これは何百万分も上下するビジネスであり、ネギを提供することは非常に重要な使命であると考えることができます。

上司から隠す方法


アンドロイド開発者としてのあなたの仕事はアンドロイドスタジオでコードを書くことです。アンドロイドスタジオのページを離れると、基本的には釣りをしていると考えることができ、アンドロイドスタジオはアイデアに基づいて開発されています。間違いなく最良の選択です。

開発


効果

アイデアの中にツールウィンドウが作成され、通貨情報がツールウィンドウに表示され、30秒ごとに更新されるという効果からわかります。

APIの取得

市場情報のAPIは、非小規模のパブリックAPIを介して取得されます。ドキュメントについては、以下を参照してください:** https://github.com/xiaohao2019/API-docs/blob/master/PublicApi_CN.md **

データ収集

上記のAPIを介して、暗号化された通貨の市場データが定期的に取得され、データがパッケージ化されてEventBusを介して送信され、データが受信されてBitCoinWindowに表示されます。

object TickerNetDataApi {

    private var isStart = false

    private var lastTickerDataList: List<TickerData>? = null

    fun scheduleGetTickerData() {
        if (!isStart) {
            val scheduledExecutorService = Executors.newSingleThreadScheduledExecutor()
            scheduledExecutorService.scheduleAtFixedRate(Runnable {
                getTickerData()
            }, 0, 30, TimeUnit.SECONDS)
            isStart = true
        }
    }

    fun getTickerData() {
        val uri = "https://fxhapi.feixiaohao.com/public/v1/ticker"
        val paratmers: MutableList<NameValuePair> =
            ArrayList()
        paratmers.add(BasicNameValuePair("start", "0"))
        paratmers.add(BasicNameValuePair("limit", "100"))
        try {
            val tickerDataList = makeAPICall(uri, paratmers)
            tickerDataList?.let {
                val lastData = lastTickerDataList
                if (lastData == null || lastData[0].last_updated > it[0].last_updated) {
                    org.greenrobot.eventbus.EventBus.getDefault().post(TickerDataEvent(tickerDataList))
                }
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }

    }

    @Throws(URISyntaxException::class, IOException::class)
    fun makeAPICall(uri: String, parameters: List<NameValuePair?>?): List<TickerData>? {
        var responseContent: String? = ""
        val query = URIBuilder(uri)
        query.addParameters(parameters)
        val client = HttpClients.createDefault()
        val request = HttpGet(query.build())
        request.setHeader(HttpHeaders.ACCEPT, "application/json")
        val response = client.execute(request)
        response.use { response ->
            println(response.statusLine)
            val entity = response.entity
            responseContent = EntityUtils.toString(entity)
            EntityUtils.consume(entity)
        }
        return responseContent?.let {
            GsonUtil.fromJson(it, object : TypeToken<List<TickerData>>() {
            }.type)
        }
    }


}

ToolWindowを作成する

ToolWindowはideのサブウィンドウであり、通常は情報を表示するために使用されます。より一般的なものは、Android開発プロセスのプロジェクト構造ディレクトリです

。ToolWindowの作成方法は非常に簡単です。まず、ToolWindowFactoryから継承されたBitCoinToolWindowFactoryを作成します。

class BitCoinToolWindowFactory : ToolWindowFactory {

    override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) {
        val bitCoinWindow = BitCoinWindow()
        val contentFactory = ContentFactory.SERVICE.getInstance()
        val content =
            contentFactory.createContent(bitCoinWindow.getContent(), "", false)
        toolWindow.contentManager.addContent(content)
        TickerNetDataApi.scheduleGetTickerData()
    }

}

BitCoinWindowは、情報を表示するために使用されるUIです。アイデアプラグインは通常、swingを使用してUIを構築します。ここでは、JTableLayoutを使用してUIテーブルを表示します。

package com.skateboard.coinsplugin.ui

import com.skateboard.coinsplugin.data.TickerDataEvent
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.util.*
import javax.swing.JPanel
import javax.swing.JScrollPane
import javax.swing.JTable
import javax.swing.table.DefaultTableModel
import javax.swing.table.TableColumn

class BitCoinWindow {

    private lateinit var contentPanel: JPanel

    private lateinit var contentScrollPane: JScrollPane

    private lateinit var coinsTable: JTable

    private val columnList =
        listOf("排名", "名称", "最新价格", "24h的成交额", "流通市值", "流通数量", "总发行量", "最大发行量", "1小时涨跌幅", "24小时涨跌幅", "7天涨跌幅", "更新时间")

    init {
        EventBus.getDefault().register(this)
        val tableModel = coinsTable.model as DefaultTableModel
        for (index in columnList.indices) {
            val column = columnList[index]
            tableModel.addColumn(column)
        }
        coinsTable.autoResizeMode = JTable.AUTO_RESIZE_OFF
    }

    fun getContent(): JPanel = contentPanel

   //更新数据
    @Subscribe(threadMode = ThreadMode.MAIN)
    fun onTickerDataEvent(event: TickerDataEvent) {
        if (coinsTable.rowCount <= 0) {
            for (tickerData in event.tickerDataList) {
                val tableModel = coinsTable.model as DefaultTableModel
                tableModel.addRow(tickerData.toArray())
            }
        } else {
            val tableModel = coinsTable.model as DefaultTableModel
            val rowVector = Vector<Vector<String>>()
            for (tickerData in event.tickerDataList) {
                rowVector.add(tickerData.toVector())
            }
            tableModel.setDataVector(rowVector, Vector(columnList))
            coinsTable.repaint()
        }
        fitTableColumns(coinsTable)
    }

   //适配表格宽度
    private fun fitTableColumns(myTable: JTable) {
        val header = myTable.tableHeader
        val rowCount = myTable.rowCount
        val columns = myTable.columnModel.columns
        while (columns.hasMoreElements()) {
            val column = columns.nextElement() as TableColumn
            val col = header.columnModel.getColumnIndex(column.identifier);
            var width = (myTable.tableHeader.defaultRenderer.getTableCellRendererComponent(
                myTable, column.identifier
                , false, false, -1, col
            ).preferredSize.getWidth()).toInt()
            for (row in 0 until rowCount) {
                val preferedWidth = (myTable.getCellRenderer(row, col).getTableCellRendererComponent(
                    myTable,
                    myTable.getValueAt(row, col), false, false, row, col
                ).preferredSize.getWidth()).toInt()
                width = width.coerceAtLeast(preferedWidth)
            }
            header.resizingColumn = column
            column.width = width + myTable.intercellSpacing.width;
        }
    }
}

構成ファイルに登録する

plugin.xmlで作成したばかりのBitCoinToolWindowFactoryを登録します

<idea-plugin>
    <id>org.example.bitcoinplugin</id>
    <name>比特币行情插件</name>
    <vendor email="[email protected]" url="http://www.yourcompany.com">YourCompany</vendor>

    <description><![CDATA[
    Enter short description for your plugin here.<br>
    <em>most HTML tags may be used</em>
    ]]></description>

    <!-- please see https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
         on how to target different products -->
    <depends>com.intellij.modules.platform</depends>

    <extensions defaultExtensionNs="com.intellij">
        <toolWindow id="绿油油" secondary="true" icon="AllIcons.General.Modified" anchor="right"
                    factoryClass="com.skateboard.coinsplugin.ui.BitCoinToolWindowFactory"/>
    </extensions>

    <actions>
        <!-- Add your actions here -->
    </actions>
</idea-plugin>

ここでのToolWindowの名前はGreenOilであり、このプラグインの気質とより調和しているように感じます。

やっと


もちろん、このプラグインは、インターフェイスが少し不安定でタイムリーではないため、実際のディスク追跡ツールとして使用することはできません。これは、アイデアプラグインとして記述された小さなデモです。現実的すぎないでください。プロジェクトアドレスを添付します
** https://github.com/skateboard1991/Chives **

注意を求めて


WeChatパブリックアカウント:スケートボード上の古いヒ素
画像

おすすめ

転載: blog.csdn.net/skateboard1/article/details/113773712