Пытался реализовать неявные намерения, но это не работает

#android #kotlin

Вопрос:

Я новичок в разработке Android и в настоящее время изучаю неявные намерения. Я реализовывал открыватель URL-адресов, но мое приложение продолжает сбоить. Я сделал все в соответствии с учебником, но все равно получил ту же ошибку. Я прикрепляю свой файл main_activity.kt, 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)
 

Комментарии:

1. Добавьте проверку URL-адреса. URL-адрес должен начинаться с http://

2. @Sniffer var Url = » www .» url. Пытался это сделать, но теперь он ищет только » www .». Это не взятие текста из редактируемого текста.

3. Пожалуйста, прокомментируйте свой полный URL-адрес здесь…

4. @Сниффер вар url: Строка = eTv.текст.toString() вар Url = » $url.org »

5. Ваш URL-адрес в недопустимом формате

Ответ №1:

Вы установили текст (URL) в Edittext в xml-файле?. Потому что здесь вы просто передаете текст из функции редактирования текста в onCreate (), которая будет вызвана, как только начнется действие. Если вы не задали текст в xml-файле, то он должен быть равен нулю. Прежде всего, запустите намерение на прослушивателе щелчка, а также оберните намерение в блок try — catch, так как он может вызвать исключение MalformedURLException, если URL неверен. Нравится,

         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()
        }
    }