我无法在 Kotlin 中使用 Twilio API 发送消息,因为出现错误并导致我的应用程序崩溃
I cannot send a message using the Twilio API in Kotlin, as an error shows and crashes my app
一段时间以来,我一直在尝试让我的应用程序向我发送 SMS 消息,但一直无法解决任何问题。我一直在尝试使用 Twilio 的 2 个官方教程在 Kotlin 中发送短信。这是我的代码:
Twilio.init("mytwiliosid", "mytwilioauth")
val message = Message.creator(
PhoneNumber("mynumber"),
PhoneNumber("twilionumber"),
"Hello from Starfruit!"
).create()
print(message.sid)
我在我的 OnCreate 函数上有这个要测试。但是,每当我尝试 运行 我的应用程序时,它就会崩溃。如果我把它拿出来,我的代码 运行 没问题,但是只要我在我的应用程序中有它,它就会在打开时立即崩溃,并在 LogCat:
中显示此错误消息
2020-10-21 22:54:05.302 7120-7120/com.gradient.starfruit E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.gradient.starfruit, PID: 7120
java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; in class Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; or its superclasses (declaration of 'org.apache.http.conn.ssl.AllowAllHostnameVerifier' appears in /system/framework/framework.jar!classes3.dex)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.getSocketFactory(SSLConnectionSocketFactory.java:172)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.getDefaultRegistry(PoolingHttpClientConnectionManager.java:109)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:116)
at com.twilio.http.NetworkHttpClient.<init>(NetworkHttpClient.java:58)
at com.twilio.http.TwilioRestClient$Builder.build(TwilioRestClient.java:102)
at com.twilio.Twilio.getRestClient(Twilio.java:122)
at com.twilio.base.Creator.create(Creator.java:45)
at com.gradient.starfruit.MainActivity.onCreate(MainActivity.kt:41)
at android.app.Activity.performCreate(Activity.java:8086)
at android.app.Activity.performCreate(Activity.java:8074)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1313)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3755)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3961)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8178)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
老实说,我不太理解错误消息,但我相当确定是我的 Message.creator 造成的。如果有人知道我可以做些什么来修复这个错误,或者我应该做什么而不是我现在正在做的事情来用 Kotlin 发送消息,我们将不胜感激!
提前感谢您的帮助。
这与我最初制作的不完全一样,但我找到了一种相对简单地从 android 应用程序发送消息的方法。
val smsManager: SmsManager = SmsManager.getDefault()
smsManager.sendTextMessage("+19999999999", null, "Message goes here!", null, null);
这将使 phone 本身的文本变为任意数字。您还需要为此获得 send_sms 权限,因此您应该在清单文件中为此设置 <uses-permission>
,并在 MainActivity 文件中包含此代码以请求权限。
if (ContextCompat.checkSelfPermission(this@MainActivity, Manifest.permission.SEND_SMS) !== PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this@MainActivity, Manifest.permission.SEND_SMS)) {
ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.SEND_SMS), 1)
} else {
ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.SEND_SMS), 1)
}
}
一段时间以来,我一直在尝试让我的应用程序向我发送 SMS 消息,但一直无法解决任何问题。我一直在尝试使用 Twilio 的 2 个官方教程在 Kotlin 中发送短信。这是我的代码:
Twilio.init("mytwiliosid", "mytwilioauth")
val message = Message.creator(
PhoneNumber("mynumber"),
PhoneNumber("twilionumber"),
"Hello from Starfruit!"
).create()
print(message.sid)
我在我的 OnCreate 函数上有这个要测试。但是,每当我尝试 运行 我的应用程序时,它就会崩溃。如果我把它拿出来,我的代码 运行 没问题,但是只要我在我的应用程序中有它,它就会在打开时立即崩溃,并在 LogCat:
中显示此错误消息2020-10-21 22:54:05.302 7120-7120/com.gradient.starfruit E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.gradient.starfruit, PID: 7120
java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; in class Lorg/apache/http/conn/ssl/AllowAllHostnameVerifier; or its superclasses (declaration of 'org.apache.http.conn.ssl.AllowAllHostnameVerifier' appears in /system/framework/framework.jar!classes3.dex)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.getSocketFactory(SSLConnectionSocketFactory.java:172)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.getDefaultRegistry(PoolingHttpClientConnectionManager.java:109)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:116)
at com.twilio.http.NetworkHttpClient.<init>(NetworkHttpClient.java:58)
at com.twilio.http.TwilioRestClient$Builder.build(TwilioRestClient.java:102)
at com.twilio.Twilio.getRestClient(Twilio.java:122)
at com.twilio.base.Creator.create(Creator.java:45)
at com.gradient.starfruit.MainActivity.onCreate(MainActivity.kt:41)
at android.app.Activity.performCreate(Activity.java:8086)
at android.app.Activity.performCreate(Activity.java:8074)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1313)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3755)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3961)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:91)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:149)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:103)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2386)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:8178)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)
老实说,我不太理解错误消息,但我相当确定是我的 Message.creator 造成的。如果有人知道我可以做些什么来修复这个错误,或者我应该做什么而不是我现在正在做的事情来用 Kotlin 发送消息,我们将不胜感激!
提前感谢您的帮助。
这与我最初制作的不完全一样,但我找到了一种相对简单地从 android 应用程序发送消息的方法。
val smsManager: SmsManager = SmsManager.getDefault()
smsManager.sendTextMessage("+19999999999", null, "Message goes here!", null, null);
这将使 phone 本身的文本变为任意数字。您还需要为此获得 send_sms 权限,因此您应该在清单文件中为此设置 <uses-permission>
,并在 MainActivity 文件中包含此代码以请求权限。
if (ContextCompat.checkSelfPermission(this@MainActivity, Manifest.permission.SEND_SMS) !== PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this@MainActivity, Manifest.permission.SEND_SMS)) {
ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.SEND_SMS), 1)
} else {
ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.SEND_SMS), 1)
}
}