尝试实现隐式意图,但它不起作用



我是android开发的新手,我目前正在学习隐式意图。我正在实现url打开器,但我的应用程序一直崩溃。我做了一切根据教程,但仍然得到同样的错误。我附加我的main_activity。manifest.xml和下面的错误文件。请告诉我哪里做错了。

package com.example.intents
import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var searchBtn = findViewById<Button>(R.id.searchbtn)
var eTv = findViewById<EditText>(R.id.eTv)
var url: String = eTv.text.toString()
var it: Intent = Intent(Intent.ACTION_VIEW)
it.data = Uri.parse(url)
startActivity(it)
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.intents">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Intents">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
2021-08-11 09:03:31.012 15235-15235/com.example.intents E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.intents, PID: 15235
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.intents/com.example.intents.MainActivity}: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat= }
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3374)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3513)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2109)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7682)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat= }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2241)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1895)
at android.app.Activity.startActivityForResult(Activity.java:5205)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:597)
at android.app.Activity.startActivityForResult(Activity.java:5163)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:583)
at android.app.Activity.startActivity(Activity.java:5534)
at android.app.Activity.startActivity(Activity.java:5502)
at com.example.intents.MainActivity.onCreate(MainActivity.kt:22)
at android.app.Activity.performCreate(Activity.java:7815)
at android.app.Activity.performCreate(Activity.java:7804)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1318)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3349)

您是否在xml文件的Edittext上设置了文本(url) ?因为这里你只是在onCreate()函数中传递编辑文本的文本,该函数将在活动启动时立即调用。如果你没有在xml文件中设置文本,那么它必须为空。首先,在点击监听器上启动意图,并将意图包装在try- catch块中,因为如果url是错误的,它会抛出malformmedurlexception。如,

findViewById<TextView>(R.id.textView).setOnClickListener {
try {
Intent(Intent.ACTION_VIEW).also {
it.data = Uri.parse("https://localhost:8080/")
startActivity(it)
}
}catch (e: MalformedURLException){
e.printStackTrace()
Toast.makeText(this , "Enter valid URL" , Toast.LENGTH_LONG).show()
}
}

最新更新