var downloadurl = uploadtask.downloadUrl لا يوجد
mohamedHussein89 opened this issue · 1 comments
package com.example.dell.howtocreattwitter
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.drawable.BitmapDrawable
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.provider.MediaStore
import android.view.*
import android.widget.Adapter
import android.widget.BaseAdapter
import android.widget.Toast
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.storage.FileDownloadTask
import com.google.firebase.storage.FirebaseStorage
import com.google.firebase.storage.StreamDownloadTask
import com.google.firebase.storage.UploadTask
import kotlinx.android.synthetic.main.activity_login.*
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.ticket.view.*
import kotlinx.android.synthetic.main.tweets_tickets.view.*
import java.io.ByteArrayOutputStream
import java.text.SimpleDateFormat
import java.util.*
import java.util.zip.Inflater
class MainActivity : AppCompatActivity() {
//get storage instance
var storage = FirebaseStorage.getInstance()
// get storage ref
var storageRef=storage.getReferenceFromUrl("gs://howtocreattwitter.appspot.com")
var listoftweets = ArrayList()
var adapter: mytweetAdapter? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
listoftweets.add(holdAdapterObjects("0", "hey", "url", "add"))
listoftweets.add(holdAdapterObjects("1", "hey", "url", "moha"))
listoftweets.add(holdAdapterObjects("1", "hey", "url", "moha"))
listoftweets.add(holdAdapterObjects("1", "hey", "url", "moha"))
adapter = mytweetAdapter(this, listoftweets)
lvtweets.adapter = adapter
}
// creat on option menu
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.signout, menu)
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem?): Boolean {
when (item!!.itemId) {
R.id.sign -> {
FirebaseAuth.getInstance().signOut()
var intent = Intent(this, login::class.java)
startActivity(intent)
}
}
return super.onOptionsItemSelected(item)
}
//creaat adapter
inner class mytweetAdapter : BaseAdapter {
var context: Context? = null
var arraylist = ArrayList<holdAdapterObjects>()
constructor(context: Context, arrayList: ArrayList<holdAdapterObjects>) {
this.context = context
this.arraylist = arrayList
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
var pos = arraylist[position]
if (pos.tweetPersonUid.equals("add")) {
//load ticket
var view = LayoutInflater.from(context).inflate(R.layout.ticket, null, false)
view.attach.setOnClickListener(View.OnClickListener {
})
return view
} else {
// load tweets_tickts
var view = LayoutInflater.from(context).inflate(R.layout.tweets_tickets, null, false)
return view
}
}
override fun getItem(position: Int): Any {
return arraylist[position]
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getCount(): Int {
return arraylist.size
}
}
var pickimagecode = 123
fun loadimage() {
val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
intent.type = "image/*"
startActivityForResult(intent, pickimagecode)
}
@SuppressLint("Recycle")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == pickimagecode && data != null) {
// another metod to pick image from gallery
val contenturi = data.data
val bitmap = MediaStore.Images.Media.getBitmap(this.contentResolver, contenturi)
uploadimage(bitmap)
// third method to pick image from gallary
// imageView.setImageURI(data.data)
}
/*{
method to pick image from gallery
val selectedimage = data.data
val imagepath = arrayOf(MediaStore.Images.Media.DATA)
val crusor = contentResolver.query(selectedimage,imagepath,null,null,null)
crusor!!.moveToFirst()
val index = crusor.getColumnIndex(imagepath[0])
val picpath = crusor.getString(index)
imageView.setImageBitmap(BitmapFactory.decodeFile(picpath))
}
*/
}
var Bundle = intent.extras
var email: String? = null
fun uploadimage(bitmap: Bitmap) {
// to creat unique name by day and hour
//creat data format what is like
var dataFormat = SimpleDateFormat("ddMMyyHHmmss")
var date = Date()
// thats what the name appear
email = Bundle!!.getString("email")
var imagepath = stringsplit(email!!) + dataFormat.format(date) + ".jpg"
var imageref = storageRef.child("images" + imagepath)
//compress the bitmap
//......
val bios = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bios)
val data = bios.toByteArray()
//......
// upload image to firebase
val uploadtask = imageref.putBytes(data)
uploadtask.addOnFailureListener {
Toast.makeText(this, " add to fire base failed", Toast.LENGTH_LONG).show()
}.addOnSuccessListener{ taskSnapshot ->
Toast.makeText(this, " add to fire base success", Toast.LENGTH_LONG).show()
var downloadurl = imageref.downloadUrl.toString()
}
}
fun stringsplit(email: String): String {
var ss = email.split("@")
var name = ss[0]
return (name)
}
}
In Android Q they replace
DownloadURL= taskSnapshot.downloadUrl!!.toString()
with
DownloadURL= taskSnapshot.storage.downloadUrl.toString()!!
See this commit
dd2e078#L216