🙂 İNSANLARIN EN HAYIRLISI INSANLARA FAYDALI OLANDIR 🙂

Ramazan HABER / Android RMOS / ÇOK ÖNEMLİ BİLGİ WEB SERVİS RETROFİT

1-) Android RMOS - ÇOK ÖNEMLİ BİLGİ

 

RETROFİT AYNI ANDA WEB SERVİS GÖNDERİR EĞER VERİ TABANI YÖNETİM CLASIN STATİK OLURSA METOTLARA AYNI ANDA GİRER VE HATAYA SEBEP OLUR BU YÜZDEN STATİK OLMADAN BİR YAPI KURMAMIZ GEREKİR HER İSTEK İÇİN NEW İLE NESNE OLUŞTURUP KENDİ NESNESİNİ KULLANMASI GEREKİR ÖRNEK

 

using System.Data;

using System.Net;

using System.Net.Http;

using System.Web.Http;

 

namespace RmosSayApi.Controllers

{

 public class BarkodController : ApiController

    {

        public  HttpResponseMessage GetCari()

        {

 

            RHVeritabani veri = new RHVeritabani();// BURASI ÇOK ONEMLI NESNE OLUŞTURUYOR

            DataTable dt = veri.MyGetDataTable("select Plan_Id,plan_kod,plan_ad from muh_plan where Plan_Grup=2 and plan_kod like '320%'");

 

            //DataTable dt = new DataTable();

            //dt.Columns.Add("ad");

            //DataRow dr = dt.NewRow();

            //dr["ad"] = "ramazan";

            return Request.CreateResponse(HttpStatusCode.OK, dt);

 

        }}}

 

 

//////////////RHVeritabani.CS/////////////////////////////

using System;

using System.Data.SqlClient;

using System.Data;

using System.Collections.Generic;

using System.Configuration;

 

namespace RmosSayApi.Controllers

{

    public class RHVeritabani

    {

 

        public  SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ToString());

        public  string MyClassIsmi = "RHVeritabani";

         SqlTransaction tran;

 

 

        /// <summary>

        /// Veri tabanı bağlantıları için constructor(kurucu metot)

        /// </summary>

        /// <param name="pServerName"></param>

        /// <param name="pVeriTabani"></param>

        /// <param name="pUserName"></param>

        /// <param name="pPassword"></param>

        public  void MyServerInfo(string pServerName, string pVeriTabani, string pUserName, string pPassword) // KULLANILMIYOR ARTIK

        { // yüklenince

            try

            {

                con = new SqlConnection("server=" + pServerName + "; Initial Catalog=" + pVeriTabani + ";User id=" + pUserName + ";Password=" + pPassword);

            }

            catch (Exception ex)

            {

                Console.WriteLine(MyClassIsmi, "RHVeritabani_C", "Bağlantı Açılamıyor!", ex);

            }

        }

 

        /// <summary>

        /// Transaction başlatır

        /// </summary>

        public  void MyBeginTransaction()

        {

            try

            {

                MyOpen();

                tran = con.BeginTransaction();

            }

            catch (Exception ex)

            {

                Console.WriteLine(MyClassIsmi, "MyBeginTransaction", "Beklenmedik Hata!", ex);

            }

        }

 

        /// <summary>

        /// Transaction kayıt eder

        /// </summary>

        public  void MyCommit()

        {

            try

            {

                MyOpen();

                tran.Commit();

            }

            catch (Exception ex)

            {

                Console.WriteLine(MyClassIsmi, "MyCommit", "Beklenmedik Hata!", ex);

            }

        }

 

        /// <summary>

        /// Transaction iptal eder

        /// </summary>

        public  void MyRollback()

        {

            try

            {

                MyOpen();

                tran.Rollback();

            }

            catch (Exception ex)

            {

                Console.WriteLine(MyClassIsmi, "MyRollback", "Beklenmedik Hata!", ex);

            }

        }

 

 

        public  void MyOpen()

        {

            try

            {

                if (con.State == ConnectionState.Closed)

                { // kapalıysa aç

                    con.Open();

                }

            }

            catch (Exception ex)

            {

                Console.WriteLine(MyClassIsmi, "MyOpen", "Bağlantı Açılamıyor!", ex);

            }

        }

        public  void MyClose()

        {

            try

            {

                if (con.State == ConnectionState.Open)

                { // açıksa kapat

                    con.Close();

                }

            }

            catch (Exception ex)

            {

                Console.WriteLine(MyClassIsmi, "MyClose", "Bağlantı Kapatılamıyor!", ex);

            }

        }

 

        /// <summary>

        /// Gelen Sql Sorgusuna Göre Geriye DataTable Döndürür. Tablo Boş veya Sorgu hatalıysa NULL döner

        /// </summary>

        /// <param name="pSqlText"></param>

        /// <returns></returns>

        public  DataTable MyGetDataTable(string pSqlText) { // datatable boş ise veya hata verirse null döner

            try

            {

                    MyOpen();

                    SqlCommand command = new SqlCommand(pSqlText, con);

                    SqlDataReader dataReader = command.ExecuteReader();

                    DataTable dt = new DataTable();

                    dt.Load(dataReader);

                    foreach (System.Data.DataColumn col in dt.Columns) col.ReadOnly = false; //

                    dataReader.Close();

                    MyClose();

                    return dt;

            }

            catch (Exception ex)

            {

                Console.WriteLine(MyClassIsmi, "MyGetDataTable", "Beklenmedik Hata!", ex);

                MyClose();

                return null;

            }

        }

 

        /// <summary>

        /// insert,update,delete için Bu metodu kullan! HATALI VEYA YANLIŞ BİLGİ GİRİLİRSE -1 DÖNER

        /// </summary>

        /// <param name="pSqlText"></param>

        /// <returns></returns>

        public  int MySetQuery(string pSqlText)

        { // insert,update,delete de kullanılır. -1 dönerse hatalı veya yanlış giriştir. aksi durumda başarılı

            try

            {

                MyOpen();

                SqlCommand command = new SqlCommand(pSqlText, con);

                int value = command.ExecuteNonQuery();

                MyClose();

                return value;

            }

            catch (Exception ex)

            {

                Console.WriteLine(MyClassIsmi, "MySetQuery", "Beklenmedik Hata!", ex);

                MyClose();

                return -1;

            }

        }

        /// <summary>

        /// TOP 1 ile veya SUM,MAX gibi tek alan döndüreceksek kullanılır. Veri yoksa veya hataya düşerse -1 döner

        /// </summary>

        /// <param name="pDonecekDeger"></param>

        /// <param name="pSqlText"></param>

        /// <returns></returns>

        public  string MyGetItem(string pDonecekDeger, string pSqlText)

        { // hatalı veya veri yoksa -1 döner . aksi durumda veri döner. Dikkat tek değer döner "Top 1","id" gibi alanlar için kullan!

            try

            {

                MyOpen();

                string DonecekDeger = "-1";

                SqlCommand command = new SqlCommand(pSqlText, con);

                SqlDataReader dataReader = command.ExecuteReader();

                DataTable dt = new DataTable();

                dt.Load(dataReader);

                if (dt.Rows.Count > 0)

                { //

                    foreach (DataRow item in dt.Rows)

                    {

                        DonecekDeger = item[pDonecekDeger].ToString();

                    }

                }

                dataReader.Close();

                MyClose();

                return DonecekDeger;

            }

            catch (Exception ex)

            {

                MyClose();

                throw new Exception(ex.Message);

            }

        }

 

 

 

        /******** aşağısını procedure kullancaksan kullan *************/

        /*

          List<SqlParameter> sp = new List<SqlParameter>(){

                  new SqlParameter() {ParameterName = "@uArzIst_ad", Value =  txtAd.EditValue.ToString() }};

                RHVeritabani.MySetQuery_P("uArzIstEkle", sp);

                MyGridDoldur();

             */

        /// <summary>

        /// Procedureli -> insert,update,delete için Bu metodu kullan! HATALI VEYA YANLIŞ BİLGİ GİRİLİRSE -1 DÖNER

        /// </summary>

        /// <param name="spName"></param>

        /// <param name="sp"></param>

        /// <returns></returns>

        public  int MySetQuery_P(string pProcedureName, List<SqlParameter> pSqlParameter = null)

        {try

            {

                MyOpen();

                int value = -1;

                SqlCommand command = new SqlCommand(pProcedureName, con);

                command.CommandType = CommandType.StoredProcedure;

                if (pSqlParameter != null)

                {

                    command.Parameters.AddRange(pSqlParameter.ToArray());

                }

                value = command.ExecuteNonQuery();

                MyClose();

                return value;

            }

            catch (Exception ex)

            {

                Console.WriteLine(MyClassIsmi, "MySetQuery_P", "Beklenmedik Hata!", ex);

                MyClose();

                return -1;

            }

        }

        /* MySetQuery_P metodunun kullanımı aşağıda "SqlDbType" yazmaya bilirsin sıralamaya dikkat et yeter

         List<SqlParameter> sp = new List<SqlParameter>(){

    new SqlParameter() {ParameterName = "@uAlanTanim_ad", SqlDbType = SqlDbType.NVarChar, Value= txtAd.EditValue.ToString()},

    new SqlParameter() {ParameterName = "@uAlanTanim_durum", SqlDbType = SqlDbType.Bit, Value = radioAktif.Checked}};

                RHVeritabani.MySetQuery_P("uAlanTanimEkle", sp);

 

            // SqlDbType olmamış şeklinde

            List<SqlParameter> sp = new List<SqlParameter>(){

    new SqlParameter() {ParameterName = "@uAlanTanim_ad", Value= txtAd.EditValue.ToString()},

    new SqlParameter() {ParameterName = "@uAlanTanim_durum", Value = radioAktif.Checked}};

                RHVeritabani.MySetQuery_P("uAlanTanimEkle", sp);

             */

 

        /******** aşağısını transaction kullancaksan kullan ve MyOpen ve Close lar arasına yaz çünkü onlar yok aşağıda *************/

 

        /// <summary>

        /// Gelen Sql Sorgusuna Göre Geriye DataTable Döndürür. Tablo Boş veya Sorgu hatalıysa NULL döner

        /// </summary>

        /// <param name="pSqlText"></param>

        /// <returns></returns>

        public  DataTable MyGetDataTable_T(string pSqlText)

        { // datatable boş ise veya hata verirse null döner

            try

            {

                SqlCommand command = new SqlCommand(pSqlText, con);

                command.Transaction = tran;

                SqlDataReader dataReader = command.ExecuteReader();

                DataTable dt = new DataTable();

                dt.Load(dataReader);

                foreach (System.Data.DataColumn col in dt.Columns) col.ReadOnly = false;

                dataReader.Close();

                return dt;

            }

            catch (Exception ex)

            {

                Console.WriteLine(MyClassIsmi, "MyGetDataTable", "Beklenmedik Hata!", ex);

                return null;

            }

        }

 

        /// <summary>

        /// insert,update,delete için Bu metodu kullan! HATALI VEYA YANLIŞ BİLGİ GİRİLİRSE -1 DÖNER

        /// </summary>

        /// <param name="pSqlText"></param>

        /// <returns></returns>

        public  int MySetQuery_T(string pSqlText)

        { // insert,update,delete de kullanılır. -1 dönerse hatalı veya yanlış giriştir. aksi durumda başarılı

            try

            {

                SqlCommand command = new SqlCommand(pSqlText, con);

                command.Transaction = tran;

                int value = command.ExecuteNonQuery();

                return value;

            }

            catch (Exception ex)

            {

                Console.WriteLine(MyClassIsmi, "MySetQuery", "Beklenmedik Hata!", ex);

                return -1;

            }

        }

        /// <summary>

        /// 1 tane değer döndüren SQL sorgularında Kullanılır. Örn : ID'ye göre Kodunu almak istersek veya TOP 1 ile veya SUM,MAX gibi tek alan döndüreceksek kullanılır.

        /// </summary>

        /// <param name="pDonecekDeger"></param>

        /// <param name="pSqlText"></param>

        /// <returns></returns>

        public  string MyGetItem_T(string pDonecekDeger, string pSqlText)

        { // hatalı veya veri yoksa -1 döner . aksi durumda veri döner. Dikkat tek değer döner "Top 1","id" gibi alanlar için kullan!

            try

            {

                string DonecekDeger = "-1";

                SqlCommand command = new SqlCommand(pSqlText, con);

                command.Transaction = tran;

                SqlDataReader dataReader = command.ExecuteReader();

                DataTable dt = new DataTable();

                dt.Load(dataReader);

                if (dt.Rows.Count > 0)

                { //

                    foreach (DataRow item in dt.Rows)

                    {

                        DonecekDeger = item[pDonecekDeger].ToString();

                    }

                }

                dataReader.Close();

                return DonecekDeger;

            }

            catch (Exception ex)

            {

                Console.WriteLine(MyClassIsmi, "MyGetItem", "Beklenmedik Hata!", ex);

                return "-1";

            }

        }

    }

}

 

 

2-) retrofitte timeout süresi ayarlama -> ServiceGenerator.java -> son hali bunu kullan

 

package com.webpos.ramazan.rmos.rmossay.WebServis;
import com.webpos.ramazan.rmos.rmossay.MainActivity;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class ServiceGenerator {
    
public static String baseUrl = MainActivity.MyWebServis;
    
public static Retrofit retrofit;
    
private static Retrofit.Builder builder = new Retrofit.Builder().baseUrl(baseUrl).addConverterFactory(GsonConverterFactory.create());
    
private static OkHttpClient.Builder httpClient = new OkHttpClient().newBuilder();
    
public static <S> S createService(Class<S> serviceClass) {

        
httpClient.connectTimeout(30, TimeUnit.SECONDS);
        
httpClient.readTimeout(30, TimeUnit.SECONDS);
        
httpClient.writeTimeout(30, TimeUnit.SECONDS);

        
builder.client(httpClient.build());
        
retrofit = builder.build();
        
return retrofit.create(serviceClass);
    }
}

 

 

 

 

 

 2021 Ocak 18 Pazartesi
 439