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
The sql table needed for your db:
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
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
13 Comments
Auth Gábor
Tóth Bálint
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());
}}}
Auth Gábor
Igen... :)
Hát... egy hiba biztos van benne:
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:
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... :)
Auth Gábor
Tóth Bálint
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); }
}
Tóth Bálint
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.
Tóth Bálint
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.
Auth Gábor
Tóth Bálint
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()
?>
Auth Gábor
Tóth Bálint
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?
Auth Gábor
Tóth Bálint
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.