微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Kotlin Synthetic

如何解决使用 Kotlin Synthetic

当我尝试从 DialogFragment 访问布局中的元素时,我收到 NullPointerException。我已经检查过,如果我在同一个 DialogFragment 中调用 getView() 结果是“null”。

先谢谢你!

这是调用提交 FragmentDialog "NewPOIDialog" 的 Activity

    class MainActivity : AppCompatActivity() {

    //Variables for Location service
    private var hasGps: Boolean = false
    private var hasNetwork: Boolean = false
    private var locationGps: Location? = null
    private var locationNetwork: Location? = null

    private companion object {
        private const val TAG = "MainActivity"
    }

    private lateinit var auth: FirebaseAuth
    private lateinit var permissionsRequestor: PermissionsRequestor
    private lateinit var mapView: MapView
    private lateinit var mapActivity: MapActivity

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)

        //Get the authorisation from Firebase
        auth = Firebase.auth

        Log.d("","HERE SDK version: " + SDKBuildinformation.sdkVersion().versionName)

        // Get a MapView instance from layout.
        mapView = findViewById(R.id.map_view)
        mapView.onCreate(savedInstanceState)

        location()
        handleAndroidPermissions()
    }

    fun searchInMap(view: View?) {

        NewPOIDialog().show(supportFragmentManager,"test")
    }

    fun clearRouteButtonClicked(view: View?) {
        mapActivity.clearMap()
    }

    fun clearWaypoints(view: View?) {
        mapActivity.clearWaypoints()
    }


    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.menu_main,menu)
        return true //we provided the menu that needs to be inflated
    }

    override fun onoptionsItemSelected(item: MenuItem): Boolean {
        if (item.itemId == R.id.milogout) {
            Log.i(TAG,"logout")
            //logout the user
            auth.signOut()
            LoginManager.getInstance().logout()
            val logoutIntent = Intent(this,LoginActivity::class.java)

            logoutIntent.flags =
                Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK //Clear the backstack
            startActivity(logoutIntent)
        }
        return super.onoptionsItemSelected(item)
    }

    private fun handleAndroidPermissions() {
        permissionsRequestor = PermissionsRequestor(this)
        permissionsRequestor.request(object : PermissionsRequestor.ResultListener {
            override fun permissionsGranted() {
                loadMapScene()
            }

            override fun permissionsDenied() {
                Log.e(TAG,"Permissions denied by user.")
            }
        })
    }

    override fun onRequestPermissionsResult(
        requestCode: Int,permissions: Array<out String>,grantResults: IntArray
    ) {
        permissionsRequestor.onRequestPermissionsResult(requestCode,grantResults)
    }

    private fun loadMapScene() {

        mapView.mapScene.loadScene(MapScheme.norMAL_DAY,object : MapScene.LoadSceneCallback {
            override fun onLoadScene(p0: MapError?) {
                if (p0 == null) {

                    mapActivity = MapActivity(this@MainActivity,mapView,supportFragmentManager)

                    mapView.camera.lookAt(
                        GeoCoordinates(53.57407651646072,-1.525012498490556),100000.0
                    )
                } else {
                    Log.d("TAG","onLoadScene Failed: $p0")
                }
            }
        })

    }

    fun location() {

        var locationManager: LocationManager = getSystemService(LOCATION_SERVICE) as LocationManager

        hasGps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
        hasNetwork = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)

        if (hasGps || hasNetwork) {
            if (hasGps) {
                Log.d(TAG,"hasGPS")
                if (ActivityCompat.checkSelfPermission(
                        this,Manifest.permission.ACCESS_FINE_LOCATION
                    ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                        this,Manifest.permission.ACCESS_COARSE_LOCATION
                    ) != PackageManager.PERMISSION_GRANTED
                ) {
                    // Todo: Consider calling
                    //    ActivityCompat#requestPermissions
                    // here to request the missing permissions,and then overriding
                    //   public void onRequestPermissionsResult(int requestCode,String[] permissions,//                                          int[] grantResults)
                    // to handle the case where the user grants the permission. See the documentation
                    // for ActivityCompat#requestPermissions for more details.
                    //return

                    handleAndroidPermissions()
                }
                locationManager.requestLocationUpdates(
                    LocationManager.GPS_PROVIDER,1000,0f,object :
                        LocationListener {
                        override fun onLocationChanged(p0: Location?) {
                            if (p0 != null) {
                                locationNetwork = p0
                            }
                        }

                        override fun onStatusChanged(p0: String?,p1: Int,p2: Bundle?) {
                        }

                        override fun onProviderEnabled(p0: String?) {
                        }

                        override fun onProviderdisabled(p0: String?) {
                        }
                    })

                val localGpsLocation =
                    locationManager.getLastKNownLocation(LocationManager.GPS_PROVIDER)
                if (localGpsLocation != null) {
                    locationGps = localGpsLocation
                }
            }


            ///////////////////////////////////////////////////////////////////////////

            if (hasNetwork) {
                Log.d(TAG,"hasGPS")
                locationManager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER,p2: Bundle?) {
                        }

                        override fun onProviderEnabled(p0: String?) {
                        }

                        override fun onProviderdisabled(p0: String?) {
                        }
                    })

                val localGpsLocation =
                    locationManager.getLastKNownLocation(LocationManager.GPS_PROVIDER)
                if (localGpsLocation != null) {
                    locationGps = localGpsLocation
                }

                val localNetworkLocation =
                    locationManager.getLastKNownLocation(LocationManager.NETWORK_PROVIDER)
                if (localNetworkLocation != null) {
                    locationNetwork = localNetworkLocation
                }

                if (locationGps != null && locationNetwork != null) {
                    if (locationGps!!.accuracy!! > locationNetwork!!.accuracy!!) { //The lower number is the accurate location
                        Log.d(TAG,"Network Latitude : ${locationNetwork!!.latitude}")
                        Log.d(TAG,"Network Longitude : ${locationNetwork!!.longitude}")

                        latitude_txt.text = "Latitude : ${locationNetwork!!.latitude} - Network"
                        longitude_txt.text = "Longitude : ${locationNetwork!!.longitude} - Network"

                        latitude_txt.text = "Latitude : ${locationGps!!.latitude} - Gps"
                        longitude_txt.text = "Longitude : ${locationGps!!.longitude} - Gps"


                    } else {
                        Log.d(TAG,"Gps Latitude : ${locationGps!!.latitude}")
                        Log.d(TAG,"Gps Longitude : ${locationGps!!.longitude}")

                        latitude_txt.text = "Latitude : ${locationGps!!.latitude} - Gps"
                        longitude_txt.text = "Longitude : ${locationGps!!.longitude} - Gps"
                    }
                }
            }


//            if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) &&
//                this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)
//            ) {
//                locationManager.requestLocationUpdates(
//                    LocationManager.GPS_PROVIDER,//                    LOCATION_UPDATE_INTERVAL_IN_MS,//                    1,//                    this
//                );
//            } else if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
//                locationManager.requestLocationUpdates(
//                    LocationManager.NETWORK_PROVIDER,//                    this
//                );
//            } else {
//                Log.d(TAG,"Positioning not possible.");
//                // ...
//            }

        }

    }

}

NewPOIDialog

该视图最初如下调用,我在收到 StackOverFlowError 时更改了它: var view = layoutInflater.inflate(R.layout.activity_new_poi_dialog,null)

    class NewPOIDialog : DialogFragment() {



    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

        var view = LayoutInflater.from(context).inflate(R.layout.activity_new_poi_dialog,null)
        var dialog = AlertDialog.Builder(requireContext())
            .setMessage("TITLE")
            .setView(view)
            .setPositiveButton("ok") { _,_ -> }
            .setNegativeButton("Cancel") { _,_ -> }
            .create()


        //THIS LINE WORKS FINE
        var coordinatesvalue = view.findViewById<TextView>(R.id.coordinates_value)
        coordinatesvalue.text =
            "${arguments?.getDouble("latitude")}\n,${arguments?.getDouble("longitude")}"

        //THIS CAUSES A NULL POINTER EXCEPTION
        coordinates_value.text = "TEST"


        return dialog
    }
}

我得到的异常:

    D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.robin.socialparking,PID: 19187
    java.lang.NullPointerException: coordinates_value must not be null
        at com.robin.socialparking.dialog.NewPOIDialog.onCreateDialog(NewPOIDialog.kt:54)
        at androidx.fragment.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:380)
        at androidx.fragment.app.Fragment.performGetLayoutInflater(Fragment.java:1412)
        at androidx.fragment.app.FragmentManagerImpl.movetoState(FragmentManagerImpl.java:881)
        at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
        at androidx.fragment.app.FragmentManagerImpl.movetoState(FragmentManagerImpl.java:1303)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
        at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
        at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7050)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
I/Process: Sending signal. PID: 19187 SIG: 9

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?