Wysyłanie loginu i hasła na żądanie servera

0

Cześć :)

Piszę aplikację gdzie łączę bazę danych SQLite z bazą danych MySQL, która jest umieszczona na serwerze. Nie chcę, żebybaza MySQL była publicznie widoczna i dostępna, to też w ustawieniach założyłem hasło na folder z bazą danych. Teraz, żeby wejść na stronę, która zwraca wyniki wyniki z bazy należy podać login i hasło. Nie wiem niestety, jak zrobić to po stronie aplikacji na Androidzie. Próbowałem różnych rzeczy, np:

   
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(MOJ_URL);
            nameValuePairs.add(new BasicNameValuePair("emailid", MOJ_LOGIN));
            nameValuePairs.add(new BasicNameValuePair("password", MOJE_HASŁO));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();

Zostawiłem "emailid" i "password", choć nie wiem, czy klucz tutaj jest ważny, czy tylko wartość klucza.

Ta metoda np. zwraca

Error in http connection android.os.NetworkOnMainThreadException
Error converting result java.lang.NullPointerException: lock == null

Niestety nic, co znalazłem, głównie na StackOverflow nie pomaga mi. Aplikacja cały czas zwraca kod błędu 401. Proszę o pomoc, jak mogę rozwiązać sprawę wysłanie loginu i hasła.

0

Bo tak naprawdę to bazę MySQL dla aplikacji Android musisz udostępnić za pomocą np API w PHP czy jakiegokolwiek innego backendu.
Nie spotkałem czegoś takiego jak JDBC dla Androida.

0

Tak, mam odpowiednis pliki php, który zajmuja się obsługą bazy danych. Mi chodzi o to, że wszystkie pliki php do obsługi bazy danych wymagają loginu i hasła, wyskakuje okienko z prośbą. Nie wiem, jak z poziomu aplikacji na nią odpowiedzieć.

0

Jak piszesz do adresu http://www.mojadomena.pl/plik.php

to w tym pliku oczekujesz na agrumenty POST lub GET. np $_POST["login"] i do tego miejsca wpada Ci

nameValuePairs.add(new BasicNameValuePair("login", MOJ_LOGIN));
0

Ok, napisałem nieprecyzyjnie.http://podchodyandroidmasters.bugs3.com/ tam jest ukryty folder, adreshttp://podchodyandroidmasters.bugs3.com/mysqlsqlitesync/ może teraz rozjaśnilem sytuacje? :-)

0

Ale co z tego że ukryty skoro wpisując go w przeglądarkę i tak można się do niego dostać.
Jakie URL podajesz aplikacji ? Jak wygląda Twoje API?
Nie chce mi się wróżyć z fusów.

Dostajesz 401 bo pewnie źle przekazujesz/odbierasz parametry z aplikacji

0

Możesz się dostać do środka? Nikt nie będzie odpalać BruteForce na Tianhe, żeby się tam dostać, to nie jest system liczenia głosów ;-) wyskakuje Ci okienko logowania, tak? Chce tam wpisać dane, ale nie wiem jak. Jeden ze sposobów jaki próbowałem jest na gorze.
Inny sposób jaki próbowałem to

DefaultHttpClient client = new DefaultHttpClient();
Credentials creds = new UsernamePasswordCredentials("user", "passsword");
client.getCredentialsProvider().setCredentials(new AuthScope("http://myurl.com/score.php", 80), creds);

Adres URL jaki podaje to http://podchodyandroidmasters.bugs3.com/mysqlsqlitesync/

To jest tylko zabawka, ćwiczę łączenie się z bazą danych. Próbuje znaleźć odpowiedź na to, jak wysłać odpowiedz na żądanie loginu i hasła, skoro 2 metody, które wspomnialem dalej dają w wyniku 401.

0

To co robisz tutaj jest poprawne

  HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(MOJ_URL);
            nameValuePairs.add(new BasicNameValuePair("emailid", MOJ_LOGIN));
            nameValuePairs.add(new BasicNameValuePair("password", MOJE_HASŁO));
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();

Jako String MOJ_URL podajesz http://myurl.com/score.php W tym pliku PHP jest coś odpowiedzialnego za odbieranie headerów przez zmienną(globalną?) POST lub GET (przynajmniej tak zakładam że jest zrobiona autentykacja). Jeśli pokażesz kawałek kodu z tego pliku http://podchodyandroidmasters.bugs3.com/mysqlsqlitesync/ który zakładam równa się http://myurl.com/score.php bo taki skrócony adres może być wynikiem .htaccess lub innego frameworka za to odpowiedzialnego.

0

Mam tę stronę: http://podchodyandroidmasters.bugs3.com/ Na niej znajduje się folder /mysqlsqlitesync, na który wgrane są pliki php, takie jak: getUsers.php, insertUser.php itd. Na folder /mysqlsqlitesync nałożone jest hasło. W Androidzie mam metodę:

    public void login(String url) {

        DefaultHttpClient httpclient = new DefaultHttpClient();
        httpclient.getCredentialsProvider().setCredentials(
                new AuthScope(url, AuthScope.ANY_PORT),
                new UsernamePasswordCredentials(LOGIN, HASŁO));



        } 

Mam też metodę public void syncSQLiteMySQLDB(), w której mam taką linię:
client.post("http://podchodyandroidmasters.bugs3.com/mysqlsqlitesync/getusers.php", params, new AsyncHttpResponseHandler()
Żeby dostać się do tego pliku wywołuję na początku metody syncSQLiteMySQLDB() metodę login("http://podchodyandroidmasters.bugs3.com/mysqlsqlitesync/getusers.php"). I to nadal nie działa, dalej błąd 401.

0

Sprawdź który z plików phpmyadmin odpowiada za pobranie hasła, sprawdź jak to hasło pobiera i taką metodą wyślij mu z androida jako żądanie. POST/GET. Jeżeli robi to jakimś dziwnym sposobem to spróbuj zmienić.

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