Soru & Cevap

Android Uzak veritabanı bağlantısı ...

19.12.2015 - 01:53

Merhaba Arkadaşlar.Benim projem gereği uzak bir veritabanından bilgileri çekip il ve ilçeye göre bazı bilgileri kullanıcıya göstermem gerek.Sorun şuki Uzakveritabanı bağlantısı mantığı nasıl işliyor,elimde olan bi DB dosyası var,bunu webserver'amı yüklüycem yoksa farklı bir olaymı bileniniz varsa cevaplarsanız sevinirim.

1,116 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-66405-1449241617.jpg
murat34can52
06.08.2016 - 09:12

Öncelikle diğer konuda eskiden yazdığım fonk.java vardı belki işine yarar diye koyayım linki buraya.
https://gelecegiyazanlar.turkcell.com.tr/soru/uzak-veritabani-ile-calisma

Şuan o eski koda göre yeni şeyler keşvettim ve Türkçe kaynak olmadığı için burayada belirmek istiyorum.

Burada Hem yazı göndermeyi gösteriyorum hemde base64 olarak resim göndermeyi gösteriyorum.
fonkisyonlar verdiğim linkte var. gerekirse ordan alırsınız.

 

    String ercnt=  "";
    Bitmap bmpGrnm;
    String imgbase64 = "";
    private JSONObject post(String data[], String dataName[]){
        try{

            String postUrl = "http://www.siteAdı.com/mobil/query/msjgndr.php";

            HttpParams httpParameters = new BasicHttpParams();
            HttpConnectionParams.setConnectionTimeout(httpParameters, 100000);
            HttpConnectionParams.setSoTimeout(httpParameters, 100000);

            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(postUrl);
            httpPost.setParams(httpParameters);

            List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
            urlParameters.add(new BasicNameValuePair(dataName[1], data[1])); // diziye mesaj adlı mesaj verisini koyuyor. Yani burda mesaj bizim php dosyasından $_POST["mesaj"] olarak çekiceğimiz bilgi oluyor.
            // Örnek urlParameters.add(new BasicNameValuePair("mesaj", "blablalba"));
            imgbase64 = "";
            bmpGrnm = ((BitmapDrawable) imgpreview.getDrawable()).getBitmap(); // resim bitmap dönüştürülüyor
            if (bmpGrnm != null)
                imgbase64 = Base64.encodeToString(fnk.getBytesFromBitmap(bmpGrnm), Base64.DEFAULT); // Resmin Base64string alınıyor.

            urlParameters.add(new BasicNameValuePair("resim", imgbase64)); // Resmin base64 string i gönderilmek üzere diziye ekleniyor.

            httpPost.setEntity(new UrlEncodedFormEntity(urlParameters)); // bilgiler httpPost aktarılıyor

            // execute HTTP post request
            HttpResponse response = httpClient.execute(httpPost); // php dosyasına bilgiler post ediliyor.
            HttpEntity resEntity = response.getEntity(); // gelen bilgi alınıyor

            if (resEntity != null) {
                String responseData = EntityUtils.toString(resEntity).trim(); // gelen bilgi okunuyor.
                return new JSONObject(responseData); // jsonobject atılıp geri bilgiyi jsonobject olarak geri dönderiyor.
            }

        } catch (NullPointerException e) {
            e.printStackTrace();
            ercnt = e.toString();
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            ercnt = e.toString();
            return  null;
        }
        return  null;
    }

    public class PostDataAsyncTask extends AsyncTask<String, String, String> {

        protected void onPreExecute() {
            super.onPreExecute();
        }

        String snc;
        String msg;
        JSONObject json;
        @Override
        protected String doInBackground(String... strings) {
            String[] dataName = null;
            if (strings[0].equals("strimg")) { //buradaki protokol iğer yapıcağımız postları ayırmak için kullanılmıştır. Protokol olmak zorundadır. İsterseniz kendinize farklı bir kontrolde oluştrabilirsiniz ben böyle yaptım.
                dataName = new String[]{"protokol", "mesaj"};
            }

            json = post(strings, dataName); // strings gönderilecek bilgiler dataName php de alınacak bilgiler
            if(json != null) {
                try {
                    if (strings[0].equals("strimg")) { // En iyi kontrol yapısı oluşturma.

                        snc = json.getString("sonuc");
                        msg = json.getString("sonucmesaji");

                    } else
                        return "seçim yok.";

                    return strings[0]; // kontrol edilecek değer.
                } catch (NullPointerException e) {
                    e.printStackTrace();
                    ercnt = e.toString();
                } catch (Exception e) {
                    e.printStackTrace();
                    ercnt = e.toString();
                }
                return "try json error";
            }
            else
                return "null";
        }

        @Override
        protected void onPostExecute(String cvp) {
            if(cvp.equals("seçim yok"))
                fnk.msgFragmentBox("Durum","Seçim Yanlış.","","","Tamam");
            else if(cvp.equals("try json error"))
                fnk.msgFragmentBox("Durum","try json error:\n"+ ercnt,"","","Tamam");
            else if(cvp.equals("null"))
                fnk.msgFragmentBox("Durum","Null:\n"+ ercnt,"","","Tamam");
            else if(cvp.equals("strimg"))
            {
                if (snc.equals("yes")) {
                    // başarıyla mesaj gönderildi
                } else {
                    // mesaj gönderilirken hata oluştu msg değişkeni hata mesajını verir
                }
            }
        }
    }

Kullanımı.

String[] data = {"strimg", "İlk Mesajım"};
new PostDataAsyncTask().execute(data);

PHP Dosyası
 

<?php

	include "../ayarlar.php";
	$msj = $_POST["mesaj"];	
	$rsm = $_POST["resim"];
	if($msj != "" && $rsm != "")
	{
			$query = $db->prepare("INSERT INTO mesajlar SET

			mesaj = ?, resim = ?");

			$insert = $query->execute(array(

				$msj, $rsm

			));

			if ( $insert ){ // mesaj başarıyla eklendi.
				$cevap = array('sonuc' => "yes", 'sonucmesaji' => "Başarıyla Mesaj Gönderildi.");
			}
            else
 			$cevap = array('sonuc' => "no", 'sonucmesaji' => "Mesaj eklenirken hata");		

	}
	else
	    $cevap = array('sonuc' => "no", 'sonucmesaji' => "Gerekli Yerleri Doldurunuz.");
	
    echo json_encode($cevap);

 ?>

 

picture-57908-1460820411.jpg
mesutpiskin
19.12.2015 - 08:36

Mobil cihazlar üzerinde bir sql server veya mysql server client çalıştırmak çok zor çünkü çok fazla sistem kaynağı tüketecektir bunu yapabilirsin (Radstudio veya android sql client) ama ağlantı sorunları yaşadğını göreceksin.En mantıklı 2 çözüm var.

1.Çözüm

Bir web uygulaması yazarsın örneğin bir php sayfası yazarsın bu php sayfası mysql veritabanına gider ve buradaki verileri JSON ve XML olarak listeler.Gelen isteklerden WHERE şartını alır ve tablolardan verileri çekersin.Uygulama ile bu sayfaya istek yapar ve oluşan JSON dosyasını alır parse eder sayafada gösterirsin.

2.Çözüm

Bir webservisi geliştirsin mobil cihazlar kolaylıkla bu servise bağlanıp fonksiyoları kullanabilir webservisi ile istediğin tablodan verileri çekip lsitelersin.

3.Çözüm

Daha statik bir şey istiyorsan bir XML veya JSON dosyası yaparsın bunlar il ilçeleri barındır bunu ftp'ye yüklersin uygulama ile sunucuya bağlanıp bu dosyayı okur ve listelersin.

picture-16705-1459978550.jpg
ramazan.akca
19.12.2015 - 03:12

Direk sunucuya uygulama üzerinden bağlantı yapmanı önermem çünkü kolaylıkla çözülebiliyor buda sorun demektir. Önerim bir tane web service yazarsın, web service ile veritabanını konuşturursun. Web service'den verileri json olarak alıp mobilde parse işlemi uygularsın.