Tuesday, March 31, 2015

Android - Aplikasi E-Commerce - JSONParser PHP MySql, display data in a ListView and GridView

Catatan ane kali ini masih tentang pembuatan aplikasi yang di jalankan di android yaitu aplikasi e commerce. Dimana data diambil dari database mysql dengan menguunakan JSONParser. Data berupa gambar dan data lainnya yang biasa di gunakan untuk e commerce gitulah ( lagi ndak semangat bikin catatan sebenarnya nih, bro...:p).

Sebernarnya aplikasi ini mau tak ikutin dalam sebuah project di salah satu situs freelance, tapi otak benar-benar lagi mupeng, logika ndak jalan, jadinya ane share () di mari, silahkan lihat videonya bro:



Disini, data yang diambil dari mysql, ane tampilkan dalam dalam bentuk ListView dan Gridview pada android. Detail dan penambahan menu ane sertakan, Udah langsung aja, bro, lihat tampilannya App-nya seperti di bawah berikut :

 
       Item dengan GridView                           Menu Bottom

 
       Item dengan ListView                       AboutUs Dialog

                 Detail Item
        
Berikut untuk input data nya di admin panel web e-commerce, bro..


Berikut juga, data di databasenya di localhost, bro...


Karna jika ane tulis codenya begitu panjang, dan berhubung ane juga lagi ndak semangat untuk jelasin, silahkan download dan pelajari aje filenya di mari (kalo ada yang mau seh) -> Download

Sekian aje, ane lagi kangen lihat rembulan menyapa dengan cahaya indahnya (entah kapan, lagi redup kayaknya..!!!)...:p

Happy Ngopi and Ngoding,,,


Saturday, March 21, 2015

Aplikasi MyLyric - SQLite CRUD Android

Akhirnya matahari kembali bersinar menyinari belahan bumi ini, menyinari embun-embun di ujung dedaunan. Berkilau. Menyejukkan mata.

Mata tak lagi terpejam. Rasa gelisah, resah menghantui pelupuk mata. Menusuk hingga ruang kesabaran jiwa.

Ahh..kemana sang rembulan?.. tak lagi berbagi cahaya!, tak lagi menyinari indahnya malam. meninggalkan kegelapan. hilang dalam sunyi malam. 

Oke, kata-kata mutiaranya segitu aja, :p . Lanjut tutorial karna ane ndak bisa tidur semalam jadinya iseng-iseng mainin eclipse.

Kali ini, Ane berbagi catatan tentang membuat aplikasi MyLyric di Android dengan menggunakan bawaan database SQLite di android. Dimana, disini telah di lengkapi dengan fitur CRUD ( Create, Read, Update dan Delete ).  

Berikut Tampilannya:

                    List Lyric                                       Lyric

                 Tambah Lyric                                 Edit Lyric

   Alert Dialog Update & Delete        Alert Dialog Confirm Delete

Disini ane memanfaatkan beberapa file XML untuk  UI-nya dan beberapa file JAVA, Ane tidak tampilin semua, file-filenya, download aja file lengkapnya di akhir catatatn ini untuk bisa dipelajari atau di kembangkan lagi. 

Berikut file main.xml nya: 

  

    
 
 
 

 
 
 
 
 
     
         
      
 
 
 
    


Berikut file MainActivity.java nya

package com.mylyrik.yonandroid;

import java.util.ArrayList;

import com.mylyrik.yonandroid.adapter.LyrikAdapter;
import com.mylyrik.yonandroid.database.LyrikDB;
import com.mylyrik.yonandroid.model.Lyrik;

import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;


public class MainActivity extends DashBoardActivity {
 
 private ListView lsvLyrikView = null;
 private LyrikAdapter adapter  = null;
 private LyrikDB lyrikdb     = null;
 private SQLiteDatabase db     = null;
 private ArrayList listLyrik = null;
 private EditText txtSearchText = null;
 private TextView txtNoDataLyrik;
 AlertDialog.Builder alertDialogConfirmDelete = null;
 private Lyrik lyrikIWantToDelete = null;
 public static String id       = "";
 public static String judul    = "";
 public static String penyanyi = "";
 public static String isi      = "";
 private static void getId(String id) { MainActivity.id = id; }
 private static void getJudul(String judul) { MainActivity.judul = judul; }
 private static void getPenyanyi(String penyanyi) {MainActivity.penyanyi = penyanyi;}
 private static void getIsi(String isi) { MainActivity.isi = isi; }
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
        setContentView(R.layout.main);
        setHeader(getString(R.string.HomeActivityTitle), false, true);
    
        if (getIntent().getBooleanExtra("EXIT", false)) {
            finish();
        }
        
        txtNoDataLyrik = (TextView) findViewById(R.id.txtNoDataLyrik);
        lsvLyrikView   = (ListView) findViewById(R.id.lsvListLyrik);
        lsvLyrikView.setOnItemClickListener(new OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView parent, View view,int position, long id) {
    String _id       = ((TextView) view.findViewById(R.id.txtId)).getText().toString();
    String _judul    = ((TextView) view.findViewById(R.id.txtJudul)).getText().toString();
    String _penyanyi = ((TextView) view.findViewById(R.id.txtPenyanyi)).getText().toString();
    String _isi      = ((TextView) view.findViewById(R.id.txtIsi)).getText().toString();
    getId(_id);
    getJudul(_judul);
    getPenyanyi(_penyanyi);
    getIsi(_isi);
    Intent intent = new Intent(getApplicationContext(), DetailLyrik.class);
       overridePendingTransition( R.anim.slide_in_left, R.anim.slide_out_left );
       startActivity(intent);
   }
  });
        
        refreshListAdapter();
        registerForContextMenu(lsvLyrikView);
        
        txtSearchText = (EditText) findViewById(R.id.searchText);
  txtSearchText.addTextChangedListener( new TextWatcher() {
   
   @Override //we don't need this
   public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
   }
   @Override //we don't need this
   public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
     int arg3) {
   }
   @Override
   public void afterTextChanged(Editable text) {
    refreshListAdapter( text.toString() );
   }
  });
  
  DialogInterface.OnClickListener dialogConfirmDeleteClickListener = new DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
          switch (which){
          case DialogInterface.BUTTON_POSITIVE:
           if( lyrikIWantToDelete != null ) {
      Log.i("Log", "item " + lyrikIWantToDelete.getJudul() + " deleted!");
      showToast( "item " + lyrikIWantToDelete.getJudul() + " deleted!" );
      lyrikdb.delete(lyrikIWantToDelete);
      lyrikIWantToDelete = null;
      refreshListAdapter();
           }
              break;
          case DialogInterface.BUTTON_NEGATIVE:
              //No button clicked
              break;
          }
      }
  };
  
  alertDialogConfirmDelete = new AlertDialog.Builder(this);
  alertDialogConfirmDelete.setPositiveButton("Yes", dialogConfirmDeleteClickListener);
  alertDialogConfirmDelete.setNegativeButton("No", dialogConfirmDeleteClickListener);
    }
    
    // TODO Get data from database SQLite
    private void getListLyrik() { 
     lyrikdb = new LyrikDB(getApplicationContext());
  adapter = new LyrikAdapter(this);
  db = lyrikdb.getWritableDatabase();
  lyrikdb.createTable(db, getBaseContext());
  //lyrikdb.generateData(db);
  
    } 
    
    // TODO We need to refresh adapter for every data update. Without it, ListView will never be refreshed
 protected void refreshListAdapter() {
  try {
   getListLyrik();
  } catch(Exception e) {
         Toast.makeText(MainActivity.this, e.toString(), Toast.LENGTH_SHORT).show();
        } finally {
   listLyrik = lyrikdb.toArray();
   adapter.updatelistLyrik(listLyrik);
   lsvLyrikView.setAdapter(adapter);
   
   if (adapter.getCount() == 0) {
    txtNoDataLyrik.setVisibility(View.VISIBLE);
   } else {
    txtNoDataLyrik.setVisibility(View.GONE);
   }
        }
 }

 // TODO We need to refresh adapter for every data update. Without it, ListView will never be refreshed
 protected void refreshListAdapter(String filterText) {
  listLyrik = lyrikdb.toArray( filterText );
  adapter.updatelistLyrik(listLyrik);
  lsvLyrikView.setAdapter(adapter);
  
  if (adapter.getCount() == 0) {
   txtNoDataLyrik.setVisibility(View.VISIBLE);
  } else {
   txtNoDataLyrik.setVisibility(View.GONE);
  }
 }
 
 @Override
 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo cmInfo) {
  if (v.getId() == R.id.lsvListLyrik) {
   AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) cmInfo;
   menu.setHeaderTitle(listLyrik.get(info.position).getJudul());
   String[] menuItems = { "Update", "Delete" };
   
   for (int menuIndex = 0; menuIndex < menuItems.length; menuIndex++) {
    menu.add(Menu.NONE, menuIndex, menuIndex, menuItems[menuIndex]); 
   }
  }
 }

 @Override
 public boolean onContextItemSelected(MenuItem item) {
  AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
  int menuItemIndex = item.getItemId();
  Lyrik lyrik = listLyrik.get(info.position);

  switch (menuItemIndex) {
  case 0:
   String _id       = lyrik.getId();
   String _judul    = lyrik.getJudul();
   String _penyanyi = lyrik.getPenyanyi();
   String _isi      = lyrik.getIsi();
   getId(_id);
   getJudul(_judul);
   getPenyanyi(_penyanyi);
   getIsi(_isi);
   Intent intent = new Intent(getApplicationContext(), EditLyrik.class);
      overridePendingTransition( R.anim.slide_in_left, R.anim.slide_out_left );
      startActivity(intent);
   break;
  case 1:
   lyrikIWantToDelete = lyrik;
   alertDialogConfirmDelete.setMessage("Delete " + lyrik.getJudul() + "?");
   alertDialogConfirmDelete.show();
   break;
  }
  return true;
 }
 
 @Override
    protected void onDestroy() {
        super.onDestroy();
        if ((lyrikdb != null)) {
         lyrikdb.close();
        }
        if (db != null) {
            db.close();
        }
    }
}

Silahkan download file lengkapnya disini

   

Sunday, March 8, 2015

Belajar Android - Simple SQLite ( Membuat Aplikasi 10Tips Untuk Pendaki Pemula )

Ha, lama rasanya tak update blog tercinta ini. Ibarat makhluk idup kalau ndak di-isi perutnya mungkin dah ko-it, untung aje ini bukan makhluk idup..:p. Akhir-akhir ini ane benar-benar stacknan buat ngoding, karna logika benar ndak jalan, jadilah otak susah bekerja buat ngembangin koding, apalagi project ndak jadi-jadi..haaaa, rasanya tu cammm mana gituuu...:p (alay dah)

Nah barusan ane iseng-iseng bikin aplikasi sederhana dengan Database SQLite bawaan Android, apilikasi nya simpel sih, 10Tips Untuk Pendaki Pemula...kenapa ane bikin app ini? kepikiran tadi habis baca-baca sebuah web yang berisi tips-tips pendakian kegunung (jadi kangen ke gunung euy, pengen lihat rembulan..:p ), so, ya lumayanlah buat nambah posting di blog ini, dari pada ini blog mati kelaparan karna tak di isi..:p

Oke lanjut and langsung aje, Berikut tampilan appnya dari emulator di android ;


Berikut file layout XMLnya :
1. main.xml


   
   
   


2. list_tips.xml


   
   
   
    


3. detail.xml


   
   
   
 


Berikut file JAVAnya ;

1. TipsAdapter.java

package com.tipspemula.yonandroid;

import java.util.ArrayList;
import java.util.HashMap;

import com.tipspemula.yonandroid.adapter.TipsAdapter;

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;


public class MainActivity extends ListActivity {
 
 public static final String YA_ID    = "id";
 public static final String YA_JUDUL = "judul";
 
 ArrayList> daftar_tips = new ArrayList>();
 
 private SQLiteDatabase  db = null;
 private DataTips dataDB = null;
 private Cursor cursor = null;
 
 private HashMap mapp;
 private ListView list;
 private TipsAdapter adap;
 private String i;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
        
        dataDB = new DataTips(this);
        db = dataDB.getWritableDatabase();
        dataDB.createTable(db);
        dataDB.generateData(db);
        
        getTips();
    }

    // TODO Auto-generated method stub
    private void getTips() {
     try {
      cursor = db.rawQuery("SELECT * " + "FROM tips", null);
      if (cursor.getCount() > 0) {
       int indexID    = cursor.getColumnIndex("id");
       int indexJudul = cursor.getColumnIndex("judul");
       
       cursor.moveToFirst();
    do {
     String ID    = cursor.getString(indexID);
     String Judul = cursor.getString(indexJudul);
     
     mapp = new HashMap();
     mapp.put(YA_ID, ID);
     mapp.put(YA_JUDUL, Judul);
     
     daftar_tips.add(mapp);
     
     cursor.moveToNext();
    } while (!cursor.isAfterLast());
      }
     } finally {
   if (cursor != null) {
    cursor.close();
   }
   this.adapter_listview();
  }
    }

    // TODO Auto-generated method stub
 private void adapter_listview() {
  list = getListView();
  adap = new TipsAdapter(this, daftar_tips);
        list.setAdapter(adap);
        
        list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView parent, View view,int position, long id) {
     i = ((TextView) view.findViewById(R.id.id)).getText().toString();
     Intent in = new Intent(MainActivity.this, DetailTips.class);
     in.putExtra("ID", i);
     startActivity(in);
    }
   });  
    }

}


2. MainActivity.java

package com.tipspemula.yonandroid;

import java.util.ArrayList;
import java.util.HashMap;

import com.tipspemula.yonandroid.adapter.TipsAdapter;

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;


public class MainActivity extends ListActivity {
 
 public static final String YA_ID    = "id";
 public static final String YA_JUDUL = "judul";
 
 ArrayList> daftar_tips = new ArrayList>();
 
 private SQLiteDatabase  db = null;
 private DataTips dataDB = null;
 private Cursor cursor = null;
 
 private HashMap mapp;
 private ListView list;
 private TipsAdapter adap;
 private String i;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
        
        dataDB = new DataTips(this);
        db = dataDB.getWritableDatabase();
        dataDB.createTable(db);
        dataDB.generateData(db);
        
        getTips();
    }

    // TODO Auto-generated method stub
    private void getTips() {
     try {
      cursor = db.rawQuery("SELECT * " + "FROM tips", null);
      if (cursor.getCount() > 0) {
       int indexID    = cursor.getColumnIndex("id");
       int indexJudul = cursor.getColumnIndex("judul");
       
       cursor.moveToFirst();
    do {
     String ID    = cursor.getString(indexID);
     String Judul = cursor.getString(indexJudul);
     
     mapp = new HashMap();
     mapp.put(YA_ID, ID);
     mapp.put(YA_JUDUL, Judul);
     
     daftar_tips.add(mapp);
     
     cursor.moveToNext();
    } while (!cursor.isAfterLast());
      }
     } finally {
   if (cursor != null) {
    cursor.close();
   }
   this.adapter_listview();
  }
    }

    // TODO Auto-generated method stub
 private void adapter_listview() {
  list = getListView();
  adap = new TipsAdapter(this, daftar_tips);
        list.setAdapter(adap);
        
        list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView parent, View view,int position, long id) {
     i = ((TextView) view.findViewById(R.id.id)).getText().toString();
     Intent in = new Intent(MainActivity.this, DetailTips.class);
     in.putExtra("ID", i);
     startActivity(in);
    }
   });  
    }

}


3. Ada dua file Java lagi yaitu; DataTips.java dan Detail.java, silahkan download aja file lengkapnya disini

Berikut Tampilannya :

List Data



Detail Data

Oke, sekian aje,.. and happy coding..