hussien89aa/KotlinUdemy

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