Category Archives: Android

نرم‌افزار اندروید خط میخی با کیبورد فارسی

آشنایی با برنامه خط میخی همراه با کیبورد فارسی

تاریخ و تمدن و دستاورد های پیشینیان ما یکی از مواردی است که معمولا برای هر نسلی مهم است و ما بسیار به آن میبالیم. ولی به نظر میرسه که همیشه اون قدر ها که باید به تاریخ و تمدنی که داریم اهمیت نمیدیم و از چیز هایی که از آن زمان باقی مانده مراقب نمی‌کنیم

برای همین و با توجه به علاقه ای که خط میخی داشتیم برسی هایی رو انجام دادیم و متوجه شدیم که تعداد برنامه های بسیار کمی در این زمینه وجود دارد و همان برنامه هاییم که ساخته شده اند کیفیت بسیار پایینی دارند و باگ های فراوانی داشتند پس دست به کار شدیم و با مطالعه منابع موجود توانستیم یک برنامه با کیفیت برای ایرانیان ایجاد کنیم و آن را کاملا رایگان در اختیار کاربران قرار دادیم

از ویژگی هایی که بسیار برای ما مهم بود ایجاد ظاهر مناسب و کیبورد فارسی مدرن بود ما ابتدا یک نسخه از این برنامه رو ایجاد کردیم اما دیدیم که آن چیزی که مدنظرمون بود نیست پس دوباره شروع به برسی و مطالعه کردیم که بهترین روش برای ایجاد این اپلیکیشن را بدست آوریم و در نهایت آن را ایجاد و در بازار و مایکت منتشر کردیم

تجربه بسیار لذت بخشی برای ما بود که روی چیزی کار کنیم که به بخش کوچکی از فرهنگ و تمدن ایران پرداخته

از قابلیت های این برنامه می‌توان به:

  • کیبورد فارسی و مدرن به سبک Gboard
  • نمایش متن فارسی و خط میخی هم زمان
  • قابلیت حذف و ویرایش متن به سادگی
  • قابلیت نوشتن اعداد به خط میخی
  • قابلیت کپی خط میخی
  • دارای تم های مختلف
  • دارای آموزش خط میخی

لینک های دانلود برنامه :

دانلود از کافه بازار  |  دانلود از مایکت


آموزش استفاده از دیتابیس در اندروید

در ساخت برنامه های همیشه ممکن است نیاز داشته باشیم یک سری از اطلاعات را ذخیره و بازیابی کنیم در برنامه های اندروید راه حل منطقی استفاده از دیتابیس sqlite است .

در این آموزش نحوه استفاده آسان و سریع از این دیتابیس آموزش داده می شود برای شروع کار ابتدا کتابخانه KDB را که کار آن ساده کردن کار با دیتابیس هست را به پروژه خود اضافه میکنیم 

allprojects {
  repositories { 
   ...
   maven { url 'https://jitpack.io' }
  }
}


dependencies {
          ...
         implementation 'com.google.code.gson:gson:2.2.4'
         implementation 'com.github.parsgit:KDB:1.0.1'
	}

در مرحله اول شما باید یک دیتابیس ایجاد کنید برای ایجاد دیتابیس از کد زیر استفاده میکنیم در صورتی که دیتابیس وجود نداشت ایجاد خواهد شد

KDB.init(MainActivity.this,"db_name");

به جای عبارت db_name می توانید نام دلخواه خود را بنویسید

در مرحله دوم باید جدول های( table )  مورد نظر خود را ایجاد کنیم به مثال زیر توجه کنید

KDB.CreateTableQuery createTableQuery=new KDB.CreateTableQuery();
createTableQuery.Table("users")
                .Column("id").INTEGER().KEY_AUTO().Add()
                .Column("name").TEXT().Add()
                .Column("username").TEXT().NULL_ABLE(false).Add()
                .Column("age").INTEGER().DEFAULT(0).Add()
                .Build();

فرض کنید ما میخواهیم اطلاعات یک سری کاربر را که شامل نام و نام کاربری و سن می باشد را ذخیره کنیم پس با کد بالا جدولی به اسم users ایجاد میکنیم جدول users باید داری ستون هایی با نام های id , name , username , age باشد تا بتوانیم اطلاعات را در انها ذخیره کنیم 

توضیح : در این قسمت از کد

 Column("age").INTEGER().DEFAULT(0).Add

ستون age ( سن ) را ایجاد میکنیم و نوع آن را عدد صحبح ( INTEGER )  و مقدار پیش فرض را صفر در نظر گرفته ایم

تا اینجا ما یک دیتابیس به همراه جداول مربوطه ایجاد کردیم حالا نوبت آن رسیده که اطلاعاتی را در دیتابیس ذخیره کنیم برای ذخیره اطلاعات در sql از دستور INSERT استفاده میکنیم

KDB.query("insert into users (name,username,age) values ('beny','nitrocode.ir',24)") .exec();

// یا به صورت زیر عمل میکنیم

JsonObject values=new JsonObject();
        values.addProperty("name","beny");
        values.addProperty("username","nitrocode.ir");
        values.addProperty("age",24);

        KDB.query("insert into users (name,username,age) values (:name,:username,:age)",values)
                .exec();

با استفاده از کتابخانه KDB می توان مقدار پارامتر ها را به صورت جیسون ابجکت یا ارایه لیست ارسال کرد در قسمت دوم کد بالا ما یک متغیر جیسون آبجک با نام values ایجاد کردیم و مقادیر name , username , age را مقدار دهی کردیم .

روش سوم مقدار دهی پارامتر ها به صورت ارایه لیست هست که من خودم بیشتر از این روش استفاده میکنم در کد زیر می توانید نحوه کار را مشادهد کنید

ArrayList<String> params=new ArrayList<>();
        params.add("myname-test");
        params.add("abcd");
        params.add("24");

        KDB.query("insert into users (name,username,age) values (?,?,?)",params).exec();

در روش سوم باید ترتیب ورود اطلاعات را در نظر داشته باشد

SELECT ( بازیابی اطلاعات ثبت شده )

برای فراخانی اطلاعات از دیتابیس از دستور SELECT استفاده میکنیم چند روش مختلف SELECT را مشاهده کنید

JsonArray result = new JsonArray();

// دریافت تمام اطلاعات ثبت شده در جدول
result = KDB.query(" select * from users ").getJsonArray();

//دریافت اطلاعات یک کاربر بر اساس نام کاربری
ArrayList<String> params=new ArrayList<>();
params.add("nitrocode.ir");

result = KDB.query(" select * from users where username = ? ",params);

// دریافت اطلاعات کاربرانی که سنشان بیشتر از 20 سال است
ArrayList<String> params=new ArrayList<>();
params.add("20");

result = KDB.query(" select * from users where age > ? ",params);


 

UPDATE ( ویرایش اطلاعات )

در این مثال فرض میکنیم اطلاعات کاربری به نام علی در دیتابیس ما وجود دارد

// اطلاعات فرضی کاربر در دیتابیس ما
name      : ali
username  : ali156
age       : 18

که ما می خواهیم سن او را که در دیتابیس 18 ثبت شده به 30 تغییر دهیم

JsonObject values=new JsonObject(); values.addProperty("username","ali156"); values.addProperty("age",30);

KDB.query(" update users set age = :age where  username = :username",values).exec();

با اجرای کد بالا اطلاعات کاربر با نام کاربری ali156 جستجو می شود و سن او به 30 تغییر پیدا می کند

DELETE ( حذف اطلاعات )

ArrayList<String> params=new ArrayList<>();
params.add("ali157");

KDB.query(" delete from users username = ? ").exec();

این کد اطلاعات ali را حذف میکند


ارتباط سریع با اینترنت در اندروید

کتابخانه های زیاد برای برقراری ارتباط با اینترنت برای اندروید وجود دارد اما یک کتابخانه جامع که بتونه اکثر نیاز های ما را هنگام برنامه نویسی رفع کنه خیلی مفید خواهد بود همچنین این کتابخونه باید به گونه ای باشه که کار باهاش ساده باشه و برنامه نویس را زیاد درگیر کدنویسی نکنه درواقع کدنویسی رو برای ما کاهش بده کتابخونه ای که در ادامه معرفی میکنیم دارای این ویژگی ها مفید است پس این کتابخونه را از دست ندهید 🙂

نام این کتابخونه : Fast Android Networking Library

نحوه استفاده :

برای افزودن این کتابخونه به پروژه کد زیر رو در build.gradle خود اضافه کنید

compile 'com.amitshekhar.android:android-networking:1.0.0'

برای اجازه دسترسی با اینترنت هم باید کد زیر رو در manifest پروژتون اضافه کنید

در متد onCreate کلاس application کد زیر رو مینویسیم این کد کتابخونه ما رو مقدار دهی اولیه  میکنه و برای استفاده اماده میکنه

AndroidNetworking.initialize(getApplicationContext());

// Adding an Network Interceptor for Debugging purpose:
OkHttpClient okHttpClient = new OkHttpClient().newBuilder().addNetworkInterceptor(new StethoInterceptor()).build();
AndroidNetworking.initialize(getApplicationContext(),okHttpClient);

Making a GET Request :

AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}")
                 .addPathParameter("pageNumber", "0")
                 .addQueryParameter("limit", "3")
                 .addHeaders("token", "1234")
                 .setTag("test")
                 .setPriority(Priority.LOW)
                 .build()
                 .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                      // do anything with response
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error
                    }
                });

 

 

Making a POST Request

AndroidNetworking.post("https://fierce-cove-29863.herokuapp.com/createAnUser")
                 .addBodyParameter("firstname", "Amit")
                 .addBodyParameter("lastname", "Shekhar")
                 .setTag("test")
                 .setPriority(Priority.MEDIUM)
                 .build()
                 .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                      // do anything with response
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error
                    }
                });

You can also post java object, json, file, etc in POST request like this.

User user = new User();
user.firstname = "Amit";
user.lastname = "Shekhar";

AndroidNetworking.post("https://fierce-cove-29863.herokuapp.com/createUser")
                 .addBodyParameter(user) // posting java object
                 .setTag("test")
                 .setPriority(Priority.MEDIUM)
                 .build()
                 .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                      // do anything with response
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error
                    }
                });


JSONObject jsonObject = new JSONObject();
try {
    jsonObject.put("firstname", "Amit");
    jsonObject.put("lastname", "Shekhar");
} catch (JSONException e) {
  e.printStackTrace();
}
       
AndroidNetworking.post("https://fierce-cove-29863.herokuapp.com/createUser")
                 .addJSONObjectBody(jsonObject) // posting json
                 .setTag("test")
                 .setPriority(Priority.MEDIUM)
                 .build()
                 .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {
                      // do anything with response
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error
                    }
                });
                
AndroidNetworking.post("https://fierce-cove-29863.herokuapp.com/postFile")
                 .addFileBody(file) // posting any type of file
                 .setTag("test")
                 .setPriority(Priority.MEDIUM)
                 .build()
                 .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                      // do anything with response
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error
                    }
                });

Using it with your own JAVA Object – JSON Parser

/*--------------Example One -> Getting the userList----------------*/
AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAllUsers/{pageNumber}")
                .addPathParameter("pageNumber", "0")
                .addQueryParameter("limit", "3")
                .setTag(this)
                .setPriority(Priority.LOW)
                .build()
                .getAsObjectList(User.class, new ParsedRequestListener<List<User>>() {
                    @Override
                    public void onResponse(List<User> users) {
                      // do anything with response
                      Log.d(TAG, "userList size : " + users.size());
                      for (User user : users) {
                        Log.d(TAG, "id : " + user.id);
                        Log.d(TAG, "firstname : " + user.firstname);
                        Log.d(TAG, "lastname : " + user.lastname);
                      }
                    }
                    @Override
                    public void onError(ANError anError) {
                     // handle error
                    }
                });
/*--------------Example Two -> Getting an user----------------*/
AndroidNetworking.get("https://fierce-cove-29863.herokuapp.com/getAnUserDetail/{userId}")
                .addPathParameter("userId", "1")
                .setTag(this)
                .setPriority(Priority.LOW)
                .build()
                .getAsObject(User.class, new ParsedRequestListener<User>() {
                     @Override
                     public void onResponse(User user) {
                        // do anything with response
                        Log.d(TAG, "id : " + user.id);
                        Log.d(TAG, "firstname : " + user.firstname);
                        Log.d(TAG, "lastname : " + user.lastname);
                     }
                     @Override
                     public void onError(ANError anError) {
                        // handle error
                     }
                 }); 
/*-- Note : YourObject.class, getAsObject and getAsObjectList are important here --*/

دانلود یک فایل از سرور

AndroidNetworking.download(url,dirPath,fileName)
                 .setTag("downloadTest")
                 .setPriority(Priority.MEDIUM)
                 .build()
                 .setDownloadProgressListener(new DownloadProgressListener() {
                    @Override
                    public void onProgress(long bytesDownloaded, long totalBytes) {
                      // do anything with progress  
                    }
                 })
                 .startDownload(new DownloadListener() {
                    @Override
                    public void onDownloadComplete() {
                      // do anything after completion
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error    
                    }
                });

اپلود فایل به سرور

AndroidNetworking.upload(url)
                 .addMultipartFile("image",file)    
                 .addMultipartParameter("key","value")
                 .setTag("uploadTest")
                 .setPriority(Priority.HIGH)
                 .build()
                 .setUploadProgressListener(new UploadProgressListener() {
                    @Override
                    public void onProgress(long bytesUploaded, long totalBytes) {
                      // do anything with progress 
                    }
                 })
                 .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                      // do anything with response                
                    }
                    @Override
                    public void onError(ANError error) {
                      // handle error 
                    }
                 });

دریافت و ارسال به سرور با کتابخانه volley

volley یک کتابخونه سبک و سریع برای برقراری ارتباط ارسال و دریافت اطلاعات از سرور توسط برنامه اندرویده و کارکردن باهاش تقریبا خیلی ساده است.

برای افزودن کتاب خونه volley به برنامه خود کد زیر را در gradle قرار دهید و پروژه رو sync new کنید

Github : android-volley

compile 'com.mcxiaoke.volley:library:1.0.19'

برای دریافت متن به صورت string به صورت زیر عمل می کنیم

RequestQueue queue = Volley.newRequestQueue(this);

StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {

    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {


    }
});
queue.add(stringRequest);

به جای کد Request.Method.POST می تونید Request.Method.GET رو استفاده کنید که بستگی به کد سمت سرورتون داره درواقع نوع متد ارتباط رو انتخاب میکنیم

نحوه ارسال پارامتر هم به صورت زیر انجام میشه

RequestQueue queue = Volley.newRequestQueue(this);
StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {

    }
}){
    @Override
    public Map<String,String> getParams(){
        Map<String,String> params=new HashMap<>();
        params.put("id","12");
        return  params;
    }
};
queue.add(stringRequest);

در این مثال پارامتر id با مقدار 12 را به سرور به صورت GET ارسال و پاسخ سرور را در قسمت onResponse دریافت میکنیم


جستجوی هوشمند