我们已经创建了一个自定义警报对话框,该对话框通过将其转换为Kotlin在Java项目中使用。java.lang.IllegalStateException下面发布的错误:findViewById(R.id.btnYES)不能为null
错误原因使我们难以理解!我们查看了许多帖子,并尝试了一些没有结果的帖子。Activity结构如下:PageTwoActivity具有自己的XML文件,并带有两个按钮。自定义对话框具有其自己的xml文件。这是PageTwoActivity代码。没有两个用于PageTwoActivity的按钮,名称冲突
import android.app.Dialog
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
class PageTwoActivity : AppCompatActivity() {
internal lateinit var btnBACK: Button
internal lateinit var btnDIALOG: Button
internal lateinit var btnYES: Button
internal lateinit var btnNO: Button
internal lateinit var etStudentName:EditText
var EnteredText: String = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_page_two)
btnBACK = findViewById(R.id.btnBACK)
btnDIALOG = findViewById(R.id.btnDIALOG)
btnYES = findViewById(R.id.btnYES)
btnNO = findViewById(R.id.btnNO)
etStudentName = findViewById(R.id.etStudentName)
addListenerOnButtonBACK()
addListenerOnButtonDIALOG()
Toast.makeText(this@PageTwoActivity, "You are on …Run Code Online (Sandbox Code Playgroud) 在JAVA中,我们可以关闭该应用程序。我们试图与Kotlin一起开发技能,并感到我们正在使用正确的语法关闭该应用程序。问题是,仅当您在转到第二页并返回MainActivity之前关闭应用程序时,该代码才起作用,这是下面的启动器活动代码
fun onTV(view: View){
exitProcess()
}
private fun exitProcess() {
//finish()
System.exit(-1)
}
Run Code Online (Sandbox Code Playgroud)
如果首先选择finish和System.exit(-1),则它们都可以工作,而无需导航到PageTwoActivity
onTV是TextView的onClick属性。我的猜测是我们需要清除Stack buy设置标志,所以问题是Kotlin的语法是什么?记住,我们在启动器页面MainActivity上。我们需要结果的意图吗?
好吧,我尝试了此代码,没有任何改善
val intent = Intent(context, MainActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOIntent.FLAG_ACTIVITY_NEW_TASK
finish()
Run Code Online (Sandbox Code Playgroud)
我们靠近的是现在的代码,问题仍然是,如果您不导航到PageTwo并在启动后立即单击按钮以关闭应用程序,则它将关闭应用程序
fun onTV(view: View){
onBYE()
}
fun onBYE() {
exitProcess(-1)
}
Run Code Online (Sandbox Code Playgroud)
所以我想问题是执行onBYE时如何从堆栈中清除PageTwo?
我因为对我的数据库名称进行硬编码而受到了一位拥有多年经验的专业开发人员的惩罚,
好吧,我明白了,我们有时会带着不好的编码习惯,直到我们学会了正确的编码方法,
我终于学会了使用插值字符串(个人认为不漂亮)
我的问题涉及下面发布的两个 Sub,首先运行 GetDB,然后从 GetDB 调用 HowMany
抱歉,我的原因很明显,我认为 NewWord.db 在 GetDB 中声明,并在 HowMany 中工作,没有相同的结构 只是一个疯狂的猜测
注意 NO $或 HowMany 中使用的引用
两个 Sub 都会产生所需的结果
问题是为什么两个语句不需要以相同的方式构建?
Public Sub HowMany()
'Dim dbName As String = "NewWord.db"
Dim conn As New SQLiteConnection("Data Source ='{NewWord.db}';Version=3;")
tot = dgvOne.RowCount ' - 1
tbMessage.Text = "DGV has " & tot.ToString & " Rows"
End Sub
Private Sub GetDB()
Dim str2 As String
Dim s1 As Integer
'Dim dbName As String = "NewWord.db"
Using conn As …Run Code Online (Sandbox Code Playgroud) 我们正在尝试创建一个Snackbar。Java应用程序中的代码已使用Android Studio中的Java到Kotlin转换器进行了转换。接下来,我们在许多不同的网站上查看了各种示例,甚至尝试实现《 Kotlin编程指南》一书中的代码。我们将在下面发布所有非工作示例。我们的问题是如何创建适当的语法来显示Snackbar?我们想单击一个带有onClick = onSNACK的btnSNACK以显示Snackbar
这是我们真的要使用的Java到Kotlin的转换器代码
fun onSNACK(view: View){
//Snackbar(view)
//val snackbar = Snackbar(view, "Permission Granted", Snackbar.LENGTH_LONG).setAction("Action", null).show()
snackbar.make(view, "Replace with your own action",
snackbar.LENGTH_LONG).setAction("Action", null).show()
snackbar.setActionTextColor(Color.BLUE)
val snackbarView = snackbar.getView()
snackbarView.setBackgroundColor(Color.LTGRAY)
val textView =
snackbarView.findViewById(android.support.design.R.id.snackbar_text)
textView.setTextColor(Color.BLUE)
textView.setTextSize(28f)
snackbar.show()
}
Run Code Online (Sandbox Code Playgroud)
下次尝试使用此代码
class Snackbar{
object LENGTH_LONG {
}
fun show() {
}
}
fun onSNACK(view: View){
snackbar = Snackbar.make(this, "Welcome to Android Teachers..!!",
Snackbar.LENGTH_LONG)
snackbar.show()
}
Run Code Online (Sandbox Code Playgroud)
我们的布局是具有Snackbar的Activity的RelativeLayout(RL)
class Snackbar(view: View?): Any() {
object LENGTH_SHORT {}
fun View.snack(message: String, length: Int = …Run Code Online (Sandbox Code Playgroud) 我们正在尝试设置以下代码中声明的全局变量的值
class MyApplication: Application() {
var globalVar = 2
Run Code Online (Sandbox Code Playgroud)
}
现在,我们有一个主活动,该活动具有一个名为etPerson的编辑文本,我们想在etPerson中输入一个值,并将输入的值设置为等于globalVar
为什么,因为我们想在另一个Activity中调用数据库函数,
这是代码拨打数据库
var mApp = MyApplication()
var intGlobalVar = mApp.globalVar
println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@ globalINT = "+intGlobalVar)
var ITEM = db.getItem(intGlobalVar)
println("%%%%%%%%%%%%%%%%%% ITEM "+ITEM?.id+" name "+ITEM?.name)
Run Code Online (Sandbox Code Playgroud)
为了清楚起见,这里是数据库功能
fun getItem(id: Int): Contact? {
val db = this.writableDatabase
val selectQuery = "SELECT * FROM $TABLE_NAME WHERE $colId = ?"
db.rawQuery(selectQuery, arrayOf(id.toString())).use {
// .use requires API 16
if (it.moveToFirst()) {
val result = Contact(0)
result.id = it.getInt(it.getColumnIndex(colId))
result.name = it.getString(it.getColumnIndex(colName))
return result
}
} …Run Code Online (Sandbox Code Playgroud) 我们不喜欢Toast,但我们将它包含在我们的DBHelper类中以了解数据库是否已创建
YES Logcat指向Toast而其他涉及的活动
首先错误没有注释掉Toast
这是错误
Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
Run Code Online (Sandbox Code Playgroud)
这是对DBHelper的调用
btnSaveItemData.setOnClickListener {
if (etItemData.text.toString().equals("")) {
message("ENTER Item")
etItemData.requestFocus()
return@setOnClickListener
}
if (etItemFK.text.toString().equals("") || etItemFK.text.toString().toInt() == 0) {
message("ENTER foreign key")
etItemFK.requestFocus()
return@setOnClickListener
}
val dbManager = DBHelper(this)
val values = ContentValues()
values.put("item", etItemData.text.toString())
values.put("fkI",Integer.parseInt(etItemFK.text.toString()))
if (idI == 0) {
val mID = dbManager.insertITEM(values)
if (mID > 0) {
tvMsg.setTextColor(Color.RED)
message("ADDED Item successfully")
//Timer().schedule(800){
nextACTIVITY()
//}
} else {
message("Failed to add Item") …Run Code Online (Sandbox Code Playgroud) 我正在使用 VS 2019 CE v 16.64 和 Net Framework 4.8.03761
我有两个项目 TestSql 和 Notebook 首先构建了 TestSql,安装的唯一包是 System Data SQLite Core
在对 VS 2019 进行了一些更新之后,我构建了 Notebook 我只安装了 System Data SQLite Core 和 WeCantSpell.Hunspell
当我查看笔记本的 packages.config 文件夹时,我看到安装了以下软件包,并且想要更新
系统缓冲区
系统内存
系统数字向量
系统运行时编译服务不安全
那么如果我没有安装它们,只需卸载它们这不起作用?
另一个问题是“如果它没有损坏,请不要修复它”, TestSql 项目在解决方案探索的底部有packages.config 文件夹,
当我看到短语“使用的好处”时,我做了从packages.config 迁移到PackageReference PackageReference 我早该知道这可能是个坏主意
优点链接
所以问题是两个
如何将我的packages.config文件夹恢复到原来的位置?(参见屏幕截图)
或者我的强迫症是否使我对“包参考”确实是更好的设计的现实感感到困惑?
如何卸载我没有安装的软件包?是的,我尝试过管理 NuGet 包
