【问题标题】:Many errors when there should be none in kotlin [closed]kotlin中不应该出现的许多错误[关闭]
【发布时间】:2021-02-25 14:31:25
【问题描述】:

我对 android studio 和 kotlin 有点陌生,我正在制作一个消息传递应用程序。昨天我的代码正在运行,但是今天当我打开我的项目时,我遇到了这些对我来说根本没有任何意义的错误。我整天都在尝试解决这些问题,但没有运气 如果有人可以提供帮助,将不胜感激。

这是我的 MainActivity 文件

quxtar.com

import android.app.Activity
import android.content.ClipData
import android.content.ContentProvider
import android.content.ContentResolver
import android.content.Intent
import android.graphics.drawable.BitmapDrawable
import android.net.Uri
import android.provider.MediaStore.Images.Media.getBitmap
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.MediaStore
import android.util.Log
import android.widget.Button
import android.widget.ImageButton
import android.widget.TextView
import android.widget.Toast
import com.google.firebase.auth.FirebaseAuth


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val emailui = findViewById<TextView>(R.id.email_register_scr)
        val passwordui = findViewById<TextView>(R.id.password_register_scr)
        val registerbtn = findViewById<Button>(R.id.regidterbtn_register_scr)
        val loginbtn = findViewById<TextView>(R.id.login_register_scr)

        var email = emailui.text.toString()
        var password = passwordui.text.toString()

        val selectbtn = findViewById<ImageButton>(R.id.selectbutton_register)

        var selectPhotoURI: Uri? = null

        selectbtn.setOnClickListener(){


            val intent = Intent(Intent.ACTION_PICK)
            intent.type = "image/*"

            println("image selecting")

            //compress
        }

        fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

            super.onActivityResult(requestCode, resultCode, data)
            if (requestCode == 0 && resultCode == Activity.RESULT_OK && data != null){

                //check selected image

                selectPhotoURI = data.data

                println("selectedphoto")
                println(selectPhotoURI)

                val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, selectPhotoURI);

                val bitmapDrawable = BitmapDrawable(bitmap)

                selectbtn.setBackgroundDrawable(bitmapDrawable)

            }

        }

    }

    registerbtn.setOnClickListener {
        performRegister()
    }

    loginbtn.setOnClickListener{
        println("Try to show log in activity")
        //launch login

        val intent = Intent(this, LogInActivity:: class.java)
        startActivity(intent)

    }
}

private fun performRegister(){

    val emailui = findViewById<TextView>(R.id.email_register_scr)
    val passwordui = findViewById<TextView>(R.id.password_register_scr)
    val email = emailui.text.toString()
    val password = passwordui.text.toString()

    if (email.isEmpty() or  password.isEmpty()){
        Toast.makeText(this, "please enter a mail/password", Toast.LENGTH_SHORT).show()
        return
    }

    println("Mail: $email");
    println("Password: $password");

    //Fire base authentication to create user with mail and password
    FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener {
                if (!it.isSuccessful) return@addOnCompleteListener
                // Sign in success, update UI with the signed-in user's information
                println(it.result?.user?.uid)

            }
            .addOnFailureListener() {
                Toast.makeText(this, "Failed to create user: ${it.message}", Toast.LENGTH_SHORT).show()

                Log.d("Main", "failed to create user: ${it.message}}")

            }
}

这些都是错误

 e: C:\Users\hecto\AndroidStudioProjects\Hm\app\src\main\java\quxtar\com\MainActivity.kt: (78, 5): Expecting member declaration

e: C:\Users\hecto\AndroidStudioProjects\Hm\app\src\main\java\quxtar\com\MainActivity.kt: (78, 16): Expecting member declaration

e: C:\Users\hecto\AndroidStudioProjects\Hm\app\src\main\java\quxtar\com\MainActivity.kt: (78, 17): Expecting member declaration

e: C:\Users\hecto\AndroidStudioProjects\Hm\app\src\main\java\quxtar\com\MainActivity.kt: (78, 36): Conflicting overloads: public final fun <no name provided>(): Unit defined in quxtar.com.MainActivity, public final fun <no name provided>(): Unit defined in quxtar.com.MainActivity

e: C:\Users\hecto\AndroidStudioProjects\Hm\app\src\main\java\quxtar\com\MainActivity.kt: (78, 36): Function declaration must have a name

e: C:\Users\hecto\AndroidStudioProjects\Hm\app\src\main\java\quxtar\com\MainActivity.kt: (82, 32): Conflicting overloads: public final fun <no name provided>(): Unit defined in quxtar.com.MainActivity, public final fun <no name provided>(): Unit defined in quxtar.com.MainActivity

e: C:\Users\hecto\AndroidStudioProjects\Hm\app\src\main\java\quxtar\com\MainActivity.kt: (82, 32): Function declaration must have a name

e: C:\Users\hecto\AndroidStudioProjects\Hm\app\src\main\java\quxtar\com\MainActivity.kt: (95, 22): Unresolved reference: findViewById

e: C:\Users\hecto\AndroidStudioProjects\Hm\app\src\main\java\quxtar\com\MainActivity.kt: (100, 24): 'this' is not defined in this context

e: C:\Users\hecto\AndroidStudioProjects\Hm\app\src\main\java\quxtar\com\MainActivity.kt: (117, 32): 'this' is not defined in this context

【问题讨论】:

  • 好吧,我很愚蠢,我把括号放在正确的位置 XD
  • Yesterday my code was working but today when i opened my project i got these errors 这绝不是真的真的

标签: android firebase kotlin


【解决方案1】:

你错过了第二个括号。下面的代码应该不在 onCreate 方法中。

fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == 0 && resultCode == Activity.RESULT_OK && data != null){

            //check selected image

            selectPhotoURI = data.data

            println("selectedphoto")
            println(selectPhotoURI)

            val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, selectPhotoURI);

            val bitmapDrawable = BitmapDrawable(bitmap)

            selectbtn.setBackgroundDrawable(bitmapDrawable)

        }

    }

而且这个点击监听器应该在 onCreate 里面。

 registerbtn.setOnClickListener {
    performRegister()
}

loginbtn.setOnClickListener{
    println("Try to show log in activity")
    //launch login

    val intent = Intent(this, LogInActivity:: class.java)
    startActivity(intent)

}

最后你应该把缺少的括号放在“performRegister()”方法之后。

我没有足够的声誉来发表评论,这就是发布答案的原因。

【讨论】:

    【解决方案2】:

    您没有为第 1 行定义的函数提供任何名称。 82 在你的 MainActivity.kt

    【讨论】:

      【解决方案3】:

      这部分代码放错了:

      registerbtn.setOnClickListener {
          performRegister()
      }
      
      loginbtn.setOnClickListener{
          println("Try to show log in activity")
          //launch login
      
          val intent = Intent(this, LogInActivity:: class.java)
          startActivity(intent)
      
      }
      

      您的活动的正确版本:

      quxtar.com
      
      import android.app.Activity
      import android.content.ClipData
      import android.content.ContentProvider
      import android.content.ContentResolver
      import android.content.Intent
      import android.graphics.drawable.BitmapDrawable
      import android.net.Uri
      import android.provider.MediaStore.Images.Media.getBitmap
      import androidx.appcompat.app.AppCompatActivity
      import android.os.Bundle
      import android.provider.MediaStore
      import android.util.Log
      import android.widget.Button
      import android.widget.ImageButton
      import android.widget.TextView
      import android.widget.Toast
      import com.google.firebase.auth.FirebaseAuth
      
      
      class MainActivity : AppCompatActivity() {
          override fun onCreate(savedInstanceState: Bundle?) {
              super.onCreate(savedInstanceState)
              setContentView(R.layout.activity_main)
      
              val emailui = findViewById<TextView>(R.id.email_register_scr)
              val passwordui = findViewById<TextView>(R.id.password_register_scr)
              val registerbtn = findViewById<Button>(R.id.regidterbtn_register_scr)
              val loginbtn = findViewById<TextView>(R.id.login_register_scr)
      
              var email = emailui.text.toString()
              var password = passwordui.text.toString()
      
              val selectbtn = findViewById<ImageButton>(R.id.selectbutton_register)
      
              var selectPhotoURI: Uri? = null
      
              selectbtn.setOnClickListener(){
      
      
                  val intent = Intent(Intent.ACTION_PICK)
                  intent.type = "image/*"
      
                  println("image selecting")
      
                  //compress
              }
      
              fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
      
                  super.onActivityResult(requestCode, resultCode, data)
                  if (requestCode == 0 && resultCode == Activity.RESULT_OK && data != null){
      
                      //check selected image
      
                      selectPhotoURI = data.data
      
                      println("selectedphoto")
                      println(selectPhotoURI)
      
                      val bitmap = MediaStore.Images.Media.getBitmap(contentResolver, selectPhotoURI);
      
                      val bitmapDrawable = BitmapDrawable(bitmap)
      
                      selectbtn.setBackgroundDrawable(bitmapDrawable)
      
                  }
      
              }
              
              registerbtn.setOnClickListener {
                  performRegister()
              }
      
              loginbtn.setOnClickListener{
                  println("Try to show log in activity")
                  //launch login
      
                  val intent = Intent(this, LogInActivity:: class.java)
                  startActivity(intent)
      
              }
      
          }
      
      }
      
      private fun performRegister(){
      
          val emailui = findViewById<TextView>(R.id.email_register_scr)
          val passwordui = findViewById<TextView>(R.id.password_register_scr)
          val email = emailui.text.toString()
          val password = passwordui.text.toString()
      
          if (email.isEmpty() or  password.isEmpty()){
              Toast.makeText(this, "please enter a mail/password", Toast.LENGTH_SHORT).show()
              return
          }
      
          println("Mail: $email");
          println("Password: $password");
      
          //Fire base authentication to create user with mail and password
          FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
                  .addOnCompleteListener {
                      if (!it.isSuccessful) return@addOnCompleteListener
                      // Sign in success, update UI with the signed-in user's information
                      println(it.result?.user?.uid)
      
                  }
                  .addOnFailureListener() {
                      Toast.makeText(this, "Failed to create user: ${it.message}", Toast.LENGTH_SHORT).show()
      
                      Log.d("Main", "failed to create user: ${it.message}}")
      
                  }
      }
      

      【讨论】:

      • 谢谢我在发布问题后就看到了,我很傻XD
      【解决方案4】:
      1. onActivityResult 方法不建议放在onCreate 方法内部。

      2. 某个对象的声明是错误的。因此,出现此错误(期望成员声明)、(未解决的引用:findViewById)和(函数声明必须有名称)。确保以OOP 的方式进行操作,您要调用的内容为publicglobal 而不是privateprotected

      3. 'this' is not defined in this context 改用特定的this@MainActivity

      编码愉快!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-20
        • 2012-07-19
        • 1970-01-01
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        • 2019-09-03
        • 1970-01-01
        相关资源
        最近更新 更多