web service with android etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
web service with android etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

31 Mart 2016 Perşembe

Android ile Web Servis Kullanmak (Asp.Net) | asp.net web service use with Android (Video)

Asp.Web servisi oluşturuldu. Bu servisin içersinde sunucuya yüklenmiş olan veritabanına veri ekleme ve verileri getirme özellikleri içeren fonksiyonlar tanımlandı. Bu sayede Android uygulaması ile geliştirilen uygulamanın bu servisi kullanarak parametre göndermesi ya da bu servisten veri istekleri yapması sağlanmıştır. Böylece uygulama istekte bulunduğu web servis ile sunucudaki veritabanına ulaşması sağlanmıştır.

Birde bu yapıyı videolarla ve ya makale ile anlatmaya çalıştım. Kolay gelsin

1 - Somee.com'a üye olundu.



2 - VeriTabanı oluşturma ve bu veritabanını sunucuya yükleme işlemleri yapıldı.




3 - Asp.net Web servis projesi oluşturuldu. Web servis ile veri ekleme ve listeleme yapıldı. Web servis sunucuya yüklendi.



4 - Android uygulaması için proje oluşturuldu. Bu projenin ana menüsü tasarlandı ve çalışır hale getirildi.



5 - Android uygulaması ile web servis bağlandı. Web servise parametreler gönderilerek veri ekleme işlemi yapıldı.



6 - Android uygulama ile web servis bağlandı. Web servisten uygulamaya veriler getirildi ve veri listeleme yapıldı.



Projenin Dökümanları :
- Sql Veri Tabanı
- Asp.net web servis
- Android projesi

30 Mart 2016 Çarşamba

Android ile Web Servis Kullanmak (Asp.Net) | asp.net web service use with Android

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ı