Rabu, 04 Februari 2026

langkah menampilkan tabel dalam database pada bahtra shop di android

 

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

MANAJEMEN BASIS DATA (BACKUP)

MATERI: MANAJEMEN BASIS DATA (BACKUP) 🎯 Tujuan Pembelajaran Peserta didik mampu: Memahami konsep backup database Menjelaska...