Android Studio 插件开发3、将数据存储到Service

密码等数据放在代码里面 是看起来不太可行的。第一步优化可以先从一点一点开始

新建一个数据bean 存放这些密码。虽然密码还在这个地方。那最起码他有了动态表变化的能力

data class TrelloState(
    var apiKey:String="xxx",
    var token:String="xxx",
    var fromListId:String="xx",
    var toListId:String="xx",
)

新建package service 和 action同级

 

新建 

TrelloService

关注这个类就行了

package com.anguomob.anguo.services

import com.anguomob.anguo.actions.trello.TrelloState
import com.intellij.credentialStore.CredentialAttributes
import com.intellij.credentialStore.Credentials
import com.intellij.ide.passwordSafe.PasswordSafe
import com.intellij.openapi.components.PersistentStateComponent
import com.intellij.openapi.components.Service
import com.intellij.openapi.components.State
import com.intellij.openapi.components.Storage
import com.intellij.openapi.components.service
import com.intellij.openapi.project.Project

@Service
@State(name = "TrelloConfiguration", storages = [Storage(value = "trelloConfiguration.xml")])
class TrelloService : PersistentStateComponent<TrelloState> {

    private var trelloStatus: TrelloState = TrelloState()

    override fun getState(): TrelloState = trelloStatus

    override fun loadState(state: TrelloState) {
        trelloStatus = state
    }

    companion object {
        fun getInstance(project: Project): TrelloService = project.service()
    }
}

需要添加到plugins.xml当中

 

    <extensions defaultExtensionNs="com.intellij">
        <projectService serviceImplementation="com.anguomob.anguo.services.TrelloService"/>

    </extensions>

然后针对代码做下优化  

TrelloActionPresenter 就是多价格一个参数 state
package com.anguomob.anguo.actions.trello

import com.intellij.notification.NotificationDisplayType
import com.intellij.notification.NotificationGroup
import com.intellij.notification.NotificationType
import org.jetbrains.kotlin.idea.caches.project.NotUnderContentRootModuleInfo.project

interface TrelloActionPresenter {
    fun loadCards()
    fun moveCard(card: Card)
}

class TrelloActionPresenterImp(
    private val view: TrelloFromView,
    private val repository: TrelloRepository,
    private val state: TrelloState
    ) :
    TrelloActionPresenter {


    override fun loadCards() {
        repository.getCards(state.fromListId, state.apiKey, state.token)
            .subscribe({ cards -> view.showCards(cards) }, { error -> view.error(error) })
    }

    override fun moveCard(card: Card) {
        repository.moveCard(card.id, state.toListId, state.apiKey,state. token)
            .subscribe({ view.success(card) }, { error -> view.error(error) })
    }
}

同理。

TrelloInjector 也会发生一些变化
package com.anguomob.anguo.actions.trello

import com.anguomob.anguo.services.TrelloService
import com.intellij.openapi.project.Project
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit

interface TrelloInjector {
    val trelloRepository: TrelloRepository
    val trelloServiceApi: TrelloServiceApi
    fun trelloState(project: Project): TrelloState
    fun trelloActionPresenter(view: TrelloFromView, project: Project): TrelloActionPresenter
}

class TrelloInjectorImp : TrelloInjector {
    override val trelloRepository: TrelloRepository by lazy {
        TrelloRepositoryImp(trelloServiceApi)
    }
    override val trelloServiceApi: TrelloServiceApi by lazy {

        val httpLoggingInterceptor = HttpLoggingInterceptor()
        httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
        val httpClient = OkHttpClient().newBuilder().addInterceptor(httpLoggingInterceptor)
            .connectTimeout(30 * 1000, TimeUnit.MILLISECONDS)
            .readTimeout(20 * 1000, TimeUnit.MILLISECONDS).build()



        //查看网络访问日志
        Retrofit.Builder()
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())

            .addConverterFactory(GsonConverterFactory.create())

            .baseUrl("https://api.trello.com/")
            .client(httpClient)
            .build()

            .create(TrelloServiceApi::class.java)
    }

    override fun trelloState(project: Project): TrelloState {
        return TrelloService.getInstance(project).state
    }

    override fun trelloActionPresenter(view: TrelloFromView, project: Project): TrelloActionPresenter {
        return TrelloActionPresenterImp(view, trelloRepository, trelloState(project))
    }
}

但是其目的与插件开发2效果一致 就不做截图了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值