Allegro WebApi

D6
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 12 lat
  • Postów:76
0

Witam

Próbuję wystawić komentarz w mojej aplikacji, jednakże natknąłem się na problem otóż.

http://allegro.pl/webapi/documentation.php/show/id,42#method-input

jak mówi ta stronka wypadałoby dać ocenę sprzedaży.

Jak widać jest to robione tak:
SellRatingEstimationStruct[] - tablica struktur, jedno wymiarowa.

Spróbowałem to zrobić o tak:

Kopiuj
 
                SellRatingEstimationStruct[] ocenianie = new SellRatingEstimationStruct[4];

                for (int i = 0; i < 4; i++)
                {
                    ocenianie[i].sellratinggroupid = i + 1;
                    if (i == 0)
                        ocenianie[i].sellratinggroupestimation = (int)numericUpDown1.Value;
                    else if (i == 1)
                        ocenianie[i].sellratinggroupestimation = (int)numericUpDown2.Value;
                    else if (i == 2)
                        ocenianie[i].sellratinggroupestimation = (int)numericUpDown3.Value;
                    else if (i == 3)
                        ocenianie[i].sellratinggroupestimation = (int)numericUpDown4.Value;
                }

jednak dostaję błąd o taki:
Additional information: Object reference not set to an instance of an object.

Proszę o pomoc.

msm
Administrator
  • Rejestracja:około 16 lat
  • Ostatnio:5 miesięcy
1

Hmm, kod wygląda poprawie (zakładając że numericUpDowny istnieją a wątpię żeby nie istniały (chyba że robisz to przed InitialiseComponent ale wątpię bo wtedy nie miałoby to sensu)).

W którym dokładnie miejscu (linijce) otrzymujesz ten błąd?

D6
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 12 lat
  • Postów:76
0

dokładnie to na początku pętli for.

Kopiuj
ocenianie[i].sellratinggroupid = i + 1; 
gawronlukasz
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 13 lat
  • Postów:51
1
Kopiuj
SellRatingEstimationStruct[] ocenianie = new SellRatingEstimationStruct[4];

Tutaj tworzysz tablicę, która może pomieścić 4 obiekty typu SellRatingEstimationStruct, ale są one inicjowane domyślnym typem czyli nullem.

Tak więc odwołanie do ocenianie[i].sellratinggroupid powoduje wspomniany przez Ciebie błąd.

Utwórz więc obiekty zanim coś będziesz przypisywał. Np. jako pierwszą instrukcję zrób:

Kopiuj
if(ocenianie[i]==null)
{
     ocenianie[i] = new SellRatingEstimationStruct();
}
 

Możesz wywalić tego if'a jeśli nie będziesz nigdy tworzył obiektów przed tą pętlą.

Pozdrawiam
Łukasz Gawron

edytowany 1x, ostatnio: gawronlukasz
msm
Ech, w takim razie czemu klasa nazywa się blablablaSTRUCT? Ze strukturą by to pięknie działało.
gawronlukasz
I to jest pytanie za milion punktów ;p
D6
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 12 lat
  • Postów:76
0

Jestem niemalże pewien że powinno to zadziałać. Tak myślałem, że tylko to może powodować problem (na debugu wszystkie elementy tej tablicy mają zawartość właśnie null). Odpalam Visual Studio i dam znać czy to coś dało, ale jak już mówiłem jestem niemalże pewien że da.

// --- Edit

Problem rozwiązany, wystarczyło wkleić podany wyżej kod. Dziękuję za pomoc.

// --- Edit

Narodził się kolejny problem otóż wywala mi że string jest w niewłaściwym formacie, jak wiadomo id usera jest dość długie jak i aukcji, jednak allegro napisało w swojej dokumentacji że to musi być typ int

Kopiuj
                int feitemid = Convert.ToInt32(daneK.ElementAt(4));
                int fetousrid = Convert.ToInt32(daneK.ElementAt(5));
                int fetype = Convert.ToInt32(daneK.ElementAt(3));
                try
                {
                    service.doFeedback(sessionhandle, feitemid, 0, fetousrid, textBox1.Text, ct, fetype, ocenianie);
                }
                catch (Exception ex) { MessageBox.Show(Convert.ToString(ex)); }

To mi daje błąd (int feitemid = Convert.ToInt32(daneK.ElementAt(4));

edytowany 2x, ostatnio: dejmien666
gawronlukasz
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 13 lat
  • Postów:51
0

A jaki jest ten string pod tym elementem, który pobierasz gdy dostajesz błąd?

D6
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 12 lat
  • Postów:76
0

Jest to string pobrany z kontrolki listView. Jeżeli chodzi o treść jest to nr aukcji i id użytkownika.

Jest to id aukcji np. 1655086878

Id użytkownika jest krótsze, np 19695863

Myślę że wywala ten błąd bo został przekroczony zakres int. Ale mogę się mylić.

edytowany 1x, ostatnio: dejmien666
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 8 godzin
  • Lokalizacja:Wrocław
0

Mylisz się, maksymalna wartość int to: 2147483647.
Wklej z łaski swojej treść wyjątku, a nie pisz, że "jest błąd".

D6
  • Rejestracja:ponad 14 lat
  • Ostatnio:prawie 12 lat
  • Postów:76
0

Przepraszam, zapomniałem wkleić, już daje.

Kopiuj
An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll

Additional information: Input string was not in a correct format.

 
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 8 godzin
  • Lokalizacja:Wrocław
0

Właśnie. Gdybyś przekroczył zakres miałbyś OverflowException. A FormatException dostajesz, bo Twój string nie składa się wyłącznie z cyfr.

Tak w ogóle, skoro to jest NOWY problem, to powinieneś założyć NOWY problem. Ponieważ piszesz w starym, a na dodatek już rozwiązanym, to nikt tu nie zagląda.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.