我想从这个网站获取数据: http://ries.world:32170/rest/getDateTime 。有 4 个信息 Local、utc、message 和 code。我试图获取它们,然后在模拟器中显示它们,但不知何故它没有显示信息,我真的不知道为什么。而且程序根本没有显示任何错误。
这就是MainActivity.kt
package com.example.test48
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
class MainActivity : AppCompatActivity() {
private lateinit var local: TextView
private lateinit var utc: TextView
private lateinit var message: TextView
private lateinit var code: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
local = findViewById(R.id.local)
utc = findViewById(R.id.utc)
message = findViewById(R.id.message)
code = findViewById(R.id.code)
val retrofit = Retrofit.Builder()
.baseUrl("http://ries.world:32170/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val apiService = retrofit.create(ApiService::class.java)
val call: Call<ApiResponse> = apiService.getData()
call.enqueue(object : Callback<ApiResponse> {
override fun onResponse(call: Call<ApiResponse>, response: Response<ApiResponse>) {
if (response.isSuccessful) {
val apiResponse: ApiResponse? = response.body()
local.text = getString(R.string.local_placeholder, apiResponse?.local.orEmpty())
utc.text = getString(R.string.utc_placeholder, apiResponse?.local.orEmpty())
message.text = getString(R.string.message_placeholder, apiResponse?.local.orEmpty())
code.text = getString(R.string.code_placeholder, apiResponse?.local.orEmpty())
}
}
override fun onFailure(call: Call<ApiResponse>, t: Throwable) {
t.printStackTrace()
}
})
}
}
这就是ApiService
package com.example.test48
import retrofit2.Call
import retrofit2.http.GET
interface ApiService {
@GET("rest/getDateTime")
fun getData(): Call<ApiResponse>
}
这就是 ApiResponse
package com.example.test48
data class ApiResponse(
val local: String?,
val utc: String?,
val message: String?,
val code: String?
)
这就是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">
<TextView
android:id="@+id/local"
android:layout_width="407dp"
android:layout_height="75dp"
android:layout_marginStart="131dp"
android:layout_marginTop="77dp"
android:layout_marginEnd="131dp"
android:text="@string/local_label"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/utc"
android:layout_width="412dp"
android:layout_height="67dp"
android:layout_marginStart="131dp"
android:layout_marginTop="200dp"
android:layout_marginEnd="131dp"
android:text="@string/utc_label"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/message"
android:layout_width="408dp"
android:layout_height="66dp"
android:layout_marginStart="131dp"
android:layout_marginTop="330dp"
android:layout_marginEnd="131dp"
android:text="@string/message_label"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/code"
android:layout_width="405dp"
android:layout_height="56dp"
android:layout_marginStart="131dp"
android:layout_marginTop="460dp"
android:layout_marginEnd="131dp"
android:text="@string/code_label"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
这就是build.graddle.kts
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "com.example.test48"
compileSdk = 34
defaultConfig {
applicationId = "com.example.test48"
minSdk = 28
targetSdk = 34
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.11.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
}
这在 AndroidManifest.xml 中
<uses-permission android:name="android.permission.INTERNET" />
最后,这是 Strings.xml
<resources>
<string name="app_name">Test48</string>
<string name="local_placeholder">Local: %1$s</string>
<string name="utc_placeholder">Utc: %1$s</string>
<string name="message_placeholder">Message: %1$s</string>
<string name="code_placeholder">Code: %1$s</string>
<string name="local_label">Local: </string>
<string name="utc_label">Utc: </string>
<string name="message_label">Message: </string>
<string name="code_label">Code: </string>
</resources>
我尝试从上述网站获取数据,然后将其显示在 Android Studios 模拟器上。然而它并没有按计划进行,我看不到数据,我完全不知道为什么。
尝试在 Manifest
android:usesCleartextTraffic
和/或 true
中设置 NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()
,它应该返回 false