專案後門程式

      在〈專案後門程式〉中尚無留言

一個專案,通常會有些後門。這些後門常有不勘入耳的原因(防止業主過河拆橋),也有很富麗堂皇的理由(防止被入侵時的緊急關閉)。不論你是正派還是反派,一定都會有後門。本篇不會描述整個後門的過程,僅說明其中一部份,就是資料庫的更改。

下圖為本例之圖示,當按下某一專案的Switch, 那個專案立即全面停用

MainActivity.kt

import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.view.View
import android.widget.AdapterView
import android.widget.Switch
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import java.lang.ref.WeakReference
import java.sql.DriverManager

val LIST_REFRESH = 10000

class MainActivity : AppCompatActivity() {
var listViewData=ArrayList<Map<String, String>>()
var listViewAdapter:ViewAdapter ? =null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Class.forName("com.mysql.jdbc.Driver")
listViewAdapter= ViewAdapter(this, listViewData)
listView.adapter=listViewAdapter
listView.setOnItemClickListener(listViewClick)
Thread{
val conn=DriverManager.getConnection(G.connStr, G.dbAccount, G.dbPassword)
var cmd="select * from project"
var stm=conn.createStatement()
var rs=stm.executeQuery(cmd)
while (rs.next()){
var map=HashMap<String, String>()
map.put("id", rs.getString(1))
map.put("project", rs.getString(2))
map.put("enabled", rs.getString(3))
listViewData.add(map)
}
rs.close()
conn.close()
handler.sendEmptyMessage(LIST_REFRESH)
}.start()
}

var listViewClick = object : AdapterView.OnItemClickListener {
override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
if (view ==null) return //底下的view及sw就不用再加 "?"了
val sw = view.findViewById<Switch>(R.id.swEnabled)
sw.isChecked = !sw.isChecked
val id = view.findViewById<TextView>(R.id.txtId)?.text.toString().toInt()
val enabled=if(sw.isChecked)1 else 0
Thread {
val conn = DriverManager.getConnection(G.connStr, G.dbAccount, G.dbPassword)
var cmd = "update project set enabled=? where id=?"
var stm=conn.prepareStatement(cmd)
stm.setInt(1, enabled)
stm.setInt(2, id)
stm.execute()
conn.close()
}.start()
}
}
val handler = Handler(
Looper.myLooper()!!, WeakReference(Handler.Callback {
when (it.what) {
LIST_REFRESH -> {
listViewAdapter?.notifyDataSetChanged()
}
}
false
}).get()
)
}

ViewAdapter.kt

🔒 更多內容,請登入會員繼續閱讀。

立即登入

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *