加载 Activity 时崩溃

时间:2021-05-30 16:54:20

标签: java android kotlin

我在下面的代码中有一个错误,此代码必须显示一个元素列表,但是当它执行该代码时,我在线上有一个错误:val bmp: Bitmap = BitmapFactory.decodeStream(url.openConnection( ).getInputStream()) 这只发生在这个视图中,我声明 mylistaadapter 对象也在其他视图中使用,这是什么原因?

错误:

at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:248)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:211)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:30)

Activity.kt

class VideoActivity : AppCompatActivity() {


    private lateinit var db: FirebaseFirestore
    private lateinit var fusedLocationClient: FusedLocationProviderClient
    private lateinit var locationRequest: LocationRequest
    private lateinit var locationCallback: LocationCallback
    private var latitude: Double = 0.0
    private var longitudine: Double = 0.0
    private var idVeicolo: String = ""
    private var codice_veicolo: String = ""


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_video)
        window.setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN
        )
        getLocationUpdates()
        db = FirebaseFirestore.getInstance()
        buttonvideoperizialive.visibility = View.INVISIBLE
        buttonback.setOnClickListener { back() }
        val preference = this.getSharedPreferences("PREFERENCE_NAME", 0)
        val email: String = preference.getString("Email", "").toString()
        val firebaseid: String = preference.getString("ID_AUTH_FIREBASE", "").toString()
        val key: String = preference.getString("ADMIN_KEY", "").toString()
        codice_veicolo = intent.getStringExtra("CODICE_VEICOLO").toString()
        idVeicolo = intent.getStringExtra("ID_VEICOLO").toString()
        enablevideo(codice_veicolo)

        val recycler_view: ListView = findViewById(R.id.listView)
        var list = mutableListOf<Model>()
        val listavalori = APISupport.getListaVideo(firebaseid, email, key, idVeicolo)
        var urlphoto = "https://i.ibb.co/k2mSK4K/icon-video-play.png"
        listavalori.forEach {
            list.add(
                Model(
                    "Videoperizia del:" + it.DATA_ORA_CARICAMENTO,
                    "\nVideo geolocalizzato:\n" + it.INDIRIZZO_POSIZIONE_RILEVATA,
                    urlphoto,
                    "\nlat: " + it.LATITUDINE_POSIZIONE_RILEVATA + " - lon: " + it.LONGITUDINE_POSIONE_RILEVATA
                )
            )
        }
        recycler_view.adapter = MyListAdapter(this.baseContext, R.layout.rowvideo, list)
        /*recycler_view.setOnItemClickListener { parent, view, position, id ->
            //openvideourl(listavalori.get(position).URL_FILE)
        }*/
        buttonvideoperizia.setOnClickListener {
            openVideoRecord()
        }
    }


    fun openVideoRecord() {
        val intent = Intent(this, VideoRecordStart::class.java)
        intent.putExtra("CODICE_VEICOLO", codice_veicolo)
        intent.putExtra("ID_VEICOLO", idVeicolo)
        startActivity(intent)
        /*val takeVideoIntent: Intent = Intent(MediaStore.ACTION_VIDEO_CAPTURE)
        if (takeVideoIntent.resolveActivity(packageManager) != null) {
            val CAMERA_REQUEST_CODE_VEDIO = 0
            startActivityForResult(takeVideoIntent, CAMERA_REQUEST_CODE_VEDIO)
        }*/
    }

    private fun getLocationUpdates() {
        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
        locationRequest = LocationRequest()
        locationRequest.interval = 50000
        locationRequest.fastestInterval = 50000
        locationRequest.smallestDisplacement = 170f //170 m = 0.1 mile
        locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY //according to your app
        locationCallback = object : LocationCallback() {
            override fun onLocationResult(locationResult: LocationResult?) {
                locationResult ?: return
                if (locationResult.locations.isNotEmpty()) {
                    val addresses: List<Address>?
                    val geoCoder = Geocoder(applicationContext, Locale.getDefault())
                    addresses = geoCoder.getFromLocation(
                        locationResult.lastLocation.latitude,
                        locationResult.lastLocation.longitude,
                        1
                    )

                    longitudine = locationResult.lastLocation.longitude
                    latitude = locationResult.lastLocation.latitude

                    if (addresses != null && addresses.isNotEmpty()) {
                        val address: String = addresses[0].getAddressLine(0)
                        val city: String = addresses[0].locality
                        val state: String = addresses[0].adminArea
                        val country: String = addresses[0].countryName
                        val postalCode: String = addresses[0].postalCode
                        val knownName: String = addresses[0].featureName

                    }
                }
            }
        }
    }

    fun back() {
        val intent = Intent(this, MainActivity::class.java)
        val preference = this.getSharedPreferences("PREFERENCE_NAME", 0)
        val email: String = preference.getString("Email", "").toString()
        val firebaseid: String = preference.getString("ID_AUTH_FIREBASE", "").toString()
        val key: String = preference.getString("ADMIN_KEY", "").toString()
        intent.putExtra("Email", email)
        intent.putExtra("ID_AUTH_FIREBASE", firebaseid)
        intent.putExtra("ADMIN_KEY", key)
        startActivity(intent)
    }

    private fun openvideourl(VideoURL: String) {
        val intent = Intent(this, PlayVideoActivity::class.java)
        intent.putExtra("VideoURL", VideoURL)
        startActivity(intent)
        finish()
    }

    private fun enablevideo(codiceveicolo: String) {
        try {

            val docRef = db.collection("T_VEICOLI").document(codiceveicolo)
            docRef.addSnapshotListener { snapshot, e ->
                if (e != null) {
                    return@addSnapshotListener
                }
                if (snapshot != null && snapshot.exists()) {
                    val LIVE: Boolean = snapshot.data?.get("Live") as Boolean

                    if (LIVE) {

                        Toast.makeText(
                            this,
                            "Operatore in linea, puoi accedere alla video chiamata!",
                            Toast.LENGTH_LONG
                        ).show()

                        labelvideoperizia.visibility = View.INVISIBLE
                        buttonvideoperizialive.visibility = View.VISIBLE
                    } else {
                        labelvideoperizia.text =
                            "Potrai accedere alla video chiamata da qui quando l'operatore sarà online"
                        labelvideoperizia.visibility = View.VISIBLE
                        buttonvideoperizialive.visibility = View.INVISIBLE
                    }
                    try {
                        var EFFETTUATO: Boolean = snapshot.data?.get("EFFETTUATO") as Boolean
                        if (EFFETTUATO) {
                            labelvideoperizia.visibility = View.VISIBLE
                            buttonvideoperizialive.visibility = View.INVISIBLE
                            labelvideoperizia.text = "Visita già effettuata."
                        }
                    } catch (e: Exception) {
                        System.out.println("Errore live: " + e)

                    }
                } else {
                    System.out.println("Snapshot non valido ")
                }
            }
        } catch (e: Exception) {
            System.out.println("Errore avvio live: " + e)
        }

    }
}

MyList.kt

class MyListAdapter(var mCtx: Context, var resource: Int, var items: List<Model>) :
    ArrayAdapter<Model>(mCtx, resource, items) {

    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        var person: Model = items[position]
        val layoutInflater: LayoutInflater = LayoutInflater.from(mCtx)
        val url: URL = URL(person.photo)
        val bmp: Bitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream())
        val view: View = layoutInflater.inflate(resource, null)
        val imageView: ImageView = view.findViewById(R.id.iconIv)
        var textView: TextView = view.findViewById(R.id.titleTv)
        var textView1: TextView = view.findViewById(R.id.descTv)
        imageView.setImageBitmap(bmp)
        textView.text = person.title + " | " + person.desc
        textView1.text = "" + person.targa
        return view
    }

}

0 个答案:

没有答案