DEPENDENCIES
implementation 'com.squareup.picasso:picasso:2.71828'
ACTIVITY
package com.eimrodaapps.myapplication
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.activity_main2.*
import okhttp3.*
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import org.json.JSONArray
import java.io.IOException
class Main2Activity : AppCompatActivity() {
var studentsList = ArrayList<Student>()
val pictureUrl = "http://192.168.43.95/advprog/webservices/images/"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
//val name:String? = intent.getStringExtra("ngalan")
listView.onItemClickListener = object:AdapterView.OnItemClickListener{
override fun onItemClick(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
val id = studentsList.get(p2).id
val name = studentsList.get(p2).name
Toast.makeText(this@Main2Activity, "Full Name : $name and the ID is $id", Toast.LENGTH_LONG).show()
}
}
getRecords()
}
fun getRecords(){
//fetch all records from the db
//add them to arraylist of type student
//set listview adapter
var url = "http://192.168.43.95/advprog/webservices/getallstudents.php"
val okHttpClient = OkHttpClient()
val request = Request.Builder().url(url).build()
okHttpClient.newCall(request).enqueue(object: Callback{
override fun onFailure(call: Call, e: IOException) {
runOnUiThread{Toast.makeText(this@Main2Activity, "Connection Error", Toast.LENGTH_LONG).show()}
}
override fun onResponse(call: Call, response: Response) {
val jsonString = response.body?.string()
if (jsonString?.trim() != "0"){
val jsonArray = JSONArray(jsonString)
for (i in 0 until jsonArray.length() - 1){
//extract the first object in the json array
val jsonObject = jsonArray.getJSONObject(i)
//extract each column/field from the json object
val id = jsonObject.getString("stud_id")
val name = jsonObject.getString("stud_name")
val address = jsonObject.getString("stud_address")
val imageUrl = jsonObject.getString("stud_imageUrl")
val student = Student(id.toInt(), name, address, pictureUrl + imageUrl)
studentsList.add(student)
}
val adapter = CustomAdapter(studentsList, this@Main2Activity)
runOnUiThread{
listView.adapter = adapter
}
}else{
runOnUiThread{Toast.makeText(this@Main2Activity, "Error in fetching records", Toast.LENGTH_LONG).show()}
}
}
})
}
class CustomAdapter(val data:ArrayList<Student>, val context:Context) : BaseAdapter() {
class ViewHolder(view:View){
val textView_name: TextView
val textView_address: TextView
val imageView: ImageView
init{
textView_name = view.findViewById(R.id.textView_name)
textView_address = view.findViewById(R.id.textView_address)
imageView = view.findViewById(R.id.imageView)
}
}
override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View? {
var viewHolder: ViewHolder? = null
var v: View? = p1
if (v == null) {
v = LayoutInflater.from(context).inflate(R.layout.listview_layout, p2, false)
viewHolder = ViewHolder(v)
v.tag = viewHolder
} else {
viewHolder = v.tag as ViewHolder
}
//assign values
viewHolder.textView_name.text = data.get(p0).name
viewHolder.textView_address.text = data.get(p0).address
Picasso.get().load(data.get(p0).imageUrl).into(viewHolder.imageView)
return v
}
override fun getItem(p0: Int): Any {
return data.get(p0).id
}
override fun getItemId(p0: Int): Long {
return 0
}
override fun getCount(): Int {
return data.size
}
}
class Student(val id:Int, val name:String, val address:String, val imageUrl:String)
}
LAYOUT
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="wrap_content">
<ImageView
android:id="@+id/imageView"
android:layout_width="114dp"
android:layout_height="89dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@android:drawable/alert_dark_frame" />
<TextView
android:id="@+id/textView_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:text="Pitok"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView_address"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:text="Address"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintTop_toBottomOf="@id/textView_name" />
</androidx.constraintlayout.widget.ConstraintLayout>
PHP
<?php
include "myconnection.php";
$sql = "SELECT * FROM tblstudents ORDER By stud_name";
$stmt = $conn->prepare($sql);
$stmt->execute();
$rs = $stmt->get_result();
if ($rs->num_rows > 0) {
while ($row = $rs->fetch_assoc()) {
$rows[] = $row;
}
//encode to json format
$jsonData = json_encode($rows);
echo($jsonData);
}else{
echo "0";
}
$stmt->close();
$conn->close();
?>
No comments:
Post a Comment