Bitte sehen Sie sich unten den Logcat-Bericht an. Ich versuche, eine Remote-API zu erstellen. Ich verwende einen lokalen Server auf meinem Windows-PC, kann aber scheinbar keine Verbindung von der App zum Remote-Server herstellen. Die App zeigt die Batterieprozentsätze einwandfrei an, leitet die Informationen jedoch nicht an meinen Server weiter. Alle Vorschläge wären sehr willkommen.
java.lang.ExceptionInInitializerError
at com.example.bms.MainActivity.sendBatteryDataToServer(MainActivity.kt:93)
at com.example.bms.MainActivity.access$sendBatteryDataToServer(MainActivity.kt:28)
at com.example.bms.MainActivity$batteryStatusReceiver$1.onReceive(MainActivity.kt:60)
at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1814)
at android.app.LoadedApk$ReceiverDispatcher$Args.$r8$lambda$mcNAAl1SQ4MyJPyDg8TJ2x2h0Rk(Unknown Source:0)
at android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at android.os.Handler.handleCallback(Handler.java:959)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loopOnce(Looper.java:232)
at android.os.Looper.loop(Looper.java:317)
at android.app.ActivityThread.main(ActivityThread.java:8705)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
Caused by: java.lang.NullPointerException: Attempt to get length of null array
at okhttp3.internal.tls.BasicTrustRootIndex.(BasicTrustRootIndex.java:32)
at okhttp3.internal.platform.Platform.buildTrustRootIndex(Platform.java:303)
at okhttp3.internal.platform.AndroidPlatform.buildTrustRootIndex(AndroidPlatform.java:256)
at okhttp3.internal.platform.Platform.buildCertificateChainCleaner(Platform.java:173)
at okhttp3.internal.platform.AndroidPlatform.buildCertificateChainCleaner(AndroidPlatform.java:212)
at okhttp3.internal.tls.CertificateChainCleaner.get(CertificateChainCleaner.java:41)
at okhttp3.OkHttpClient$Builder.sslSocketFactory(OkHttpClient.java:782)
at com.example.bms.network.RetrofitInstance.(RetrofitInstance.kt:38)
at com.example.bms.MainActivity.sendBatteryDataToServer(MainActivity.kt:93)
at com.example.bms.MainActivity.access$sendBatteryDataToServer(MainActivity.kt:28)
at com.example.bms.MainActivity$batteryStatusReceiver$1.onReceive(MainActivity.kt:60)
at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1814)
at android.app.LoadedApk$ReceiverDispatcher$Args.$r8$lambda$mcNAAl1SQ4MyJPyDg8TJ2x2h0Rk(Unknown Source:0)
at android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at android.os.Handler.handleCallback(Handler.java:959)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loopOnce(Looper.java:232)
at android.os.Looper.loop(Looper.java:317)
at android.app.ActivityThread.main(ActivityThread.java:8705)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
package com.example.bms.network
import okhttp3.OkHttpClient
import retrofit2.Call
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.Body
import retrofit2.http.POST
import java.security.cert.X509Certificate
import javax.net.ssl.SSLContext
import javax.net.ssl.SSLSocketFactory
import javax.net.ssl.X509TrustManager
// Insecure SSL configurations for Retrofit
fun getInsecureTrustManager(): X509TrustManager {
return object : X509TrustManager {
override fun checkClientTrusted(chain: Array?, authType: String?) {}
override fun checkServerTrusted(chain: Array?, authType: String?) {}
override fun getAcceptedIssuers(): Array? = null
}
}
fun getInsecureSocketFactory(): SSLSocketFactory {
val context = SSLContext.getInstance("TLS")
context.init(null, arrayOf(getInsecureTrustManager()), java.security.SecureRandom())
return context.socketFactory
}
// Retrofit instance setup
object RetrofitInstance {
// Base URL for your API
private const val BASE_URL = "http://192.168.1.134:3000/battery/status" // Replace with your actual API URL
// Create OkHttpClient for additional configurations (e.g., logging, timeouts)
private val client = OkHttpClient.Builder()
.sslSocketFactory(getInsecureSocketFactory(), getInsecureTrustManager())
.hostnameVerifier { _, _ -> true } // Accept all hostnames (only for development)
.build()
// Create Retrofit instance
private val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL) // Set the base URL for your API
.addConverterFactory(GsonConverterFactory.create()) // Add Gson converter to convert JSON
.client(client) // Use the OkHttp client
.build()
// Provide the API service
val batteryApiService: BatteryApiService by lazy {
retrofit.create(BatteryApiService::class.java)
}
}
// Retrofit service interface to define API methods
interface BatteryApiService {
// Define your POST request to send battery data
@POST("battery/status")
fun sendBatteryStatus(@Body batteryData: BatteryData): Call
}
// Data class to hold battery data
data class BatteryData(
val batteryPercentage: String,
val batteryStatus: String
)
Bitte sehen Sie sich unten den Logcat-Bericht an. Ich versuche, eine Remote-API zu erstellen. Ich verwende einen lokalen Server auf meinem Windows-PC, kann aber scheinbar keine Verbindung von der App zum Remote-Server herstellen. Die App zeigt die Batterieprozentsätze einwandfrei an, leitet die Informationen jedoch nicht an meinen Server weiter. Alle Vorschläge wären sehr willkommen. [code]java.lang.ExceptionInInitializerError at com.example.bms.MainActivity.sendBatteryDataToServer(MainActivity.kt:93) at com.example.bms.MainActivity.access$sendBatteryDataToServer(MainActivity.kt:28) at com.example.bms.MainActivity$batteryStatusReceiver$1.onReceive(MainActivity.kt:60) at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1814) at android.app.LoadedApk$ReceiverDispatcher$Args.$r8$lambda$mcNAAl1SQ4MyJPyDg8TJ2x2h0Rk(Unknown Source:0) at android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0) at android.os.Handler.handleCallback(Handler.java:959) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loopOnce(Looper.java:232) at android.os.Looper.loop(Looper.java:317) at android.app.ActivityThread.main(ActivityThread.java:8705) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886) Caused by: java.lang.NullPointerException: Attempt to get length of null array at okhttp3.internal.tls.BasicTrustRootIndex.(BasicTrustRootIndex.java:32) at okhttp3.internal.platform.Platform.buildTrustRootIndex(Platform.java:303) at okhttp3.internal.platform.AndroidPlatform.buildTrustRootIndex(AndroidPlatform.java:256) at okhttp3.internal.platform.Platform.buildCertificateChainCleaner(Platform.java:173) at okhttp3.internal.platform.AndroidPlatform.buildCertificateChainCleaner(AndroidPlatform.java:212) at okhttp3.internal.tls.CertificateChainCleaner.get(CertificateChainCleaner.java:41) at okhttp3.OkHttpClient$Builder.sslSocketFactory(OkHttpClient.java:782) at com.example.bms.network.RetrofitInstance.(RetrofitInstance.kt:38) at com.example.bms.MainActivity.sendBatteryDataToServer(MainActivity.kt:93) at com.example.bms.MainActivity.access$sendBatteryDataToServer(MainActivity.kt:28) at com.example.bms.MainActivity$batteryStatusReceiver$1.onReceive(MainActivity.kt:60) at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1814) at android.app.LoadedApk$ReceiverDispatcher$Args.$r8$lambda$mcNAAl1SQ4MyJPyDg8TJ2x2h0Rk(Unknown Source:0) at android.app.LoadedApk$ReceiverDispatcher$Args$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0) at android.os.Handler.handleCallback(Handler.java:959) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loopOnce(Looper.java:232) at android.os.Looper.loop(Looper.java:317) at android.app.ActivityThread.main(ActivityThread.java:8705) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886) [/code] Bitte sehen Sie sich unten die Nachrüstdatei an [code]package com.example.bms.network
// Base URL for your API private const val BASE_URL = "http://192.168.1.134:3000/battery/status" // Replace with your actual API URL
// Create OkHttpClient for additional configurations (e.g., logging, timeouts) private val client = OkHttpClient.Builder() .sslSocketFactory(getInsecureSocketFactory(), getInsecureTrustManager()) .hostnameVerifier { _, _ -> true } // Accept all hostnames (only for development) .build()
// Create Retrofit instance private val retrofit = Retrofit.Builder() .baseUrl(BASE_URL) // Set the base URL for your API .addConverterFactory(GsonConverterFactory.create()) // Add Gson converter to convert JSON .client(client) // Use the OkHttp client .build()
// Provide the API service val batteryApiService: BatteryApiService by lazy { retrofit.create(BatteryApiService::class.java) } }
// Retrofit service interface to define API methods interface BatteryApiService {
// Define your POST request to send battery data @POST("battery/status") fun sendBatteryStatus(@Body batteryData: BatteryData): Call }
// Data class to hold battery data data class BatteryData( val batteryPercentage: String, val batteryStatus: String ) [/code] siehe unten meine MainActivity.Kt [code]package com.example.bms
// State variables to store battery info private val batteryPercentage = mutableStateOf("Battery: 0%") private val batteryStatus = mutableStateOf("Status: Unknown")
// BroadcastReceiver to listen to battery changes private val batteryStatusReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { if (intent == null) { Log.e("MainActivity", "Received intent is null") return } // Get battery percentage val level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) val scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1) val batteryPct = (level * 100) / scale
// Get battery charging status val status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1) val isCharging = when (status) { BatteryManager.BATTERY_STATUS_CHARGING -> "Charging" BatteryManager.BATTERY_STATUS_FULL -> "Full" BatteryManager.BATTERY_STATUS_DISCHARGING -> "Discharging" else -> "Unknown" }
// Update the battery percentage and status state variables batteryPercentage.value = "Battery: $batteryPct%" batteryStatus.value = "Status: $isCharging"
// Send battery data to the server sendBatteryDataToServer(batteryPct, isCharging) } }
override fun onStart() { super.onStart() // Register the receiver to listen for battery changes val filter = IntentFilter(Intent.ACTION_BATTERY_CHANGED) registerReceiver(batteryStatusReceiver, filter) }
override fun onStop() { super.onStop() // Unregister the receiver to avoid memory leaks unregisterReceiver(batteryStatusReceiver) }
// Function to send battery data to the remote server private fun sendBatteryDataToServer(batteryPct: Int, isCharging: String) { val batteryData = BatteryData( batteryPercentage = "$batteryPct%", batteryStatus = isCharging )
RetrofitInstance.batteryApiService.sendBatteryStatus(batteryData).enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { if (response.isSuccessful) { Log.d("MainActivity", "Battery data sent successfully") } else { Log.e("MainActivity", "Failed to send battery data: ${response.message()}") } }
Ich habe seit ein paar Wochen damit zu kämpfen, über API -Dokumentation für WS und Node geprägt und ich habe das Gefühl, alles versucht zu haben. Ich habe einen WebSocket-Server eingerichtet:
Was nützt DTO (Data Access Object) bei der Verwendung von Retrofit?
Es wird verwendet, um JSON-Antworten von der API in Datenklassen in Kotlin zu konvertieren.
Aber im folgenden Code mache ich direkt...
Ich versuche, ein Datenmodell an einen Server in Android zu übergeben, indem ich das Benutzerkonto für das Registrieren des Benutzerkontos übergeben kann. Wenn ich den Datentyp von UserData per Post...
Ich habe Jackrabbit 2.20.15 in einem Tomcat -Anwendungsserver. Die RMI -Unterstützung wird in neueren Releases veraltet/entfernt, sodass ich versuche, eine Verbindung zu einem Remote -Repository...
Wie kann ich sicherstellen, dass die Chromecast-Sitzung ordnungsgemäß zurückgesetzt wird und stabil ist, nachdem der Benutzer die Verbindung trennt und wieder herstellt? Sind zusätzliche...