Nama projek : Koneksi Database
✅ 1. FILE API PHP (di hosting bahtra.shop)
Buat folder misalnya:
https://bahtra.shop/android_api/
📄 koneksi.php
<?php
$host = "bahtra.shop";
$user = "u461617818_android";
$pass = "Android*123#";
$db = "u461617818_android";
$conn = mysqli_connect($host, $user, $pass, $db);
if (!$conn) {
die("Koneksi gagal: " . mysqli_connect_error());
}
?>
📄 get_users.php
<?php
include "koneksi.php";
$query = mysqli_query($conn, "SELECT * FROM users");
$data = [];
while ($row = mysqli_fetch_assoc($query)) {
$data[] = $row;
}
echo json_encode($data);
?>
✅ 2. OUTPUT JSON (contoh)
Jika dibuka di browser:
https://bahtra.shop/android_api/get_users.php
Akan muncul:
[
{"id":"1","username":"admin","password":"123"},
{"id":"2","username":"user1","password":"abc"}
]
✅ 3. PROJECT ANDROID STUDIO (Kotlin)
📁 A. AndroidManifest.xml
Tambahkan izin internet:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.KoneksiDatabase">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
📁 B. activity_main.xml
<?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"
android:padding="16dp">
<TextView
android:text="Data Users"
android:textSize="20sp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ListView
android:id="@+id/listViewUsers"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
📁 C. MainActivity.kt
package com.example.koneksidatabase
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListView
import androidx.appcompat.app.AppCompatActivity
import org.json.JSONArray
import java.io.BufferedReader
import java.io.InputStreamReader
import java.net.HttpURLConnection
import java.net.URL
import kotlin.concurrent.thread
class MainActivity : AppCompatActivity() {
private lateinit var listView: ListView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
listView = findViewById(R.id.listViewUsers)
loadData()
}
private fun loadData() {
thread {
try {
val url = URL("https://bahtra.shop/android_api/get_users.php")
val conn = url.openConnection() as HttpURLConnection
conn.requestMethod = "GET"
conn.connectTimeout = 10000
conn.readTimeout = 10000
val reader = BufferedReader(InputStreamReader(conn.inputStream))
val result = StringBuilder()
var line: String?
while (reader.readLine().also { line = it } != null) {
result.append(line)
}
reader.close()
conn.disconnect()
val jsonArray = JSONArray(result.toString())
val list = ArrayList<String>()
for (i in 0 until jsonArray.length()) {
val obj = jsonArray.getJSONObject(i)
val username = obj.getString("username")
val password = obj.getString("password")
list.add("Username: $username\nPassword: $password")
}
runOnUiThread {
listView.adapter = ArrayAdapter(
this,
android.R.layout.simple_list_item_1,
list
)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
}
✅ 4. Tambahkan Dependency (Gradle)
build.gradle (Module)
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
}
android {
namespace = "com.example.koneksidatabase"
compileSdk {
version = release(36)
}
defaultConfig {
applicationId = "com.example.koneksidatabase"
minSdk = 24
targetSdk = 36
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.material)
implementation(libs.androidx.activity)
implementation(libs.androidx.constraintlayout)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
implementation("com.squareup.okhttp3:okhttp:4.12.0")
}
Tidak ada komentar:
Posting Komentar