Wie frage ich eine uuid von Minecraft ab?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 66 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    Dem kann ich nur zustimmen ! Und hinzufühgen, daß es extrem unhöflich ist, Fragen einfach zu ignorieren.

    @xChRoNiKx Link is broken.
    Also ich würde gerne noch mal auf das Thema Async/Await zurückkommen, weil dassich nach 45 posts noch immer keine korrekte Anwendung dessen sehe, ist nicht wirklich eine Glanzleistung des Forums.
    Naja, kommt vmtl. daher, dass DerTuner denkt, das sei nun Async - isses aber nicht - er kann (und sollte) das Async-Geraffel ebensogut wegmachen, und es wird genauso funzen.
    (Ich selbst hab auch nicht richtig aufgepasst, weil zwischendrin die Lust etwas verloren, als kein Code kam)

    Ist nu bisserl blöd, so da einzugrätschen, aber sonst geht das unter, und Tuner denkt, er könne Async, dabei kanners nur fast.
    Also gewissermassen ein FolgeProblem des Grundsatz-Verstosses gegen "Eins nachm annern".

    Also meine Empfehlung: zurück-gehen auf post#28, und erstmal Async zuende bringen.
    (Auch wenn man nu erstmal mit Json weitermachen will empfiehlt sich der Rückschritt auf #28, weils mir aussieht, als habe er das mitte MineCraft-Klasse gründlich missverstanden.)

    Allerdings ist meine Wenigkeit noch bis heutabend da, dann erstma AFK mindestens bis Samstag.

    Also bitte funktionierenden Code neu posten als Grundlage für den weiteren Thread.
    Und sagen, was nun wolle: Json oder Async?
    Und das dann zuende bringen. Dann das annere, immer eins nachm annern.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Ja da hast du recht edr.
    Ich denke aber er sollte auch erstmal verstehen was überhaupt eine Funktion ist bzw der Unterschied zur Sub was er ja auch noch nicht Weiss obwohl er angeblich fortgeschritten ist.
    Aber geb ich dir natürlich recht.
    erstmal muss grundsätzlich das Problem seitens tuner verstanden werden. Dann können wir mit async arbeiten.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Jup.
    Das war ja die "Hausaufgabe" aus der Sub mal eine Funktion zu machen die das JSON zurückgibt.
    Um überhaupt erstmal die "Grundfunktion" der Funktion zu haben.

    Ich denke er hat da Async mit reingehauen weil der HttpClient nur mit Async funktioniert da er genau
    dafür so designt wurde. Theoretisch kanner das JSON auch einfach mit nem einfachen WebClient.Downloadstring holen und das wäre es gewesen.

    Aber ich denke mal wir warten mal ab was als nächstes kommt und schauen dann.
    Hat da jemand evtl. noch gute Lektüre für Async/Await oder reicht da MSDN für Anfänger? ala MSDN.Async/Await
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Der MSDN-Artikel: GruselGrusel - imo völlig ungeeignet, irgendetwas zu klären.
    Die Erklärungen sind Mist, und das Beispiel auch.

    Ich hab was verzapft auf CodeProject: Das fängt simpel an, und wird immer doller.
    Allerdings mein Simple-Sample dort nutzt keine fertigen Awaitablen Funktionen, sondern "konvertiert" normale Functions mittels Task.Run().
    Ich sag ja: Zurück auf Los, ohne Async, ohne Json, aber mit einer Function, die was zurückgibt.
    Diese dann asyncen ist ein lächerlicher Klacks, dagegen nimmt die Jsonnisiererei sich kompliziert aus.

    Also nochma @ TE:
    Schreib eine Function, die den String zurückgibt, der aufs Label soll.
    Und ruf diese Function auf, und tu ihren RückgabeWert aufs Label.
    Mehr nicht. Kein Async, kein Json.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Werde ich tun..

    *Fertig mit der Funktion

    VB.NET-Quellcode

    1. Function GetBack(adress As String) As String
    2. Dim wc As New WebClient
    3. GetBack = wc.DownloadString("https://api.mojang.com/users/profiles/minecraft/" + ftb_minecraft_name.Text)
    4. Return GetBack
    5. End Function

    gib auch nen wert zurück

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DerTuner“ ()

    Klappt so doch nicht;

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public id As String
    3. Public name As String
    4. Dim json As String = GetBack("https://api.mojang.com/users/profiles/minecraft/")
    5. Dim AccountInfo As Form1 = JsonConvert.DeserializeObject(Of Form1)(json)
    6. Function GetBack(adress As String) As String
    7. Dim wc As New WebClient
    8. GetBack = wc.DownloadString("https://api.mojang.com/users/profiles/minecraft/" + ftb_minecraft_name.Text)
    9. Return GetBack
    10. End Function
    11. Private Sub ftb_minecraft_acc_check_Click(sender As Object, e As EventArgs) Handles ftb_minecraft_acc_check.Click
    12. ftb_minecraft_uuid.Text = AccountInfo.id
    13. End Sub
    14. End Class

    bekomme da nen Fehler;
    Eine Ausnahme vom Typ "System.NullReferenceException" ist in InfoTool.exe aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.

    Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Falls ein Handler für diese Ausnahme vorhanden ist, kann das Programm möglicherweise weiterhin sicher ausgeführt werden.

    Ok. Ist zwar nun ein ganz anderer Ansatz ABER sehr gut das du da was machst.
    Die Funktion greift aber immer noch auf ein Control zu.
    Am einfachsten übergibst du einfach der Funktion die .Text Eigenschaft also so:

    VB.NET-Quellcode

    1. Dim json As String = GetBack(ftb_minecraft_name.Text)
    2. Function GetBack(username As String) As String
    3. Dim wc As WebClient = New WebClient()
    4. Dim tmp As String
    5. tmp = wc.DownloadString("https://api.mojang.com/users/profiles/minecraft/" + username)
    6. Return tmp
    7. End Function


    Dann wäre ja mal der erste Teil geschafft.

    VB.NET-Quellcode

    1. Dim AccountInfo As Form1 = JsonConvert.DeserializeObject(Of Form1)(json)

    Das ist leider falsch. Ich habe dir dafür ja sogar schon C&P Code geliefert also für die Klasse.
    Du musst sie nur noch an die richtige Stelle hinzufügen und dann das Form1 durch MinecraftInfo ersetzten.
    Inwieweit verstehst du das ganze nun? Ist dir überhaupt null klar oder weißt du wenigsten was ne Klasse ist
    und was für einen Zweck sie in diesem Kontext erfüllt?
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Im groben weis ich was eine Klasse ist

    * Dieser Code Abschnitt verursacht einen Fehler

    VB.NET-Quellcode

    1. ​Dim json As String = GetBack(ftb_minecraft_name.Text)

    Fehler;
    Eine Ausnahme vom Typ "System.NullReferenceException" ist in InfoTool.exe aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.

    Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Falls ein Handler für diese Ausnahme vorhanden ist, kann das Programm möglicherweise weiterhin sicher ausgeführt werden.
    Mein Kompleter Code;

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports Newtonsoft.Json
    3. Imports System.Net.Http
    4. Imports System.IO
    5. Imports System.Net
    6. Imports System.Net.WebClient
    7. Public Class Form1
    8. Public id As String
    9. Public name As String
    10. Dim json As String = GetBack(ftb_minecraft_name.Text)
    11. Dim AccountInfo As Form1 = JsonConvert.DeserializeObject(Of Form1)(json)
    12. Function GetBack(username As String) As String
    13. Dim wc As WebClient = New WebClient()
    14. Dim tmp As String
    15. tmp = wc.DownloadString("https://api.mojang.com/users/profiles/minecraft/" + username)
    16. Return tmp
    17. End Function
    18. Private Sub ftb_minecraft_acc_check_Click(sender As Object, e As EventArgs) Handles ftb_minecraft_acc_check.Click
    19. ftb_minecraft_uuid.Text = AccountInfo.id
    20. End Sub
    21. End Class

    Wie kann ich in diesem fall das alles erst auf "Kopfdruck" "auslösen"?
    (ich kenn das Click Ereignis)
    In dem du z.b.

    VB.NET-Quellcode

    1. Dim json As String = GetBack(ftb_minecraft_name.Text)
    2. MessageBox.Show(json) 'um zu sehen ob er wirklich das zurück bekommt was man will.

    In das Click-Ereignis packst. Und natürlich dem entsprechend oben raus löschen so das es nur noch im Click-Ereignis steht.
    Und dann löschst du erstmal:

    VB.NET-Quellcode

    1. Dim AccountInfo As Form1 = JsonConvert.DeserializeObject(Of Form1)(json)

    komplett raus.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Bin ich blöd... :whistling:
    Die TextBox ist ja anfangs lehr, des wegen muss ich das alles auf Knopfdruck ausführen lassen

    *So?

    VB.NET-Quellcode

    1. ​Public Class Form1
    2. Public id As String
    3. Public name As String
    4. 'Dim json As String = GetBack(ftb_minecraft_name.Text)
    5. Public AccountInfo As Form1 = JsonConvert.DeserializeObject(Of Form1)(json)
    6. Function GetBack(username As String) As String
    7. Dim wc As WebClient = New WebClient()
    8. Dim tmp As String
    9. tmp = wc.DownloadString("https://api.mojang.com/users/profiles/minecraft/" + username)
    10. Return tmp
    11. End Function
    12. Private Sub ftb_minecraft_acc_check_Click(sender As Object, e As EventArgs) Handles ftb_minecraft_acc_check.Click
    13. Dim json As String = GetBack(ftb_minecraft_name.Text)
    14. ftb_minecraft_uuid.Text = AccountInfo.id
    15. End Sub
    16. End Class
    Meinen Post hast du nicht ganze gelesen.
    Das:

    VB.NET-Quellcode

    1. Public AccountInfo As Form1 = JsonConvert.DeserializeObject(Of Form1)(json)

    Erstmal weg löschen. Denn da greifst du auch wieder auf etwas zu was komplett leer ist und auch
    gar nicht existiert.

    Wichtig ist uns erstmal das deine Funktion so funktioniert das du dein Zeug in dem Falle das JSON zurück bekommst.
    Deshalb auch erstmal:

    VB.NET-Quellcode

    1. ftb_minecraft_uuid.Text = AccountInfo.id

    löschen. Denn AccountInfo.id existiert natürlich auch nicht. Mach einfach mal ne MessageBox.Show(json) rein
    und drück dann auf deinen Knopf. Da sollte ja dein JSON dann drin erscheinen. Wenn wir das hinbekommen haben
    geht es damit weiter wie du darauf die ID bekommst.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Es bringt doch nicht'S wenn ich

    VB.NET-Quellcode

    1. ​Public AccountInfo As Form1 = JsonConvert.DeserializeObject(Of Form1)(json)

    lösche, weil

    Dim json As String = GetBack(ftb_minecraft_name.Text) auf die TextBox zugreift in der kein Text sthet
    Jetzt verstehe ich was du willst.... Na dann musst du prüfen ob die Textbox leer ist falls ja sag dem Nutzer halt
    "Hey die Textbox ist leer" und führe das ganze nicht aus.

    Wie eine IF Abfrage funktioniert wirst du ja wissen oder nicht?
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen