Showing posts with label Android Programming. Show all posts
Showing posts with label Android Programming. Show all posts

Saturday, 18 January 2020

Android : Belajar Kotlin Untuk Pemula Part-3


Ini adalah postingan pertama saya di tahun 2020, sudah lama tidak update tulisan di blog ini, pada postingan kali ini saya akan sharing tentang function didalam kotlin, langsung saja, pada activity main layout seperti berikut  


<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity">

    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical"        android:layout_centerInParent="true"        >

        <EditText            android:id="@+id/editText1"            android:hint="Input 1"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:inputType="number">

        </EditText>

        <EditText            android:id="@+id/editText2"            android:hint="Input 2"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:inputType="number">

        </EditText>

        <Button            android:id="@+id/btnSUM"            android:hint="+"            android:layout_width="match_parent"            android:layout_height="wrap_content">

        </Button>
    </LinearLayout>
</RelativeLayout>


Lalu pada MainActivity.kt seperti berikut  :


package com.ketik.toekang.kotlin_function

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import android.widget.Toast.*
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    
    // Deklarasi Function
    fun sumNumber(a: Int, b:Int):Int{
        return a + b
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btnSUM.setOnClickListener {            Toast.makeText(this, ""+sumNumber(editText1.text.toString().toInt(),editText2.text.toString().toInt()),
                Toast.LENGTH_SHORT).show()
        }    }
}


Jika sudah silahkan dicoba jalankan aplikasinya, sekian sharing singkat ini semoga bermanfaat.

Thursday, 31 October 2019

Android : Belajar Kotlin Untuk Pemula Part#2


Postingan kali ini saya akan melanjutkan belajar kotlin untuk pemula, setelah pada postingan Sebelumnya sudah membahan sedikit tentang apa itu kotlin dan kali ini akan coba membuat aplikasi sederhana menggunakan kotlin yaitu aplikasi untuk menghitung volume, pastinya sudah tau kan rumus untuk menghitung volume? :D

rumusnya : Volume = Panjang * Lebar * Tinggi


Ok langsung saja, kita buka android studio dan buat project baru 







Setelah mebuat project baru selesai buat layout seperti berikut :


<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:padding="16dp"    tools:context=".MainActivity">

    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/panjang" />
    <EditText        android:id="@+id/edt_length"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:inputType="numberDecimal"        android:lines="1" />
    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/lebar" />
    <EditText        android:id="@+id/edt_width"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:inputType="numberDecimal"        android:lines="1" />
    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/tinggi" />
    <EditText        android:id="@+id/edt_height"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:inputType="numberDecimal"        android:lines="1" />
    <Button        android:id="@+id/btn_calculate"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/hitung" />
    <TextView        android:id="@+id/tv_result"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:gravity="center"        android:text="@string/hasil"        android:textSize="24sp"        android:textStyle="bold" />

    <Button        android:id="@+id/btn_reset"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/reset" />

</LinearLayout>


 Lalu di folder values/string.xml di isi seperti berikut :


<resources>
    <string name="app_name">Menghitung Volume</string>
    <string name="panjang">Panjang</string>
    <string name="lebar">Lebar</string>
    <string name="tinggi">Tinggi</string>
    <string name="hitung">Hitung</string>
    <string name="hasil">Hasil</string>
    <string name="reset">Reset</string>
</resources>


pada MainActivity.java kita deklarasikan variable seperti berikut didalam MainActivity class :

private lateinit var edtWidth: EditText
private lateinit var edtHeight: EditText
private lateinit var edtLength: EditText
private lateinit var btnCalculate: Button
private lateinit var btnReset: Button
private lateinit var tvResult: TextView

lalu didalam onCreate tambahkan seperti berikut :

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    edtWidth = findViewById(R.id.edt_width)
    edtHeight = findViewById(R.id.edt_height)
    edtLength = findViewById(R.id.edt_length)
    btnCalculate = findViewById(R.id.btn_calculate)
    btnReset = findViewById(R.id.btn_reset)
    tvResult = findViewById(R.id.tv_result)

    btnCalculate.setOnClickListener(this)
    btnReset.setOnClickListener(this)
}

Jika ada error seperti berikut, klik pada icon error dan pilih implement interface



setelah itu, class MainActivity akan menjadi seperti berikut :



Lalu didalam onClick tambahkan source code berikut dan ganti parametr p0 menjadi v dan View? menjadi View :


val inputLength = edtLength.text.toString().trim()
val inputWidth = edtWidth.text.toString().trim()
val inputHeight = edtHeight.text.toString().trim()

if (v.id == R.id.btn_calculate) {
    var isEmptyFields = false    if (inputLength.isEmpty()) {
        isEmptyFields = true        edtLength.error = "Field ini tidak boleh kosong"    }
    if (inputWidth.isEmpty()) {
        isEmptyFields = true        edtWidth.error = "Field ini tidak boleh kosong"    }
    if (inputHeight.isEmpty()) {
        isEmptyFields = true        edtHeight.error = "Field ini tidak boleh kosong"    }
    if (!isEmptyFields) {
        val volume = inputLength.toDouble() * inputWidth.toDouble() * inputHeight.toDouble()
        tvResult.text = volume.toString()
    }
}

if(v.id == R.id.btn_reset){
    edtLength.run { setText("") }    edtHeight.setText("")
    edtWidth.setText("")
    tvResult.text = ""}

full source code  class MainActivity.kt seperti berikut :


package com.ketik.toekang.belajarkotlin1

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView

class MainActivity : AppCompatActivity(), View.OnClickListener {

    private lateinit var edtWidth: EditText
    private lateinit var edtHeight: EditText
    private lateinit var edtLength: EditText
    private lateinit var btnCalculate: Button
    private lateinit var btnReset: Button
    private lateinit var tvResult: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        edtWidth = findViewById(R.id.edt_width)
        edtHeight = findViewById(R.id.edt_height)
        edtLength = findViewById(R.id.edt_length)
        btnCalculate = findViewById(R.id.btn_calculate)
        btnReset = findViewById(R.id.btn_reset)
        tvResult = findViewById(R.id.tv_result)

        btnCalculate.setOnClickListener(this)
        btnReset.setOnClickListener(this)
    }

    override fun onClick(v: View) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.        val inputLength = edtLength.text.toString().trim()
        val inputWidth = edtWidth.text.toString().trim()
        val inputHeight = edtHeight.text.toString().trim()

        if (v.id == R.id.btn_calculate) {
            var isEmptyFields = false            if (inputLength.isEmpty()) {
                isEmptyFields = true                edtLength.error = "Field ini tidak boleh kosong"            }
            if (inputWidth.isEmpty()) {
                isEmptyFields = true                edtWidth.error = "Field ini tidak boleh kosong"            }
            if (inputHeight.isEmpty()) {
                isEmptyFields = true                edtHeight.error = "Field ini tidak boleh kosong"            }
            if (!isEmptyFields) {
                val volume = inputLength.toDouble() * inputWidth.toDouble() * inputHeight.toDouble()
                tvResult.text = volume.toString()
            }
        }

        if(v.id == R.id.btn_reset){
            edtLength.run { setText("") }            edtHeight.setText("")
            edtWidth.setText("")
            tvResult.text = ""        }
    }
}

jika sudah coba jalankan aplikasinya :D



Sekian belajar kotlin kali ini semoga bermanfaat, selanjutnya akan coba belajar membuat CRUD dengan kotlin SQlite.

Terimakasih :D

Wednesday, 30 October 2019

Android : Belajar Kotlin Untuk Pemula Part#1




Postingan kali ini akan membahas tentang android programming menggunakan kotlin.

Kotlin merupakan bahasa pemrograman yang digunakan untuk membuat aplikasi android dengan IDE Android Studio, selain menggunakan Java. Kotlin dikembangkan oleh JetBrains perusahaan dibalik IntelliJ IDEA, setelah melalui banyak perkembangan JetBrains merilis kotlin secara open source dan Google mendukung penuh kotlin untuk pengembangan aplikasi android. Untuk kompilasi dari kotlin ini berupa bytecode JVM atau JavaScript.


Beberapa fitur dari kotlin

Berikut adalah fitur-fitur yang disediakan oleh kotlin untuk memudahkan penulisan kode program :

Null Pointer Exception : dengan adanya fitur ini compiler secara otomatis akan menandai pointer yang berpotensi null.

Pemrograman Fungsional : memiliki kemampuan melakukan mapping, folding pada collection java dan mendukung lambda.

Anotasi Data : anotasi data dibuat otomatis untuk mengurangi boilerplate, seperti equals, hashCode, toString.

Penulisan Syntax Lebih Simple : kotlin menawarkan penulisan syntax yang lebih simple, membuat fungsi one-liner dan membuat JavaBeans hanya dengan satu baris, serta method setter dan getter secara otomatis.

Interpolasi String : interpolasi string memungkinkan untuk memasukkan variable kedalam string tanpa penyambung seperti pada EcmaScript.

Mendukung Pembuatan aplikasi IOS : Selain android kotlin juga bisa digunakan untuk membuat aplikasi IOS dengan kotlin native dan bisa juga digunakan untuk menulis pemrograman JavaScript melalui Kotlin JS.

itulah sedikit dari beberapa fitur baru yang dihadirkan oleh kotlin sebenarnya masih banyak lagi fitur lain yang bisa kita explore, dan satu lagi di kotlin tidak perlu lagi titik koma ( ; ).



Untuk pengembangan aplikasi android dengan kotlin mulai support dari android studio versi 2.2+, gradle 2.2+ serta plugin kotlin 1.0.6+.



sekian sekilas tentang kotlin, selanjutnya membuat project baru dengan kotlin.
:D

Wednesday, 18 July 2018

Menggunakan WebView di Android Studio

Pada postingan kali ini saya akan berbagi tentang cara penggunaan webview di android studio, webview ini digunakan untuk menampilkan halaman website yang kita panggil dari program android.

ok langsung saja buka android studionya dan buat project baru (pilih yang empty activity).

setelah membuat project tambahkan permission di AndroidManifest

<uses-permission android:name="android.permission.INTERNET"/>


Kemudian tambahkan webview di activity_main.xml, berikut design layout activity_main.xml :

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_refresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</android.support.v4.widget.SwipeRefreshLayout>


MainActivty.Java

import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.net.http.SslError;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import java.security.NoSuchProviderException;

public class MainActivity extends AppCompatActivity  implements SwipeRefreshLayout.OnRefreshListener {

    SwipeRefreshLayout swipeRefreshLayout;
    WebView webView;
    WebSettings webSettings;

    String URL = "https://husnulmshare.blogspot.com/";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        try{
            swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh);
            webView = (WebView) findViewById(R.id.web_view);

            swipeRefreshLayout.setOnRefreshListener(this);

            webSettings = webView.getSettings();
            webSettings.setJavaScriptEnabled(true); // Untuk mengaktifkan javascript
            webSettings.getUseWideViewPort();

            webView.setWebChromeClient(new WebChromeClient() {
                @Override
                public void onProgressChanged(WebView view, int newProgress) {
                    // Menampilkan loading ketika webview proses load halaman
                    swipeRefreshLayout.setRefreshing(false);
                }
            });

            webView.setWebViewClient(new WebViewClient(){
                // Ketika webview error atau selesai load page loading akan dismiss
                @Override
                public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                    swipeRefreshLayout.setRefreshing(false);
                }

                @Override
                public void onPageFinished(WebView view, String url) {
                    swipeRefreshLayout.setRefreshing(false);
                }
            });

            webView.setWebViewClient(new SSLTolerentWebViewClient());
            webView.loadUrl(URL);
        }catch (Exception e){
            Toast.makeText(this, "Error "+e.getMessage().toString(), Toast.LENGTH_SHORT).show();
        }

    }

    @Override
    public void onRefresh() {
        // Untuk refresh webview dengan swipe
        webView.reload();
    }

    @Override
    public void onBackPressed() {
        // Jika Webview bisa di back maka backward page sebelumnya
        if (webView.canGoBack()) {
            webView.goBack();
        } else {
            finish();
            System.exit(0);
        }
    }

    private class SSLTolerentWebViewClient extends WebViewClient {
        public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {

            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            AlertDialog alertDialog = builder.create();
            String message = "SSL Certificate error.";
            switch (error.getPrimaryError()) {
                case SslError.SSL_UNTRUSTED:
                    message = "The certificate authority is not trusted.";
                    break;
                case SslError.SSL_EXPIRED:
                    message = "The certificate has expired.";
                    break;
                case SslError.SSL_IDMISMATCH:
                    message = "The certificate Hostname mismatch.";
                    break;
                case SslError.SSL_NOTYETVALID:
                    message = "The certificate is not yet valid.";
                    break;
            }

            message += " Do you want to continue anyway?";
            alertDialog.setTitle("SSL Certificate Error");
            alertDialog.setMessage(message);
            alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // Ignore SSL certificate errors
                    handler.proceed();
                }
            });

            alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                   handler.cancel();
               }
            });
            alertDialog.show();
        }
    }
}


Jika sudah jalankan programnya, :D

Happy sharing, Happy Coding

Semoga bermanfaat :D

Friday, 17 February 2017

CRUD MS SQL SERVER ANDROID

Pada postingan kali ini, saya akan membahas membuat Insert, Update, Delete dengan android Studio dan Microsoft SQL Server. Biasanya programming dengan android menggunakan middleware untuk komunikasi antara aplikasi dengan database yaitu web service, tapi pada postingan kali ini saya akan memberikan contoh dimana aplikasi android akan langsung konek ke database tanpa perantara middleware (Webservice).

Ok Pertama Buat database di SQL Server dengan nama DBProducttbl, Kemudian buat table dengan nama Producttbl 
Atau bisa copy script berikut untuk membuat table di Sql Server :

CREATE TABLE [dbo].[Producttbl](
       [Id] [int] IDENTITY(1,1) NOT NULL,
       [ProName] [varchar](50) NULL,
       [ProDesc] [varchar](50) NULL,
       [OnDate] [datetime] NULL
)

Ok Selanjutnya Create New Project di Android Studio :

Pertama buat layout seperti gambar berikut :


Atau bisa copy xml file berikut :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   
xmlns:tools="http://schemas.android.com/tools"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
   
android:background="#282828"
   
android:orientation="vertical"
   
tools:context="app.app.com.droidsql2.MainActivity">

    <
LinearLayout
       
android:layout_width="match_parent"
       
android:layout_height="wrap_content"
       
android:orientation="vertical"
       
android:layout_alignParentTop="true"
       
android:padding="2dp">

        <
TextView
           
android:layout_width="match_parent"
           
android:layout_height="wrap_content"
           
android:text="ADD PRODUCTS"
           
android:layout_marginTop="7dp"
           
android:typeface="sans"
           
android:textSize="35sp"
           
android:textColor="#ffffff"
           
android:gravity="center" />

        <
EditText
           
android:layout_width="match_parent"
           
android:layout_height="wrap_content"
           
android:layout_marginTop="10dp"
           
android:textColor="#ffffff"
           
android:textColorHint="#ffffff"
           
android:textStyle="bold"
           
android:background="#5d5d5d"
           
android:padding="10dp"
           
android:hint="PRODUCT NAME"
           
android:textSize="20sp"
           
android:id="@+id/edtproname" />

        <
EditText
           
android:layout_width="match_parent"
            
android:layout_height="wrap_content"
           
android:textSize="16sp"
           
android:hint="DESCRIPTION"
           
android:textColor="#ffffff"
           
android:textColorHint="#ffffff"
           
android:textStyle="bold"
           
android:background="#5d5d5d"
           
android:padding="10dp"
           
android:inputType="textMultiLine"
           
android:maxLines="3"
           
android:minLines="2"
           
android:layout_gravity="top|left"
           
android:layout_marginTop="5dp"
           
android:id="@+id/edtprodesc" />

        <
LinearLayout
           
android:layout_width="match_parent"
           
android:layout_height="wrap_content"
           
android:weightSum="3"
           
android:layout_marginTop="5dp"
           
android:orientation="horizontal">

            <
Button
               
android:layout_width="0dp"
               
android:layout_height="wrap_content"
               
android:layout_weight="1"
               
android:textColor="#ffffff"
               
android:textSize="20sp"
               
android:layout_margin="2dp"
               
android:padding="7dp"
               
android:layout_marginTop="10dp"
               
android:id="@+id/btnadd"
               
android:text="Add" />

            <
Button
                
android:layout_width="0dp"
               
android:layout_height="wrap_content"
               
android:layout_weight="1"
               
android:layout_margin="2dp"
               
android:textColor="#ffffff"
               
android:textSize="20sp"
               
android:padding="7dp"
               
android:layout_marginTop="10dp"
               
android:id="@+id/btnupdate"
               
android:text="Update" />

            <
Button
               
android:layout_width="0dp"
                
android:layout_height="wrap_content"
               
android:layout_weight="1"
               
android:textColor="#ffffff"
               
android:textSize="20sp"
               
android:layout_margin="2dp"
               
android:padding="7dp"
                
android:layout_marginTop="10dp"
               
android:id="@+id/btndelete"
               
android:text="Delete" />
        </
LinearLayout>

        <
ProgressBar
           
android:layout_width="wrap_content"
           
android:layout_height="wrap_content"
           
android:layout_gravity="center"
           
android:id="@+id/pbbar" />

        <
ListView
           
android:id="@+id/lstproducts"
           
android:layout_width="match_parent"
           
android:layout_height="wrap_content"
            
android:divider="#808080"
           
android:layout_marginTop="5dp"
           
android:dividerHeight="1dp"
           
android:padding="5dp">

        </
ListView>
    </
LinearLayout>
</
RelativeLayout>


Tambahkan satu layout baru dengan nama lsttemplate.xml
kemudian masukkan code xml berikut :

<?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="5"
    android:padding="5dp"
    android:layout_marginTop="2dp">
  

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textColor="#ffffff"
        android:layout_weight="1"
        android:textSize="15sp"
        android:text="1"
        android:id="@+id/lblproid"/>
  

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="4"
        android:textColor="#ffffff"
        android:textSize="15sp"
        android:text="MOTOROLA"
        android:id="@+id/lblproname"/>
  

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:textColor="#ffffff"
        android:textSize="0sp"
        android:text="MOTOROLA"
        android:id="@+id/lblprodesc"/>

</LinearLayout>



Selanjutnya tambahkan class baru dengan nama : ConnectionClass.java 
Berikut detail source code dari ConnectionClass.java

package app.app.com.droidsql2;

  

  import android.annotation.SuppressLint;

  import android.os.StrictMode;

  import android.util.Log;

  

  import java.sql.Connection;

  import java.sql.DriverManager;

  import java.sql.SQLException;

  

  /**

 * Created by IT on 2/17/2017.

 */

  public class ConnectionClass {

    String ip = "192.168.88.197";

    String classs = "net.sourceforge.jtds.jdbc.Driver";

    String db = "ERP120";

    String un = "sa";

    String password = "Admin123456kr";

  

    @SuppressLint("NewApi")

    public Connection CONN() {

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()

                .permitAll().build();

        StrictMode.setThreadPolicy(policy);

        Connection conn = null;

        String ConnURL = null;

        try {

  

            Class.forName(classs);

            ConnURL = "jdbc:jtds:sqlserver://" + ip + ";"

                    + "databaseName=" + db + ";user=" + un + ";password="

                    + password + ";";

            conn = DriverManager.getConnection(ConnURL);

        } catch (SQLException se) {

            Log.e("ERRO", se.getMessage());

        } catch (ClassNotFoundException e) {

            Log.e("ERRO", e.getMessage());

        } catch (Exception e) {

            Log.e("ERRO", e.getMessage());

        }

        return conn;

    }

}


Kemudian di MainActivity.java tuliskan source code seperti berikut : 

package app.app.com.droidsql2;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    ConnectionClass connectionClass;
    EditText edtproname, edtprodesc;
    Button btnadd,btnupdate,btndelete;
    ProgressBar pbbar;
    ListView lstpro;
    String proid;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        connectionClass = new ConnectionClass();
        edtproname = (EditText) findViewById(R.id.edtproname);
        edtprodesc = (EditText) findViewById(R.id.edtprodesc);
        btnadd = (Button) findViewById(R.id.btnadd);
        btnupdate = (Button) findViewById(R.id.btnupdate);
        btndelete = (Button) findViewById(R.id.btndelete);
        pbbar = (ProgressBar) findViewById(R.id.pbbar);
        pbbar.setVisibility(View.GONE);
        lstpro = (ListView) findViewById(R.id.lstproducts);
        proid = "";

        FillList fillList = new FillList();
        fillList.execute("");


        btnadd.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v) {
                AddPro addPro = new AddPro();
                addPro.execute("");

                edtproname.setText("");
                edtprodesc.setText("");
            }
        });

        btnupdate.setOnClickListener(new View.OnClickListener(){

            @Override            public void onClick(View v) {
                UpdatePro updatePro = new UpdatePro();
                updatePro.execute("");

                edtproname.setText("");
                edtprodesc.setText("");
            }
        });

        btndelete.setOnClickListener(new View.OnClickListener(){

            @Override            public void onClick(View v) {
                DeletePro deletePro = new DeletePro();
                deletePro.execute("");

                edtproname.setText("");
                edtprodesc.setText("");
            }
        });
    }

    public class FillList extends AsyncTask<String, String, String> {

        String z = "";

        List<Map<String, String>> prolist  = new ArrayList<Map<String, String>>();

        @Override        protected void onPreExecute() {

            pbbar.setVisibility(View.VISIBLE);
        }

        @Override        protected void onPostExecute(String r) {

            pbbar.setVisibility(View.GONE);
            Toast.makeText(MainActivity.this, r, Toast.LENGTH_SHORT).show();

            String[] from = { "A", "B", "C", "D" };
            int[] views = { R.id.lblproid, R.id.lblproname, R.id.lblprodesc, R.id.lbldesc };
            final SimpleAdapter ADA = new SimpleAdapter(MainActivity.this, 
            prolist, R.layout.lsttemplate, from, views);
            lstpro.setAdapter(ADA);


            lstpro.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                @Override                
                    public void onItemClick(AdapterView<?> arg0, View arg1,
                                        int arg2, long arg3) {
                    HashMap<String, Object> obj = (HashMap<String, Object>) 
                    ADA.getItem(arg2);
                    proid = (String) obj.get("A");
                    String proname = (String) obj.get("B");
                    String prodesc = (String) obj.get("C");
                    edtprodesc.setText(prodesc);
                    edtproname.setText(proname);
                    //     qty.setText(qtys);                }
            });



        }

        @Override        
           protected String doInBackground(String... params) {
            try {
                Connection con = connectionClass.CONN();
                if (con == null) {
                    z = "Error in connection with SQL server";
                } else {
                    String query = "select Id,ProName,ProDesc from Producttbl";
                    PreparedStatement ps = con.prepareStatement(query);
                    ResultSet rs = ps.executeQuery();

                    //ArrayList data1 = new ArrayList();                    
                   while (rs.next()) {
                        Map<String, String> datanum = new HashMap<String, String>();
                        datanum.put("A", rs.getString("Id"));
                        datanum.put("B", rs.getString("ProName"));
                        datanum.put("C", rs.getString("ProDesc"));
                        prolist.add(datanum);
                    }


                    //z = "Success";                }
            } catch (Exception ex) {
                z = "Error retrieving data from table";

            }
            return z;
        }
    }

    public class AddPro extends AsyncTask<String, String, String> {
        String z = "";
        Boolean isSuccess = false;

        String proname = edtproname.getText().toString();
        String prodesc = edtprodesc.getText().toString();

        @Override        
        protected void onPreExecute() {
            pbbar.setVisibility(View.VISIBLE);
        }

        @Override        protected void onPostExecute(String r) {
            pbbar.setVisibility(View.GONE);
            Toast.makeText(MainActivity.this, r, Toast.LENGTH_SHORT).show();
            if(isSuccess==true) {
                FillList fillList = new FillList();
                fillList.execute("");
            }
        }

        @Override        
         protected String doInBackground(String... params) {
            if (proname.trim().equals("") || prodesc.trim().equals(""))
                z = "Please enter User Id and Password";
            else {
                try {
                    Connection con = connectionClass.CONN();
                    if (con == null) {
                        z = "Error in connection with SQL server";
                    } else {

                        String dates = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH)
                                .format(Calendar.getInstance().getTime());
                        String query = "insert into Producttbl (ProName,ProDesc,OnDate) 
                        values ('" + proname + "','" + prodesc + "','" + dates + "')";
                        PreparedStatement preparedStatement = con.prepareStatement(query);
                        preparedStatement.executeUpdate();
                        z = "Added Successfully";
                        isSuccess = true;
                    }
                } catch (Exception ex) {
                    isSuccess = false;
                    z = "Exceptions";
                }
            }
            return z;
        }
    }

    public class UpdatePro extends AsyncTask<String, String, String> {

        String z = "";
        Boolean isSuccess = false;

        String proname = edtproname.getText().toString();
        String prodesc = edtprodesc.getText().toString();

        @Override        
         protected void onPreExecute() {
            pbbar.setVisibility(View.VISIBLE);
        }

        @Override        
         protected void onPostExecute(String r) {
            pbbar.setVisibility(View.GONE);
            Toast.makeText(MainActivity.this, r, Toast.LENGTH_SHORT).show();
            if(isSuccess==true) {
                FillList fillList = new FillList();
                fillList.execute("");
            }

        }

        @Override        
         protected String doInBackground(String... params) {
            if (proname.trim().equals("") || prodesc.trim().equals(""))
                z = "Please enter User Id and Password";
            else {
                try {
                    Connection con = connectionClass.CONN();
                    if (con == null) {
                        z = "Error in connection with SQL server";
                    } else {

                        String dates = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH)
                                .format(Calendar.getInstance().getTime());

                        String query = "Update Producttbl set ProName='"+proname+"',
                        ProDesc='"+prodesc+"' , OnDate='"+dates+"' where Id="+proid;
                        PreparedStatement preparedStatement = con.prepareStatement(query);
                        preparedStatement.executeUpdate();
                        z = "Updated Successfully";

                        isSuccess = true;
                    }
                } catch (Exception ex) {
                    isSuccess = false;
                    z = "Exceptions";
                }
            }
            return z;
        }
    }

    public class DeletePro extends AsyncTask<String, String, String> {

        String z = "";
        Boolean isSuccess = false;

        String proname = edtproname.getText().toString();
        String prodesc = edtprodesc.getText().toString();

        @Override        
        protected void onPreExecute() {
            pbbar.setVisibility(View.VISIBLE);
        }

        @Override        
         protected void onPostExecute(String r) {
            pbbar.setVisibility(View.GONE);
            Toast.makeText(MainActivity.this, r, Toast.LENGTH_SHORT).show();
            if(isSuccess==true) {
                FillList fillList = new FillList();
                fillList.execute("");
            }

        }

        @Override        
         protected String doInBackground(String... params) {
            if (proname.trim().equals("") || prodesc.trim().equals(""))
                z = "Please enter User Id and Password";
            else {
                try {
                    Connection con = connectionClass.CONN();
                    if (con == null) {
                        z = "Error in connection with SQL server";
                    } else {

                        String dates = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH)
                                .format(Calendar.getInstance().getTime());

                        String query = "delete from Producttbl where Id="+proid;
                        PreparedStatement preparedStatement = con.prepareStatement(query);
                        preparedStatement.executeUpdate();
                        z = "Deleted Successfully";
                        isSuccess = true;
                    }
                } catch (Exception ex) {
                    isSuccess = false;
                    z = "Exceptions";
                }
            }
            return z;
        }
    }
}



Terakhir rubah Manifest menjadi seperti berikut :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"    
package="app.app.com.droidsql2">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    <application        
       android:allowBackup="true"        
       android:icon="@mipmap/ic_launcher"        
       android:label="@string/app_name"        
       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>
    </application>
</manifest>



Jika sudah jalankan aplikasinya :D




Untuk source code project lengkapnya bisa Di Download Disini

Terimakasih, Semoga Bermanfaat :D

ABAP CDS View Part 10 : Authorization & DCL untuk ABAP CDS

Authorization & DCL di ABAP CDS | Panduan Lengkap (PFCG, @AccessControl, DCL) Authorization & DCL untuk ABAP CDS — Pandua...