Merhabalar arkadaşlar,
(Videolu anlatım)
Web Servis konusunda size yardımcı olmaya çalışacağım, Bu makalemde size android programlama yapanlar için, asp.net ile oluşturacağımız web servisini kullanmayı basit bir şekilde anlatmaya çalışacağım.
Öncelikle servisimiz için bir veritabanı oluşturalım. (
MsSql oluşturma)
Veritabanımız hazır sırada webservisimizi oluşturalım. (
Asp.net Web Servis Oluşturma)
Son olarak android ile bu servisleri kullanmak kaldı.
Android Studiomuzu açıyoruz ve yeni proje oluşturuyoruz. Projemizin adını WebServis koydum ve next dedim;
sonraki ekranda hiç bir değişiklik yapmadan next diyerek geçiyorum;
sonraki ekranda boş bir aktivity projesi seçeceğim. Bunun için "Add No Activity" seçiyorum. Finish tıklıyorum. Projemin oluşmasını bekliyorum.
Projem oluştuktan sonra ekranın solundaki "Project" etiketine tıklayarak projenin dosya hiyerarşisini görüntülüyorum. Bu görüntünün "Android" dosya hiyerarşisi olmasını istiyorum.
Projeme ilk olarak bir java sınıfı eklemek istiyorum. Eklemek için com.webservis klasörünün üzerine sağ tıklıyorum sonra New>Java Class tıklıyorum. Yeni sınıfımın adını "MainActivity" yazıyorum ve OK tıklıyorum. artık yeni sınıfım eklenmiş oluyor. Yeni sınıfıma aşağıdaki kodları ekliyorum.
MainActivity.java
package com.webservis;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
Button bEkle, bListele, bSil;
TextView etIP;
String Url;
View.OnClickListener Listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
install_elements();
bEkle.setOnClickListener(Listener);
bListele.setOnClickListener(Listener);
}
private void activity(Class c)
{
Intent intent = new Intent(MainActivity.this,c);
intent.putExtra("Url", Url);
startActivity(intent);
}
private void install_elements() {
bEkle = (Button) findViewById(R.id.bEkleGit);
bListele = (Button) findViewById(R.id.bListeleGit);
etIP = (TextView) findViewById(R.id.etIP);
Url = "http://denemelerdenemeler.somee.com/"; //--> Somee.com
//Url = "http://10.7.1.183/"; //---> Ev ip
//Url = "http://10.7.1.113/"; //---> Okul ip
Listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bEkleGit: activity(Ekle.class); break;
case R.id.bListeleGit: activity(Listele.class); break;
default: break;
}
}
};
}
}
Bu sınıf için bir görünüm dosyası oluşturmam lazım. Bu dosyayı oluşturabilmek için dosya hiyerarşisideki res klasörüne sağ tıklıyorum. New>Android resource directory tıklıyorum ve "Directory Name" kısmına "layout" yazıyorum ve OK butonuna tıklıyorum. Bu sayede klasörümüze layout dosyasını eklemiş oluyoruz. Bu klasörün altında yeni bi dosya oluşturacağım. layout klasörünün üstüne sağ tıklıyorum New > Layout resource file tıklıyorum. "File name" kısmına "activity_main" yazıyorum ve OK tıklıyorum. Oluşturduğum bu dosyaya çift tıklıyorum ve aşağıdaki gibi layout dosyanın text kısmına giriyorum. Aşağıda text kısmının nerede olduğunu görebilirsiniz.
Bu kısma aşağıdaki kodlarımı ekliyorum:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_marginTop="100dp"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:id="@+id/bEkleGit"
android:text="Ekle"
android:layout_gravity="center"/>
<Button
android:layout_width="200dp"
android:layout_height="wrap_content"
android:id="@+id/bListeleGit"
android:text="Listele"
android:layout_gravity="center"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/abc_action_button_min_width_material"
android:id="@+id/etIP"/>
</LinearLayout>
Main Activity sınıfımız ile menü ekranımızı oluşturmuş oluyoruz. Bu ekranda Ekleme ve Listeleme butonları mevcuttur. Bu butonlara tıklandığında yeni görünümlere gidilecek. Bu görünümlerden ilki ekle görünümü. Öncelikle Ekle java sınıfımızı oluşturalım. Bunun için com.webservis klasörümüze sağ tıklayarak yeni bir java sınıfı oluşturacağız. Sınıfımızın adını "Ekle" koyuyorum. Aşağıdaki kodları bu sınıfıma ekliyorum.
Ekle.java
package com.webservis;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.net.URI;
import java.net.URLEncoder;
public class Ekle extends Activity {
EditText etIsim, etEmail;
Button bEkle;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ekle_main);
install_elements();
bEkle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new PhpGetSendWS().execute();
}
});
}
class PhpGetSendWS extends AsyncTask<String, String, String>
{
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
try {
HttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet();
String isim = URLEncoder.encode(etIsim.getText().toString(),"utf-8");
String email = URLEncoder.encode(etEmail.getText().toString(), "utf-8");
request.setURI(new URI(getIntent().getStringExtra("Url") +
"uyelik.asmx/UyeEkle?AdSoyad=" + isim + "&E_posta=" + email));
//Get isteğimizi URL yoluyla belirliyoruz.
if(!httpclient.execute(request).equals(null)) //İsteğimizi gerçekleştiriyoruz.
{
ToastYazdir("Eklendi");
Thread.sleep(1500);
Intent i = new Intent(Ekle.this,Listele.class);
i.putExtra("Url", getIntent().getStringExtra("Url"));
startActivity(i);
}
}catch (Exception e)
{
ToastYazdir("Hata oluştu.");
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
};
public static String convertStreamToString(java.io.InputStream is){
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
return s.hasNext() ? s.next():"";
}
private void ToastYazdir(final String str)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
}
});
}
private void install_elements()
{
etIsim = (EditText) findViewById(R.id.etIsim);
etEmail = (EditText) findViewById(R.id.etEmail);
bEkle = (Button) findViewById(R.id.bEkle);
}
}
Bu kodları Ekle sınıfımıza ekledikten sonra Http kütüphanesini dosyamıza dahil etmeliyiz.
Http Kütüphanesini Ekledikten sonra Ekle sınıfımızın layout dosyasını ekleyelim. Dosya hiyerarşisindeki layout klasörüne daha öncedende eklediğimiz gibi sağ tıklayarak "ekle_main" adında layout ekliyorum. Bu layouta çift tıklıyorum ve Text bölümüne aşağıdaki kodları yapıştırıyorum.
ekle_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:layout_marginTop="100dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Ad ve Soyad"
android:ems="10"
android:id="@+id/etIsim"
android:layout_gravity="center_horizontal" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:hint="Email"
android:ems="10"
android:id="@+id/etEmail"
android:layout_gravity="center_horizontal" />
<Button
android:layout_marginTop="50dp"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="Ekle"
android:id="@+id/bEkle"
android:layout_gravity="center_horizontal" />
</LinearLayout>
Daha sonra ana ekranımızdaki listeleme özelliğini yapacağız. Bunun için Listele sınıfımı oluşturacağım. Oluşturabilmem için com.webservis dosyama sağ tıklıyorum ve yeni bir java sınıfını "Listele" adı altında ekliyorum. Bu sınıfıma aşağıdaki kodları ekliyorum.
Listele.java
package com.webservis;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Listele extends Activity {
ArrayAdapter<String> adapter;
String resp = null;
ArrayList<String> data = new ArrayList<>();
boolean post=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listele);
new AspData().execute();
}
public class AspData extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
/*
// GET METODU
DefaultHttpClient hc = new DefaultHttpClient();
ResponseHandler response = new BasicResponseHandler();
HttpGet http = new HttpGet(getIntent().getStringExtra("Url")+"uyelik.asmx/GetUyeler?");
try {
resp = (String) hc.execute(http, response);
resp = cutstring(resp);
JSONArray json = new JSONArray(resp);
for(int i=0;i<json.length();i++){
JSONObject e = json.getJSONObject(i);
data.add(e.getString("AdiSoyadi") + " - " + e.getString("Eposta"));
}
adapter = new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_list_item_1,data);
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
*/
// POST METODU
try
{
HttpClient httpClient=new DefaultHttpClient();
HttpPost httpPost=new HttpPost(getIntent().getStringExtra("Url")+"uyelik.asmx/GetUyeler");
HttpResponse httpResponse= httpClient.execute(httpPost);
resp = readResponse(httpResponse);
post = true;
resp = cutstring(resp);
JSONArray json = new JSONArray(resp);
for(int i=0;i<json.length();i++){
JSONObject e = json.getJSONObject(i);
data.add(e.getString("AdiSoyadi") + " - " + e.getString("Eposta"));
}
adapter = new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_list_item_1,data);
}
catch(Exception exception) {}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
ListView lv = (ListView) findViewById(R.id.myListView);
lv.setAdapter(adapter);
}
private String cutstring(String resp)
{
resp = resp.replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>", "");
resp = resp.replace("<string xmlns=\"http://tempuri.org/\">", "");
resp = resp.replace("</string>","");
if(!post)
resp = resp.substring(2,resp.length());
return resp;
}
public String readResponse(HttpResponse res) {
InputStream is=null;
String return_text="";
try {
is=res.getEntity().getContent();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(is));
StringBuffer sb = new StringBuffer();
String line="";
while ((line=bufferedReader.readLine())!=null)
{
sb.append(line);
}
return_text=sb.toString();
} catch (Exception e) { }
return return_text;
}
}
}
sonrasında bu sınıfın görünüm dosyasını ekliyorum. Bunun için layout klasörüme sağ tıklıyorum yeni bir layout dosyasını "listele" adı altında ekliyorum. eklediğim bu dosyanın Text bölümüne geçip aşağıdaki kodları ekliyorum.
listele.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/myListView"
android:background="@color/accent_material_light"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
projemin bütün sınıflarını ve görünümlerini tamamladım.Geriye tek bir adım kaldı buda AndroidManifest.xml dosyama aşağıdaki kodları eklemem. Bu kodlar Activity sınıfından kalıtım alan sınıfların görünümlerini sağlaması açısından luzumludur.
Android manifest dosyama;
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.webservis">
<application android:allowBackup="true" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher" android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Ekle" >
<intent-filter>
<action android:name="android.intent.action.EKLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name=".Listele" >
<intent-filter>
<action android:name="android.intent.action.LISTELE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
ekledikten sonra artık projemi çalıştırabilirim. Android studio da projemi çalıştırıyorum.
Run > Run 'app' (Shift + F10)
telefonda ilk olarak ekleme işlemi yapacağım bunun için Ekle butonuna tıklıyorum.
Ad Soyad ve Email bölümüne verilerimi yazıyorum ve Ekle butonuna tıklıyorum. Eklendi uyarısını aldıktan sonra listeleme ekranına yönlendirme yapıldı.
Görüldüğü gibi listeleme ekranında girdiğim veri görüntülendi.
Evet arkadaşlar Asp.net ile Web servisimizi oluşturduk, Sql veritabanımız ile web servisimizi bağladık ve android ile bu servisi kullandık. Buradaki ekranlarımız yaptığımızın uygulamanın görüntüleridir. Herhangi bir sorun olursa yorum olarak belirtirseniz yardımcı olmaya çalışacağım.
Proje Dökümanları :
-
Sql Veri Tabanı
-
Asp.WebServis
-
Android Uygulaması