2017-07-15 82 views
-2

我想實現用kotlin編寫的Facebook登錄。下面的代碼工作正常:無法編譯Kotlin代碼

包social.social

import android.content.Intent 
import android.support.v7.app.AppCompatActivity 
import android.os.Bundle 
import com.facebook.* 
import com.facebook.login.LoginResult 
import com.facebook.login.LoginManager 
import com.facebook.login.widget.LoginButton 
import org.json.JSONObject 
import java.util.* 


class MainActivity : AppCompatActivity() { 
    private var callbackManager: CallbackManager? = null 

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

     callbackManager = CallbackManager.Factory.create() 
     var loginBtn: LoginButton = findViewById(R.id.login_button) as LoginButton 
     loginBtn.setReadPermissions(Arrays.asList("public_profile","email","user_photos")) 
     loginBtn.registerCallback(callbackManager, object : FacebookCallback<LoginResult> { 
      override fun onCancel() { 
       TODO("not implemented") //To change body of created functions use File | Settings | File Templates. 
      } 


      override fun onError(error: FacebookException) { 
       print("error" +error.message) 
      } 

      override fun onSuccess(result: LoginResult) { 
       GraphRequest.newMeRequest(result.accessToken, GraphRequest.GraphJSONObjectCallback { 
        obj: JSONObject, response: GraphResponse -> 
        println(obj.toString()) 
        println(obj.getString("email"))}) 
       println("successful" + result.accessToken) 
      } 
     }) 
    } 



    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 
     super.onActivityResult(requestCode, resultCode, data) 
     callbackManager!!.onActivityResult(requestCode, resultCode, data) 
    } 

} 

我嘗試添加參數GraphRequest所以我需要將它存儲到一個變量,像這樣:

val request: GraphRequest = GraphRequest.newMeRequest(result.accessToken, GraphRequest.GraphJSONObjectCallback { 
        obj: JSONObject, response: GraphResponse -> 
        println(obj.toString()) 
        println(obj.getString("email"))}) 
       request.executeAsync() 

但現在它編譯失敗

錯誤:執行任務':app:compileDebugJavaWithJavac'失敗。

Unable to read class file: 'C:\projects\social\app\build\tmp\kotlin-classes\debug\social\social\MainActivity$onCreate$1$onSuccess$1.class'

回答

0

我是一個初學者科特林但似乎科特林代碼的圖形要求創造了一個彙編error.So,不如把它寫在Java和它轉換爲科特林和重建+清潔你的代碼或者更新Kotlin插件。

+0

嗯..終於修好了。原來我只需要運行gradle clean。 –

+0

很高興聽到@ Karlo – Haileapp