Beyler öncelikle size fonk.java ımı paylaşıcam internette türkçe kaynak var ancak bunun bir class olarak paylaşım yapan yok sadece anlatımlar var ben kendi classımı paylaşıyorum sizlerle. Bazıların işine yarıcaktır.
Uzak veritabanı için kullanabileceğiniz.
Bir tane fonk.java oluşturuyoruz.
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.support.v4.app.ActivityCompat;
import android.widget.EditText;
import android.widget.Toast;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
/**
* Created by ProgrammerDky on 9.02.2016.
*/
public class fonk{
private Context cnt;
public fonk(Context c)
{
this.cnt = c;
}
String getStringPri(EditText edt) // bir edittext in geri değerini yani text bilgisini dönderir.
{
return edt.getText().toString().trim();
}
boolean getStringKntrl(String s) // bir string değerin boş olup olmadığına bakadar dönen değer ise boş ise false değilse true
{
return !s.equals("");
}
boolean strCntl(EditText edt) //bu ise bir edittext in text değeri boşmu değilmi kontrolünü yapar.
{
return getStringKntrl(getStringPri(edt));
}
String strCvrtUrl(String s) // site url sine ayarlar göre örneğin boşluk sorunu gibi düzeltmeler yapar.
{
try {
s = URLEncoder.encode(s, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return s;
}
public String SqlInject(String s) // bildiğiniz sqlinjectleri engellemek için bir önlem ek olarak buraya ekleyebilirsiniz.
{
s = s.trim();
s = s.replace("'", "''");
s = s.replace("-", "_");
s = s.replace("\\", "_");
s = s.replace("/", "_");
s = s.replace("=", "_");
s = s.replace("$","_");
s = s.replace(">","_");
s = s.replace("<","_");
return s;
}
public boolean internetErisimi() { // internet erişimi varmı yokmu kontrolü
ConnectivityManager conMgr = (ConnectivityManager)cnt.getSystemService(Context.CONNECTIVITY_SERVICE);
if (conMgr.getActiveNetworkInfo() != null && conMgr.getActiveNetworkInfo().isAvailable() && conMgr.getActiveNetworkInfo().isConnected())
return true;
else
return false;
}
public void yeniActivityAc(Class c, boolean kapat) // yeni bir activity açmak için bir basit bir fonksiyon eğer açıldıktan sonra bulunduğunuz activity kapanmasını istiyorsanız true değerini vermeniz yeterli.
{
Intent i = new Intent(cnt, c);
cnt.startActivity(i);
if(kapat)
((Activity) cnt).finish();
}
String asycTaskCnt = ""; //bunun sayesinde postlarımızı ayırabiliceğiz.
JSONObject json;
JSONObject execPost(String datas[]) {
try {
String url = "";
if (asycTaskCnt == "lgn") // örnek ayırma
url = "http://www.siteadi.com/mobil/login.php?kadi=" + strCvrtUrl(SqlInject(datas[0])) + "&sfr=" + strCvrtUrl(SqlInject(datas[1])) + "";
//else if () // bu şekilde birden fazla sorgu fonksiyonunu oluşturmanıza gerek yok.
else
return null;
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
HttpResponse response = null;
try {
response = client.execute(get);
} catch (IOException e) {
e.printStackTrace();
return null;
}
StatusLine status = response.getStatusLine();
int s = status.getStatusCode();
if (s == 200) {
HttpEntity e = response.getEntity();
String data = "";
try {
data = EntityUtils.toString(e);
} catch (IOException e1) {
e1.printStackTrace();
return null;
}
try {
JSONArray posts = new JSONArray(data);
JSONObject result = posts.getJSONObject(0);
return result;
} catch (JSONException e1) {
e1.printStackTrace();
return null;
}
} else
return null;
} catch (Exception exx) {
return null;
}
}
public class gonderiArkaPlan extends AsyncTask<String, String, String> {
String snc;
String msgx;
@Override
protected String doInBackground(String... strings) {
json = execPost(strings);
if(json == null)
{
return "json null";
}
else {
try {
if (asycTaskCnt == "lgn") { // geri dönen değerleri ayırarak alma
snc = json.getString("sonuc");
msgx = json.getString("sonucmesaji");
}
//else if() // bu şekilde devam edilebilir.
return snc;
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(String s) {
if (asycTaskCnt == "lgn") { // en son msj olarak ekrana dönen değerler için ayırma.
if (s.equals("yes")) {
Toast.makeText(cnt, "Başarıyla Giriş Yaptınız.", Toast.LENGTH_SHORT).show();
yeniActivityAc(Admin.class, true);
} else {
msgBox("Login","Kullanıcı Adı Veya Şifre Yanlış!", "", "","Tamam");
}
}
//else if() // bu şekilde devam edilebilir.
else if(s.equals("json null"))
msgBox("JSON EXEC","JSON EXEC Hatası lütfen yapımcıya bildiriniz.","","","Tamam");
}
}
void msgBox(String title, String msg, String ozel, String pztfStr, String ngtfStr) { // bildiğiniz gibi ekranda msj yollayıp ozel seçeği ilede burada belirterek istediğimizi yapabiliriz.
AlertDialog.Builder alertDialog = new AlertDialog.Builder(cnt);
alertDialog.setTitle(title);
alertDialog.setMessage(msg);
if(!pztfStr.equals("")) {
alertDialog.setPositiveButton(pztfStr, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
}
if(!ngtfStr.equals(""))
{
alertDialog.setNegativeButton(ngtfStr, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
}
alertDialog.show();
}
}
Kullanımı oldukça basit.
sayfanın en başına global şeklinde bu kodu ekleyelim.
fonk fnk = new fonk(this);
Daha sonra button yada herhangi bi olayda gerçekleştirmek istediğiniz sorgu için:
fnk.asycTaskCnt = "lgn";
String data[] = {fnk.getStringPri(edtKadi), fnk.getStringPri(edtSifre)};
fnk.new gonderiArkaPlan().execute(data);
yukarıda gördüğünüz gibi lgn sorgusunu yapmak istiyorum dedim. bu classta tanımlı ek sorgular için classtta belirtiğim else if kısımlarını doldurunuz.
Gördüğünüz gibi kullanıcı adı ve şifreyi gönderdim ve olması gereken herşey class içinerisinde tanımlı.
Buradaki data göndereceğiniz değerlerin o execpost fonksiyonundaki url kısmına göre doğru şekilde doldurursunuz.
--------------------------------------------------------------------------------------
Gelelim php kısmına
login.php isimli bir dosya oluşturdum.
- Unutmadan Kodlama tipinin utf-8 ile bom olmadan kodla seçeğini seçelim
- Sayfanın herhangi bir html içeriğin yada yazının falan olmamasına dikkat edelim.
<?php
require_once "database.php"; // database bağlantısını çektiğim bir php dosyası.
// mobilden girilen değeleri alıyoruz
$kadi = $_GET["kadi"];
$sfr = $_GET["sfr"];
$result = mysql_query("SELECT * FROM adminler"); // sorguyu böyle yapıyorum çünkü az kişi var veritabanımda sql inject önlemek amaçlı biliyorm where ile yapmayı yani :D
$drm = false;
while($row = mysql_fetch_array($result)) // bu array şeklinde tek tek satırlarımı okuyorum
{
$drm = true;
if($kadi == $row["kadi"] && $sfr == $row["sifre"]) // mobilden aldığımız değerlerle uyuşuyormu bakıyoruz.
{
$sonuc = array('sonuc' => "yes", 'sonucmesaji' => "Başarıyla Giriş yaptınız."); // eğer uyuşuyorsa sonuc dizimin içine sonuc yes ve sonucmeasj kısmına ne olduğunu yazıyorum.
}
else
$sonuc = array('sonuc' => "no", 'sonucmesaji' => "Kullanıcı Adı Veya Şifre Yanlış");
}
if(!$drm)
$sonuc = array('sonuc' => "no", 'sonucmesaji' => "Kullanıcı Bulunmamakta.");
mysql_free_result($result); // bu array hafızadan silmek için kullanılır performans attırmak için kullanmanızı tavsiye ederim.
echo "[".json_encode($sonuc)."]"; // burada json ekrana yazdırıyorum
// json encode bir diziyi ekrana yazdıracak. o diziyi bizde çekiyoruz bu sayede ne olduğunu anlıyoruz.
?>