Wednesday, December 4, 2019

Fetch Records

ANDROID

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