Child pages
  • Android mysql adat lekérdezés illetve feltöltés
Skip to end of metadata
Go to start of metadata
Sziasztok!


Mysql adat le illetve feltöltéséhez kérnék tőletek segítséget. Egyetemen a projekt labor munkámhoz kell egy androi alkalmazást készíteni mely képes adatokat letölteni egy mysql adatbázisból. MÁr jópár napja próbálgatom sikertelenül. Programozást tanultam alapszinten, javat- is de nem androidra.

http://www.anddev.org/post91169.html#p91169

Ezen honlap alapján próbáltam megcsinálni, de sajnos már az alapoknnál megakadtam.  A php fájlt azt hova kell létrehozni, illetve a

mysql_connect("127.0.0.1","root","xxpasswordxx");
sornál kell megadni a belépéshez szükséges adatokat? Azt amivel az admin bejelentkezik?

The sql table needed for your db:
CREATE TABLE people (
   
      id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
   
      name VARCHAR( 100 ) NOT NULL ,
   
      sex BOOL NOT NULL DEFAULT '1',
   
      birthyear INT NOT NULL
   
      )

EZt a fájlt hol kell létrehozni? Milyen néven? HA valaki ezekben vagy úgy általánosságban az adatbázis letöltéséről tud segíteni az nagyon jó lenne. Létezik olyan kód amiben az ember kicserél 3-4 szót és már működik is neki a sajátadatbázisával? Válaszotokat előre is köszönöm.

      
      
Page viewed times
  • No labels

13 Comments

  1. A php fájlt azt hova kell létrehozni
    Egy PHP-t futtatni képes Apache szerveren például, az Android telefonon nem fog futni. Szóval ehhez kell egy szerver, és ha azon már fut a MySQL és létrehoztad az adatbázist és a PHP program képes az adatbázis tartalmát lekérdezni és/vagy manipulálni, akkor vissza tudunk térni az Android programozásra, mert egyelőre nem a Java oldalán akadtál el.

  2. Szia Gábor

    Nemrég kérted, hogy csináljunk egy adatbázist ami nem csak localhoston, hanem renden szerveren fut. Ezt megcsináltuk egy próbatáblával. Próbáltam beüzemelni a lekérdezést de nem jött össze. A php-s fájl működik, ugyanis ha lefuttatom böngészőben akkor ezt írja ki a firefox:

    [{"id":"1","password":"7c4a8d09ca3762af61e59520943dc26494f8941b","email":"admin@enaplo.hu","firstname":null,"lastname":"Norbert"},{"id":"2","password":"7c4a8d09ca3762af61e59520943dc26494f8941b","email":"valaki@valami.hu","firstname":"Valaki","lastname":"Valami"},false]

    Ez már jSON formátum? A java fájlt is létrehoztam de ha lefuttatom akkor csak egy üres fekete ablak jelenik meg. Ebben a kódban van kiiratás? Vagy egyáltalán jó a kód? Az emulátor képes kimenni az internetre, azt teszteltem. A programomnak az adatbázisból kapott adatatokat elméletileg be kell töltenie egy Spinner-be. Ezt már meg is írtam, úgy hogy stringként kapja az értékeit és azzal soronként feltölti a spinnert. MÁr csak az adatok kellenének. :)  ELőre is köszönöm a segítséget. A határidő sajnos szűkös, így minden információnak nagyon örülök. :)

    package com.your.hello;

    import android.app.Activity;
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import android.os.Bundle;
    import android.util.Log;
    public class Whitehat extends Activity {
    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
       
            String result = "";
        //the year data to send
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();  //  EZ a két sor miért is kell?
        nameValuePairs.add(new BasicNameValuePair("year","1980"));
         
        //http post
        try{
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://enaplo.herabo.com/enaplo.php");
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                InputStream is = entity.getContent();
        }catch(Exception e){
                Log.e("log_tag", "Error in http connection "+e.toString());
        }
        //convert response to string
        try{
              
                InputStream is=null;
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                }
                is.close();
         
                result=sb.toString();
        }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
        }
       
        //parse json data
        try{
            JSONArray jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++){
                JSONObject json_data = jArray.getJSONObject(i);
                    Log.i("log_tag","id: "+json_data.getInt("id")+
                            ", password: "+json_data.getString("password")+
                            ", email: "+json_data.getString("email")+
                            ", firstname: "+json_data.getString("firstname")+
                            ", lastname: "+json_data.getString("lastname")
                   ); }
            }
    catch(JSONException e){
            Log.e("log_tag", "Error parsing data "+e.toString());
    }}}
       


  3. Nemrég kérted, hogy csináljunk egy adatbázist ami nem csak localhoston, hanem renden szerveren fut.
    Ahja, lehet.
    Ez már jSON formátum?
    Igen... :)
    A java fájlt is létrehoztam de ha lefuttatom akkor csak egy üres fekete ablak jelenik meg.
    Hát... egy hiba biztos van benne:
        try{
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://enaplo.herabo.com/enaplo.php");
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                InputStream is = entity.getContent();
        }catch(Exception e){
                Log.e("log_tag", "Error in http connection "+e.toString());
        }
    Itt szépen csinálsz egy HTTP kérést, lemented a választ egy InputStream-be, amelynek eldobod a tartalmát, majd csinált egy új InputStream-et null értékkel és abból próbálsz olvasni:
        try{
                InputStream is=null;
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                }
                is.close();
         
                result=sb.toString();
        }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
        }
    Ezt a két try-catch blokkot vond egybe és akkor talán jó lesz... bár szerintem simán panaszkodik a logba, hogy null stream-ből próbálsz olvasni. Ha ez megvan, akkor tudjuk folytani... de szerintem kezdj egy új témát az Android-on belül, mert ez egy végtelen topic lesz... :)

  4. Na, akkor itt folytatjuk... kell TextView, illetve most mutasd meg, hogy mit is csinálsz a programban.
  5. Feltöltöttem, az eddig kész projektemet, csak hogy átlásd milyen célra és milyen környezetben is fogok adatbáziskezelést használni, nameg , hogy mikre lehet szükségem.

    http://www.2shared.com/file/w37NZJT8/latvanyterv1.html

    OOOHHH. Bálint ebben a pillanatban tudta meg hogy az ötöslottó.... vagyis hogy elrontotta a http címet. így már működik is a lekérés. Tudom amatőr és hatalmas baki. Sípolni kellett volna az én beszédemet is.
    Az eddigi Programkódot összevontam és beletettem egy textViewbe iratást és nagyszerűen működik. Elég összevissza szövegnek tűnik, da majdcsak kihámozom belőle. Leírok egy rövid leírást hogy miket akarunk megvalósítani. EZ egy elektronikus napló utánzat lesz. SZívesen fogadom a véleményedet, hogy te pl az adatokkal hol dolgoznál php-ben és hol válogatnád inkább a java kódban.

    Szeretnénk lekérni tanulók névsorát, de úgy hogy csak az adott tanárét. Ő bejelentkezik az androidos programon és pl letudja tölteni az órarendjét, tanulók nevét kiválasztja és lekérdezi az eddigi jegyeiket, tervbe van hogy fel is tudjon tölteni jegyet. 3. opció, hogy eltudja, küldeni az adatbázisnak a mot szerzett felelt jegyét pl, nameg hogy itt volt-e a tanuló az órán vagy sem. Szóval nagyjából ilyen szerkezetű a program. A kódot úgy írtam meg, hogy már csak be kelljen illeszteni a tábla lekérését. Az összes legördülő lista meg minden sztringként kapja az értékét.

    Eddig ennyi a lekérdezés.
    public class Whitehat extends Activity {
    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
       
            String result = "";
           
        //the year data to send
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("year","1980"));
         
        //http post
        try{ 
            HttpClient httpclient = new DefaultHttpClient(); 
            HttpPost httppost = new HttpPost("http://enaplo.herobo.com/enaplo.php"); 
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
            HttpResponse response = httpclient.execute(httppost); 
            HttpEntity entity = response.getEntity(); 
            InputStream is = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
            StringBuilder sb = new StringBuilder(); 
            String line = null; 
            while ((line = reader.readLine()) != null) { 
                    sb.append(line + "\n"); 
            }
            is.close(); 
      
            result=sb.toString();
           
          JSONArray jArray = new JSONArray(result);
            for(int i=0;i<jArray.length();i++){
                JSONObject json_data = jArray.getJSONObject(i);
                    Log.i("log_tag","id: "+json_data.getInt("id")+
                            ", password: "+json_data.getString("password")+
                            ", email: "+json_data.getString("email")+
                             ", firstname: "+json_data.getString("firstname")+
                             ", lastname: "+json_data.getString("lastname")
                   ); }
           
         
       
        }catch(Exception e){Log.e("log_tag", "Error in http connection "+e.toString());}
        TextView name = (TextView) findViewById(R.id.textView1);
        name.setText(result); }
    }
  6. Szia Gábor


    Sajnos a fórum bejegyzést nem tudom szerkeszteni, így egy újat kelll írnom. A szöveg kiiratást megoldottam. Letudtam kérdezni pl csak az email-címét. Jelenleg azon gondolkodok, hogy ha én bejelentkező felületet hozok létre a telefonon, és ahelyett, hogy csak egy tanár órái,t tanulóit tölteném le minden táblát lekérdezek akkor az sok adat esetén lassulást fog eredményezni. Szerinted ebben lehet valami? MI jelenleg nem fogunk nagy adatokkal dolgozni, de ez nagy baki. A kérdésem az lenne, hogy hogyan tudom megoldani:

    Telefonon beirom a felhasználónevet és jelszót. Bejelentezés gomb után ezt az ellenőrzést még talán elvégezhetem a telefonon is, bár ez se optiomális, de a legjobb az lenne, ha vissza tudnám küldeni a php fájlnak pl adott felhasználó id-jét(mert gondolom az az elsődleges kulcs) és a php fájl nekem csak az ehhez tartozó adatokat küldi el.

    Előre is köszönöm a segítséget.


  7. Üdv


    A határidő sajnos nagyon sürget. Kérhetnék valakitől segítséget az előbbi kérdésemhez? Még mindig azzal van a baj, hogy szeretnék postolt adatot küldeni a php fájlnak, mely azt ellenőrzi és aszerint küld nekem vissza adatokat. ebben tudna valaki segíteni? A php fájl is segítség, de én leginkább az androidos részére lennék kiváncsi.
  8. El kell döntened, hogy POST-al vagy GET-el akarsz a szervernek adatokat küldeni. Ezek után a HttpClient megfelelő használatával már tudsz adatokat küldeni a szervernek.
  9. Üdv.

    Post-al vagy get-el akarok-e adatot küldeni? Igazából nem tudom mi a különbég. Én ezt a kódot próbálom beüzemelni, melytől ilyen működést várnék majd.

    Elküldi a tobali@freemail.hu és 123456 stringeket melyet a php fájl fogad, és ha ő talált ilyen egyezéseket, tehát megtalálja azt a bizonyos emailcímet valahol az adatbázisban,  akkor ő kiszolgáltatja a hozzá tartozó adatokat pl a lastname-t melyet egy Toast-al jelenítenék meg. (csak hogy lássam működik-e). Melyik oldalon van a hiba? Android vagy php. NEked a php progrramozása is megy?


    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.Toast;

    public class HttpLogin extends Activity {
     
        JSONArray jArray;JSONObject json_data;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
           
    String result = "";
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("email","tobali@freemail.hu"));
    nameValuePairs.add(new BasicNameValuePair("password","123456"));

           
            try{ 
                HttpClient httpclient = new DefaultHttpClient(); 
                HttpPost httppost = new HttpPost("http://enaplo.herobo.com/enaplo.php"); 
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
     
              
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost);

               
               // Execute HTTP Post Request
               
                HttpEntity entity = response.getEntity(); 
                InputStream is = entity.getContent();
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
                StringBuilder sb = new StringBuilder(); 
                String line = null; 
                while ((line = reader.readLine()) != null) { 
                        sb.append(line + "\n"); 
                }
                is.close(); 
          
                result=sb.toString();
               
           jArray = new JSONArray(result);
              for(int i=0;i<jArray.length();i++){
                    json_data = jArray.getJSONObject(i);}
                     
               }catch(Exception e){Log.e("log_tag", "Error in http connection "+e.toString());}
           
         
           
            try {
                  
                   for(int i=0;i<jArray.length();i++){
                   json_data = jArray.getJSONObject(i);
          
                Toast.makeText(this,json_data.getString("lastname"), Toast.LENGTH_LONG).show();
            }
            }
            catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();}
            }
    }




    Php fájl:


    <?php

    session_start();
    require_once("connect.php");
    if (!empty($_POST['email'] )){
    $_POST['password'] = sha1($_POST['password']);
    $query = mysql_query("SELECT * FROM felhasznalok
                                WHERE email = '$_POST[email]'
                                AND password = '$_POST[password]'")
    or die ("Hiba - Sikertelen belépés. Katt ide a bejelentkezéshez: <a href='login.php'><b>ide</b></a>");
    while($e=mysql_fetch_assoc($query))
    $output[]=$e;
    print(json_encode($output));
    }
    mysql_close()

    ?>
  10. Láthatóan POST-al küldöd. Mi nem működik?
  11. ÜDv.

    Egy kis probléma adódott a php fájllal, ezért nem válaszoltam. SZóval. MOst jelenleg a projektünk kulcsa, hogy pl eltudjunk küldeni a telefonról egy szöveget vagy szót, és pl azt beszúrni az adatbázisban egy megadott tábla megadott helyére.

    A működését jól gondolom?  :  ANdroid értéket ad:

    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("email","admin@enaplo.hu"));
    nameValuePairs.add(new BasicNameValuePair("lastname","kicsereltem"));

    Majd elküldi az adatot a megadott php fájlnak.
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    Utána a php fájlban ellenőrizni kell, hogy az adatbázisban szerepel-e az email táblákban az admin@ enaplo.hu szöveg, ha igen akkor a lastname-jét kicseréli kicseréltem szóra.

    Ezt szeretnénk megoldani. A java oldalán én úgy gondolom jól csináltam. A többi a php-n múlik ugye? AZt hogyan kell megoldani?
  12. Az Android oldal jónak tűnik, a PHP is ránézésre, de abból derülne ki, hogy valóban jó-e, ha tesztelhető lenne a PHP, csinálj rá egy POST-os HTML FORM-ot és nézd meg.
  13. Kedves Gábor

    Nagyon szépen köszönöm a segítségedet. Sikerült a projektünk. A program képes a mysql adatbázisba telefon által megadott értékeket bevinni illetve letölteni is. A programozás nagy része, php programozással zajlott(sajnos). Android részében egyedül a json-kóddal dolgozás volt körülményes.