Autor Beitrag
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 15:16 
Hallo greentiger,

klar mußt du dann auch hier auf 'null' prüfen, aber dies geht eleganter direkt mit
ausblenden C#-Quelltext
1:
return Movie.AlternativeName ?? String.Empty;					

(ich gehe davon aus, daß AlternativeName selber schon als 'string' deklariert ist).

Ansonsten eben
ausblenden C#-Quelltext
1:
return (Movie.AlternativeName != null) Movie.AlternativeName.ToString : String.Empty;					


P.S. Falls du den ??-Operator noch nicht kennst, s. ??-Operator

Und noch ein P.S: Zur Vermeidung der möglichen NullReferenceException benutze ich daher ToString() nicht bei Variablen vom Typ 'String' selbst (auch wenn ich finde, daß dies der Compiler regeln bzw. eine mögliche Warnung ausgeben sollte).
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: So 25.12.11 15:30 
Stimmt das geht so einfach, aber so wird immernoch eine leeres Item erstellt und ausgegeben.

Habe es jetzt einmal so gelöst, bin aber für Verbesserungen offen ;)

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
foreach (TmdbMovie element in movies)
            {               
                string film = new MovieListItem(element).ToString();
                if(film!=string.Empty)
                    listBox1.Items.Add(film);                
            }


Eidt: Da muss ich mir noch was anderes einfallen lassen, so kommt es später mit SelectedIndexChanged zu Problemen.
ausblenden C#-Quelltext
1:
2:
MovieListItem listItem = (MovieListItem)listBox1.SelectedItem;
TmdbMovie movie = listItem.Movie;


Was ist daran falsch?
In der foreach Schleife soll der Wert noch gelöscht werden, wenn das Item leer ist:
ausblenden C#-Quelltext
1:
listBox1.Items.Remove(string.Empty);					
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mo 26.12.11 14:09 
Hat keiner eine Tipp für mich wie ich nur die Filme ausgeben kann ohne string.emtpy, beim Sortieren sieht das nicht gut aus, wenn am Anfang ein paar Zeilen leer sind?
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: Mo 26.12.11 14:40 
Hallo,

sind die Einträge auch wirklich leer (oder sind da einfach Leerzeichen drin)?
Bei letzterem einfach noch Trim() vor der Abfrage auf 'String.Empty' aufrufen bzw. ab .NET 4 mittels IsNullOrWhitespace überprüfen.
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mo 26.12.11 14:55 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:

sind die Einträge auch wirklich leer (oder sind da einfach Leerzeichen drin)?


Ja, die Einträge sind leer:
dl.dropbox.com/u/178...3%20empty.string.bmp
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mo 26.12.11 16:49 
Ich kann auch nicht mit listbox1.Items.Remove("filname"); ein Item löschen, es kommt aber keine Warnung/Fehlermeldung.
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: Di 27.12.11 13:33 
Die Frage ist doch, warum überhaupt Einträge vorhanden sind, deren Eigenschaft AlternativeName null ist. Haben die vielleicht noch eine Eigenschaft Name oder so, die dann nicht null ist? Alternative klingt so, als ob es noch einen anderen Namen geben würde.

Wenn diese Filme tatsächlich keinen Namen haben und nicht angezeigt werden sollen, dann kannst du das in dieser Schleife ganz gut lösen:

user profile icongreentiger hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
 
4:
5:
6:
7:
/* ... */
            foreach (TmdbMovie element in movies)
            {                       
                listBox1.Items.Add(new MovieListItem(element));
            }

Dort kannst du noch eine if-Abfrage einbauen, die prüft, ob die Eigenschaft AlternativeName null ist, und nur im anderen Fall einen Eintrag erstellt und hinzufügt.

Für diesen Beitrag haben gedankt: greentiger
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mi 28.12.11 14:06 
Stimmt, es gibt Name, weiß auch nicht wie ich da auf AlternativeName gekommen bin.

Eine Kleinigkeit ist jetzt noch, viele Rückgabewerte sind "null" sowie cast, budget, genres,... wie auch hier schon einer geschrieben hat: themoviedbapi.codepl...m/discussions/259649

Der Projektleiter hat in letzter Zeit 2 neue Updates herausgebracht, die in der dll noch nicht integriert sind. Der Code ist Opensource man müsste nur die jeweiligen Klassen updaten, jedoch kommt es dabei zu Problemen mit dem Verweis Microsoft.Expression.Interactions, der normal zur Verfügung stehen sollte, wenn man "Microsoft Expression Blend Software Development Kit (SDK) for Silverlight 4" installiert.

SourceCode: themoviedbapi.codepl.../releases/view/75332
Updates: themoviedbapi.codeplex.com/workitem/12606, themoviedbapi.codeplex.com/workitem/11134
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mi 28.12.11 14:32 
Naja, Du benötigst doch nur die Kalssenbibliothek, oder?
Der Fehler kommt doch aus dem Demoprojekt.

Also schmeiße doch einfach die zwei unbenötigten Projekte aus der Solution, und kompiliere dann.
Oder kompiliere halt nur die Klassenbibliothek.
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mi 28.12.11 15:04 
Beide darf ich nicht löschen aber das mit der Fehlermeldung schon, sonst kann ich es nicht mehr debuggen.

Habe jetzt TmdbMovie.cs bearbeitet und TmdbImageSize.cs neu erstellt. Aber wo muss ich jetzt die xml Dateien hinzufügen?
themoviedbapi.codeplex.com/workitem/11134

Bei jedem neuen Aufruf kommt jetzt noch eine Fehlermeldung:
ausblenden C#-Quelltext
1:
2:
[XmlArrayAttribute("cast")]
        public TmdbCastPerson[] Cast { get; set; }

Der Typ- oder Namespacename "TmdbCastPerson" 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: Mi 28.12.11 15:26 
Einfach mal den Namespace einbinden??
Mal heißt er "TheMovieDB", und mal "TheMovieDb".
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mi 28.12.11 17:34 
Okay habe die Verweise hinzugefügt und nur noch die TmdbMovie.cs ersetzt.
Jedoch glaube ich das man die xml Dateien noch einbinden muss, jetzt werden alle abgefragten Film mit "null" zurückgegeben.

Edit: Irgendwie stimmen die Code überhautp nicht überein, beim sanitize-xml.patch sollte man die TmdbAPI.cs bearbeiten, in der ganzen Klasse findet man nichts drüber und die Klasse TmdbMovieSearchResults existiert auch nicht
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 30.12.11 16:48 
Danke für Eure Hilfe/Mühe ;)

Werde auf ein Update der Api warten, die Updates/fixes gehören zu einer älteren Version (1.2).

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



BeitragVerfasst: Di 03.01.12 15:11 
Habe mir jetzt den Source Code nocheinmal genau angschaut.

Und in der TheMovieDb.Example werden Converter verwendet um die Cast anzuzeigen, CastMemberConverter.cs:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
using System;
using System.Windows.Data;

namespace TheMovieDb.Example.Converters
{
    [ValueConversion(typeof(object), typeof(string))]
    public class CastMemberConverter : IValueConverter
    {
        public object Convert(object value, Type targetType,
            object parameter, System.Globalization.CultureInfo culture)
        {
            var person = value as TmdbCastPerson;
            if (person == null)
                return "";
            string p = string.Format("{0}: {1}", person.Job, person.Name);
            if (!string.IsNullOrEmpty(person.Character))
                p += " as " + person.Character;
            return p;
        }

        public object ConvertBack(object value, Type targetType,
            object parameter, System.Globalization.CultureInfo culture)
        {
            // we don't intend this to ever be called
            return null;
        }
    }
}

Jedoch weiß ich nicht wirklich, wie ich den Converter verwenden kann?
themoviedbapi.codepl...changeset/view/84698

Ich verstehe nicht wieso mir die Genres nicht angezeigt werden, dazu wird kein Converter verwendet?

MfG greentiger
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Di 03.01.12 16:19 
Hi,

naja, der Converter wird doch nur für die Oberfläche innerhalb des Bindings benötigt.
Um halt die verschiedenen Properties der Person formatiert anzuzeigen.
Aber der dürfte Dir gar nichts bringen.
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Di 03.01.12 18:19 
Okay Danke, aber wie kann ich dann die Genres, Cast abfragen?

Der Rückgabetyp ist immer null:
dl.dropbox.com/u/178...%20null%20values.bmp

Wie man auf der Homepage sieht gibt es Schauspieler und Genres in der DB: www.themoviedb.org/movie/44982-13
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 03.01.12 18:54 
Du verwechselst hier den Vorgang der Typumwandlung in einer Programmiersprache (Cast) mit der Filmbesetzung (Cast). Irgendeine Typumwandlung wird dir nicht helfen die Besetzungliste zu füllen. Offensichtlich ist in deinem TmdbMovie element die Cast Liste nicht gesetzt. Wie man die füllt sollte die Dokumentationen der Library hergeben. Wenn sie das nicht tut solltst du diese Library endlich in die Tonne drücken. Die ganzen Probleme die sich in diesem Thread zwischen den Zeilen auftun lassen auf ein unterirdische Qualität des (Library) Codes schließen. Wenn du nicht die Fähigkeiten hast den Code als solchen zu korrigieren (ich meine den Code der Library nicht deinen eigenen) dann solltest du die Bibliothek nicht benutzen.


Edit: Wenn du entsprechend der API Dokumentation der TheMovieDb Website mal das Xml oder Json für deinen konkreten Film abrufst solltest du nachsehen können ob da überhaupt Genre/Cast liefert. Ich vermute nicht sondern man wird einen zweiten Aufruf entsprechend hier durchführen müssen(wird von deiner Library scheinbar in der TmdbApi.GetMovieInfo Methode gekapselt) um bestimmte Detailinformation zu einem Film zu bekommen.


Zuletzt bearbeitet von Ralf Jansen am Di 03.01.12 19:18, insgesamt 1-mal bearbeitet

Für diesen Beitrag haben gedankt: greentiger
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Di 03.01.12 19:13 
Hi,

also erstmal muss ich @user profile iconRalf Jansen Recht geben. Denn der Thread geht nun schon ziemlich lange, und ich finde auch, dass die Qualität der Lib nicht toll ist. Wenn es schon nicht klappt, das Spelling des Namespaces einzuhalten...

Habe mich trotzdem mal mit dem Thema auseinandergesetzt und dabei einfach mal die DemoApp verändert, kompiliert und ausgeführt. Und siehe da, klappt doch alles so, wie es soll. Die Anzeige der Genres habe ich einfach mal ganz hinten in der Liste dazugefügt. Die Solution habe ich mal hier hochgeladen.

Deinen ApiKey musst Du jeweils im MoviesViewModel und im PersonViewModel hinzufügen, an dieser Stelle:
ausblenden C#-Quelltext
1:
private readonly TmdbApi _api = new TmdbApi("");					
Hatte zum testen einfach einen genommen, den ich mit Google finden konnte :wink:
Viel Spaß damit,
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: greentiger
greentiger Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Di 03.01.12 19:24 
Habe es auch gerade in der Doku gesehen, dass es keinen Wert zurückgibt. Mit Movie.getInfo bekomme ich alles zurückgeben.

Danke für Eure Hilfe, werde das Thema jetzt schließen ;)