То, что я хотел бы сделать
Я хотел бы чирикать текст и изображение из приложения Android.
Я получил подсказки в моем предыдущем вопросе о переполнении стека, но я не могу исправить новые сумки, которые произошли, когда я пытался перевести код Java в код Kotlin.
Вы даете мне советы, что я должен исправить в моем текущем коде.
Мой прежний вопрос: Как я могу чирикать тексты и изображения из Android приложения в Kotlin?
Ошибки
- shareTwitter ():
No value passed for parameter 'message'
- URLEncoder:
Unresolved reference:URLEncoder
- FragmentActivity:
Unresolved reference: FragmentActivity
val intentTweetButton: Button = findViewById(R.id.intentTweetButton)
intentTweetButton.setOnClickListener {
shareTwitter()
}
...
private fun urlEncode(s: String): String {
try {
return URLEncoder.encode(s, "UTF-8")
} catch (e: UnsupportedEncodingException) {
Log.wtf(FragmentActivity.TAG, "UTF-8 should always be supported", e)
return ""
}
}
Текущий код
MainActivity.kt
package com.example.tweets
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
import android.content.Intent
import android.net.Uri
import android.util.Log
import androidx.core.app.ShareCompat
import java.io.File
import android.R.attr.path
import android.graphics.BitmapFactory
import kotlinx.android.synthetic.main.activity_main.*
import androidx.core.app.ComponentActivity.ExtraData
import androidx.core.content.ContextCompat.getSystemService
import android.icu.lang.UCharacter.GraphemeClusterBreak.T
import java.io.IOException
import android.content.pm.ResolveInfo
import android.content.pm.PackageManager
import java.io.UnsupportedEncodingException
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
try {resources.assets.open("sample.jpg").use { istream ->
val bitmap = BitmapFactory.decodeStream(istream)
sample.setImageBitmap(bitmap)
}
} catch (e: IOException) {
e.printStackTrace()
}
val intentTweetButton: Button = findViewById(R.id.intentTweetButton)
intentTweetButton.setOnClickListener {
shareTwitter()
}
/*
val shareCompatButton: Button = findViewById(R.id.shareCompatButton)
shareCompatButton.setOnClickListener {
shareCompat()
}
*/
}
private fun shareTwitter(message: String) {
val tweetIntent = Intent(Intent.ACTION_SEND)
tweetIntent.putExtra(Intent.EXTRA_TEXT, "This is a Test.")
tweetIntent.type = "text/plain"
val packManager = packageManager
val resolvedInfoList =
packManager.queryIntentActivities(tweetIntent, PackageManager.MATCH_DEFAULT_ONLY)
var resolved = false
for (resolveInfo in resolvedInfoList) {
if (resolveInfo.activityInfo.packageName.startsWith("com.twitter.android")) {
tweetIntent.setClassName(
resolveInfo.activityInfo.packageName,
resolveInfo.activityInfo.name
)
resolved = true
break
}
}
if (resolved) {
startActivity(tweetIntent)
} else {
val i = Intent()
i.putExtra(Intent.EXTRA_TEXT, message)
i.action = Intent.ACTION_VIEW
i.data = Uri.parse("https://twitter.com/intent/tweet?text=" + urlEncode(message))
startActivity(i)
Toast.makeText(this, "Twitter app isn't found", Toast.LENGTH_LONG).show()
}
}
private fun urlEncode(s: String): String {
try {
return URLEncoder.encode(s, "UTF-8")
} catch (e: UnsupportedEncodingException) {
Log.wtf(FragmentActivity.TAG, "UTF-8 should always be supported", e)
return ""
}
}
}
activity_main. xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/sample"
android:scaleType="centerCrop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/img_description"
tools:ignore="InvalidId" />
<Button
android:id="@+id/intentTweetButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:text="intent tweet"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--
<Button
android:id="@+id/shareCompatButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="16dp"
android:text="ShareCompat"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/intentTweetButton" />
-->
</androidx.constraintlayout.widget.ConstraintLayout>
Среда разработки
Android Studio 3.5.3
Kotlin плагин 1.3.50