#ANDROID - FileOutputStream ile Dosyaya Veri Yazma ve Okuma (AsyncTask ile)
Bu makalemizde bir dosyaya veri yazıp bu yazdığımız veriyi okuyacağız. Layout olarak bir önceki makalede SharedPreference uygulamasında kullandığmız dosyayı kullancağız. Çünkü tasarım olarak değişiklik gerektirecek bir şey yok.
Önceki makale: http://www.hcengiz.com/2015/10/android-sharedpreference-ile-veri_7.html
Dediğim gibi daha önce oluşturduğumuz sharedpreference.xml dosyasının yanında yeni olarak InternalData.java adında bir dosya (class) oluşturuyoruz.
sharedpreference.xml dosyası:
InternalData.java dosyası:
Burada AsyncTask kullandık. Bu arka planda işlem yaparken kullanıcıya bir bilgi vs. bir şeyler göstermemizi tabiri caiz ise kullanıcıyı oyalamamızı sağlıyor.
Makale görseli:
Önceki makale: http://www.hcengiz.com/2015/10/android-sharedpreference-ile-veri_7.html
Dediğim gibi daha önce oluşturduğumuz sharedpreference.xml dosyasının yanında yeni olarak InternalData.java adında bir dosya (class) oluşturuyoruz.
sharedpreference.xml dosyası:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/etData" android:layout_width="match_parent" android:layout_height="wrap_content" > </EditText> <Button android:id="@+id/bKaydet" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Kaydet" /> <Button android:id="@+id/bGetir" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Veri Getir" /> <TextView android:id="@+id/tvSonuclar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="TextView" /> </LinearLayout>
InternalData.java dosyası:
package com.hakancengiz.blogders; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class InternalData extends Activity implements View.OnClickListener { Button kaydet, getir; EditText kaydedilecekVeri; TextView ekranaYaz; String DOSYA_ADI = "InternalString"; FileOutputStream fos; FileInputStream fis; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sharedpreference); ilkleme(); } private void ilkleme() { kaydet = (Button) findViewById(R.id.bKaydet); getir = (Button) findViewById(R.id.bGetir); kaydedilecekVeri = (EditText) findViewById(R.id.etData); ekranaYaz = (TextView) findViewById(R.id.tvSonuclar); kaydet.setOnClickListener(this); getir.setOnClickListener(this); try { fos = openFileOutput(DOSYA_ADI, MODE_PRIVATE); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bKaydet: String kaydedilecekData = kaydedilecekVeri.getText().toString(); try { fos = openFileOutput(DOSYA_ADI, MODE_PRIVATE); } catch (FileNotFoundException e) { e.printStackTrace(); } try { fos.write(kaydedilecekData.getBytes()); fos.close(); } catch (IOException e) { e.printStackTrace(); } break; case R.id.bGetir: new dosyamiOku().execute(DOSYA_ADI); break; } } public class dosyamiOku extends AsyncTask<String, Integer, String> { protected void OnPreExecute() { //İşlem başlamadan önce yapılacaklar. } @Override protected String doInBackground(String... params) { //İşlemleri yapacak olan kısım. String dosyadanOkunanVeri = null; try { fis = openFileInput(DOSYA_ADI); byte[] okunanByteDizisi = new byte[fis.available()]; while (fis.read(okunanByteDizisi) != -1) { dosyadanOkunanVeri = new String(okunanByteDizisi); } fis.close(); return dosyadanOkunanVeri; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } protected void onProgressUpdate() { //İşlemi güncelleme. } protected void onPostExecute(String result) { //İşlem bittikten sonra olacaklar. ekranaYaz.setText(result); } } }
Burada AsyncTask kullandık. Bu arka planda işlem yaparken kullanıcıya bir bilgi vs. bir şeyler göstermemizi tabiri caiz ise kullanıcıyı oyalamamızı sağlıyor.
- onPreExecute() : AsyncTask ile yapılmasını istedğimiz arkaplan işlemi başlamadan bu metod çağrılır. Set işlemlerini gerçekleştirmek için en uygun metottur.
- doInBackground(Params… params) : onPreExecute() metodundan hemen sonra çalışır. Arkaplan işleminin yapıldığı kısımdır. Bu metod içine uzun süreceğini düşündüğümüz işlemleri kodlarız. Arkaplan işlemi bitince onPostExecute() metodu çağrılır.
- onPostExecute(Result result) : doInBackground() da yapılan işlem biter bitmez çağrılır. Arkaplan işleminin döndüğü değerleri handle ettiğimiz yerdir. ProgressDialog gibi bilgilendirme ekranları, bu metod içinde dismiss edilir.
- onProgressUpdate() : Yapılan işlemin ilerleyişi hakkında bilgi verir
Makale görseli:

Hiç yorum yok :
Yorum Gönder