Allegro WebApi

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:

 
                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.

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?

0

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

ocenianie[i].sellratinggroupid = i + 1; 
1
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:

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

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

                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));

0

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

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ć.

0

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

0

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

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

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

 
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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1