我在下面的代码中有一个错误,此代码必须显示一个元素列表,但是当它执行该代码时,我在线上有一个错误: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
}
}