Autor Beitrag
greentiger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 16.12.11 22:04 
Guten Abend!

Ich möchte ein Programm schreiben, dass mir Informationen über bestimmte Filme liefert.
Jedoch gibt es ein Problem beim Aufrufen der library.
themoviedbapi.codeplex.com/documentation

TheMovieDBLib.dll habe ich als Verweis hinzugefügt + using Verweis aber irgendwie kann er mit

TmdbAPI api = new TmdbAPI("apikey");

nichts anfangen?

MfG greentiger


Zuletzt bearbeitet von greentiger am Fr 16.12.11 22:22, insgesamt 3-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 16.12.11 22:15 
Was heißt "damit kann er nichts anfangen"? Wenn eine Fehlermeldung kommt, ist es nützlich, sie hier mit anzugeben :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 16.12.11 22:22 
Ganz vergessen ;)

Fehlermeldung: "Der Typ- oder Namespacename "TmdbAPI" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)"
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Fr 16.12.11 22:42 
Hi,
auf Groß-und-Kleinschreibung muss man schon achten. Denn es heißt:
ausblenden C#-Quelltext
1:
TmdbApi api = new TmdbApi("apikey");					
Okay, in der Doku steht es falsch, aber mit IntelliSense kriegt an das ja schnell raus.
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 16.12.11 22:49 
user profile iconTrashkid2000 hat folgendes geschrieben Zum zitierten Posting springen:
Hi,
auf Groß-und-Kleinschreibung muss man schon achten. Denn es heißt:
ausblenden C#-Quelltext
1:
TmdbApi api = new TmdbApi("apikey");					
Okay, in der Doku steht es falsch, aber mit IntelliSense kriegt an das ja schnell raus.


Ach, Danke ;)

Ich dachte ich habe irgendeinen blöden Fehler beim Verweis oder so aber das die Doko falsch ist,... :D

MfG
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Sa 17.12.11 20:31 
TmdbMovie[] movies = api.MovieSearch("batman");

Fehlermeldung:
Der Typ System.Collections.Generic.IEnumerable<TheMovieDb.TmdbMovie>" kann nicht implizit in "TheMovieDb.TmdbMovie[]" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)

In was soll ich sie umwandeln?
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 17.12.11 20:55 
Auch wenn das hier immer mehr in einen Thread mit vielen Themen ausartet:

Du kannst das IEnumerable mit der Erweiterungsmethode ToArray() in ein Array konvertieren. Du könntest movies aber auch gleich in einer foreach-Schleife durchlaufen.


Zuletzt bearbeitet von Yogu am Sa 17.12.11 21:20, insgesamt 1-mal bearbeitet
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Sa 17.12.11 21:06 
Danke, habe es einfach mit toArray() gelöst.

Die Doko sollte auch einmal überarbeitet werden ;)

Edit: würdest du es mit einer foeach Schleife so lösen?
ausblenden C#-Quelltext
1:
2:
3:
4:
foreach (string elemente in movies)
            {
                textBox1.Text = elemente;
            }


MfG
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 17.12.11 21:19 
user profile icongreentiger hat folgendes geschrieben Zum zitierten Posting springen:
würdest du es mit einer foeach Schleife so lösen?
ausblenden C#-Quelltext
1:
2:
3:
4:
foreach (string elemente in movies)
            {
                textBox1.Text = elemente;
            }


MfG

Die Elemente sind nicht vom Typ string, sondern TmdbMovie, und die Variable hieße besser element. Davon abgesehen, ja.
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 23.12.11 19:44 
Möchte jetzt gerne so vorgehe, dass ich alle gefunden Filme ausgeben und den richtigen Film auswählen kann, anschließend sollen die Infos über den Film erscheinen.

1. Wollte alle gefunden Filme einmal in der textbox1 ausgeben, jedoch kommt er aus der Schleife nicht mehr heraus, die Namen werden richtig aufgerufen aber das Form1 öffnet sich nicht, Fehlermeldung gibt es keine:
ausblenden C#-Quelltext
1:
2:
3:
4:
foreach (TmdbMovie element in movies)
            {
                textBox1.Text += element.AlternativeName.ToString();                
            }


2. Wie könnte ich das machen, dass beim Klicken/Enter auf den richtigen Film, dass Array bekomme wo der Name gespeichert ist um später die Informatione auszugeben?

Besten Dank im Voraus.

MfG greentiger
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 23.12.11 20:32 
user profile icongreentiger hat folgendes geschrieben Zum zitierten Posting springen:
1. Wollte alle gefunden Filme einmal in der textbox1 ausgeben, jedoch kommt er aus der Schleife nicht mehr heraus, die Namen werden richtig aufgerufen aber das Form1 öffnet sich nicht, Fehlermeldung gibt es keine

Der Code sieht gut aus. Was passiert denn, wenn du einen Haltepunkt setzt und dich per Einzelschritt durcharbeitest? Wo genau hängt er sich da auf?

user profile icongreentiger hat folgendes geschrieben Zum zitierten Posting springen:
2. Wie könnte ich das machen, dass beim Klicken/Enter auf den richtigen Film, dass Array bekomme wo der Name gespeichert ist um später die Informatione auszugeben?

Ich würde vorschlagen, statt der TextBox eine ListBox zu nehmen und einen Eintrag für jeden Film hinzuzufügen. Dann kannst du im SelectedIndexChanged-Ereignis den Namen des neuen Films ermitteln. Das Array muss dann natürlich ein Feld des Formulars sein.

Besser wäre es, eine eigene kleine Klasse zu schreiben, die eine Instanz von TmdbMovie hält und über die Methode ToString den Wert von AlternativeName zurückgibt:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
class MovieListItem {
  public MovieListItem(TmdbMovie movie) {
    Movie = movie;
  }

  public TmdbMovie Movie {get; private set; }

  public string ToString() {
    return Movie.AlternativeName.ToString();
  }
}

Statt dem Namen kannst du nun Instanzen dieser Klasse zur ListBox hinzufügen. In der SelectedIndexChanged-Routine kannst du SelectedItem dann in ein MovieListItem zurückkonvertieren und auf das TmdbMovie-Objekt zugreifen:

ausblenden C#-Quelltext
1:
2:
MovieListItem listItem = (MovieListItem)listBox1.SelectedItem;
TmdbMovie movie = listItem.Movie;
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 23.12.11 20:56 
Danke für deine Antwort, werde mich über die Feiertage damit bemühen ;)

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:

Was passiert denn, wenn du einen Haltepunkt setzt und dich per Einzelschritt durcharbeitest? Wo genau hängt er sich da auf?


Ich habe es vorher schon mit Breakpoints getestet, die Filmergebnisse werden richtig abgerufen und auch ausgeben(Messagebox bzw TB1), jedoch ist nach der Schleife schluss. Letzter Wert ist null(siehe Bild) dann müsst er aus der Schleife gehen -> Programm schließt sich.

dl.dropbox.com/u/178...00/Filmdatenbank.bmp
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 23.12.11 21:01 
Hallo greentiger,

ein Nullwert kann ja auch nicht als String ausgegeben werden, d.h. du mußt explizit auf 'null' testen.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 23.12.11 21:03 
user profile icongreentiger hat folgendes geschrieben Zum zitierten Posting springen:
Letzter Wert ist null(siehe Bild)

Da ist element.AlternativeName null, und du rufst element.AlternativeName.ToString() auf - das löst eine NullReferendeException aus, und deshalb wird das Formular nicht angezeigt. Du müsstest abfragen, ob denn AlternativeName null ist.
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Sa 24.12.11 18:34 
Okay, Danke.

Wenn ich null abfange werden alle Filme korrekt ausgegeben.

Empfehlung von Yogu eine Klasse zu erstellen.

Habe jetzt die Klasse erstellt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
class MovieListItem
    {
        public MovieListItem(TmdbMovie movie)
        {
            Movie = movie;            
        }

        public TmdbMovie Movie { get; private set; }

        public string ToString()
        {
            return Movie.AlternativeName.ToString();
        }
    }


Aufruf:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
            TmdbApi api = new TmdbApi("Key");
            TmdbMovie[] movies = api.MovieSearch("batman").ToArray();
             
            foreach (TmdbMovie element in movies)
            {                       
                listBox1.Items.Add(new MovieListItem(element));
            }


Er gibt mir ganz was anderes aus(Projektname).
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 25.12.11 11:29 
Hallo,

schau dir mal die Warnung an (oder hast du die etwa ausgeschaltet bzw. nicht gesehen?).
Yogu hatte noch einen kleinen Fehler in seinem Code...
Die Lösung dazu überlasse ich dir als Weihnachtsaufgabe ;-)
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 25.12.11 13:20 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Yogu hatte noch einen kleinen Fehler in seinem Code...

Man sollte nicht so gedankenlos zwischen C# und Java hin- und herwechseln ;)
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: So 25.12.11 13:57 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:

schau dir mal die Warnung an (oder hast du die etwa ausgeschaltet bzw. nicht gesehen?).


Der Code ist so wie oben gepostet, bekomme aber keine Warnung.

Edit: Meinst du dies hier?

ausblenden C#-Quelltext
1:
2:
3:
4:
public new string ToString()
        {
            return Movie.AlternativeName.ToString();
        }


Bei der Ausgabe hat sich jedoch nichts geändert.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 25.12.11 14:10 
user profile icongreentiger hat folgendes geschrieben Zum zitierten Posting springen:
Der Code ist so wie oben gepostet, bekomme aber keine Warnung.

Die Warnung ist bei mir jetzt tatsächlich auch nicht gleich gekommen, und als sie dann da war, ist sie nach dem nächsten Compilieren wieder verschwunden. Wie dem auch sei, so lautet sie:

Zitat:
"MovieListItem.ToString()" blendet den vererbten Member "object.ToString()" aus. Damit der aktuelle Member diese Implementierung überschreibt, fügen Sie das override-Schlüsselwort hinzu. Ansonsten fügen Sie das new-Schlüsselwort hinzu.


user profile icongreentiger hat folgendes geschrieben Zum zitierten Posting springen:
Meinst du dies hier?

ausblenden C#-Quelltext
1:
2:
3:
4:
public [b]new[/b] string ToString()
        {
            return Movie.AlternativeName.ToString();
        }


Bei der Ausgabe hat sich jedoch nichts geändert.

Richtige Baustelle, falsches Baumaterial ;) Du willst keine neue ToString-Methode erstellen, sondern die vorhandene überschreiben, sodass statt der Methode von object deine aufgerufen wird. Also ist override das richtige Schlüsselwort.
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: So 25.12.11 14:37 
Okay.

Es kann ja jetzt immer noch null zurückgegeben werden umd das abzufangen hätte ich try and catch verwendet und die Exception gibt den string "null" zurück.
Jedoch brauch ich diesen Wert nicht in der Ausgabe, wie könnte ich verhindern das der Wert ausgegeben wird?

Ich dachte mir ich könnte das Item löschen, bzw abfragen wenn es "null" ist das es nicht erstellt wird, jedoch klappt das nicht so gut, was wäre in diesem Fall die optimale Lösung?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
public override string ToString()
        {
            try
            {
                return Movie.AlternativeName.ToString();
            }
            catch (NullReferenceException) { return "null";};
        }