【发布时间】:2022-01-04 02:56:24
【问题描述】:
我一直在尝试让 Android 模拟器使用本地成本的 MySQL 数据库启动一个简单的登录/注册程序。但是,当我尝试运行代码时,会出现以下错误,我不确定原因。
块引用 2021-11-25 15:29:40.840 13032-13032/com.example.accentus_login E/AndroidRuntime: 致命异常: main 进程:com.example.accentus_login,PID:13032 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.accentus_login/com.example.accentus_login.MainActivity}:java.lang.IllegalArgumentException:非法 URL:https//10.0.2.2:3000 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 引起:java.lang.IllegalArgumentException:非法 URL:https//10.0.2.2:3000 在 retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:454) 在 com.example.accentus_login.Retrofit.RetrofitClient.getInstance(RetrofitClient.kt:13) 在 com.example.accentus_login.MainActivity.onCreate(MainActivity.kt:28) 在 android.app.Activity.performCreate(Activity.java:8000) 在 android.app.Activity.performCreate(Activity.java:7984) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
这是设置基本 URL 的代码行:
object RetrofitClient {
private var ourInstance:Retrofit?=null
val instance:Retrofit
get() {
if(ourInstance==null)
ourInstance=Retrofit.Builder()
.baseUrl("https//10.0.2.2:3000") // 10.0.2.2:3000 is the localhost on emulator
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create())
.build()
return ourInstance!!
}
}
这是启动连接到 url 的 API 的地方
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//Init API
val retrofit = RetrofitClient.instance // < Initialization of connection
myAPI = retrofit.create(INodeJS::class.java)
login_button.setOnClickListener{
login(edt_email.text.toString(),edt_password.text.toString())
}
register_button.setOnClickListener{
register(edt_email.text.toString(),edt_password.text.toString())
}
}
我不完全确定为什么它认为本地主机是非法 URL。
【问题讨论】:
标签: android-studio kotlin android-emulator connection