Skip to content
Advertisement

Android / MySQL: Spinner not populate data from MySQL

I have a problem with my code. I already created a spinner that populates from the MySQL database. The PHP code seem not have problem at all since I run the link “localhost/latihan1/menu/php”, the json string will display.

the json display as follows:

{“result”:[{“username”:”haha”,”name”:”Bus Bisnis”,”course”:”math”,”session”:”20119″},{“username”:”hihi”,”name”:”Bus Ace”,”course”:”fizik”,”session”:”12817″},{“username”:”m_ridwan”,”name”:”Ridwan”,”course”:”Komputer”,”session”:”1920″},{“username”:”m_iqbal”,”name”:”Iqbal”,”course”:”Sains”,”session”:”2021″}]}

But when I open the apps, The spinner doesn’t shows the data. I dont know why. Below is my code

JAVA

public class MainActivity extends AppCompatActivity implements Spinner.OnItemSelectedListener{

    private Spinner spinner;
    private ArrayList<String> students;

    //JSON Array
    private JSONArray result;

    private TextView textViewName;
    private TextView textViewCourse;
    private TextView textViewSession;

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

        //Initializing the ArrayList
        students = new ArrayList<String>();

        spinner = findViewById(R.id.spinner);
        spinner.setOnItemSelectedListener(this);

        textViewName = findViewById(R.id.textViewName);
        textViewCourse = findViewById(R.id.textViewCourse);
        textViewSession = findViewById(R.id.textViewSession);

        getData();
    }

    private void getData(){
        StringRequest stringRequest = new StringRequest(Config.DATA_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        JSONObject j = null;

                        try {
                            j = new JSONObject(response);

                            result = j.getJSONArray(Config.JSON_ARRAY);

                            getStudents(result);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }

    private void getStudents(JSONArray j){
        for(int i=0;i<j.length();i++){
            try {
                JSONObject json = j.getJSONObject(i);

                students.add(json.getString(Config.TAG_USERNAME));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        spinner.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item, students));
    }

    private String getName(int position){
        String name="";
        try {

            JSONObject json = result.getJSONObject(position);

            name = json.getString(Config.TAG_NAME);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return name;
    }

    private String getCourse(int position){
        String course="";
        try {
            JSONObject json = result.getJSONObject(position);
            course = json.getString(Config.TAG_COURSE);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return course;
    }

    private String getSession(int position){
        String session="";
        try {
            JSONObject json = result.getJSONObject(position);
            session = json.getString(Config.TAG_SESSION);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return session;
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        //Setting the values to textviews for a selected item
        textViewName.setText(getName(position));
        textViewCourse.setText(getCourse(position));
        textViewSession.setText(getSession(position));
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        textViewName.setText("");
        textViewCourse.setText("");
        textViewSession.setText("");
    }
}

menu.php

<?php 

    require_once "koneksi.php";

    $query = mysqli_query($con, "SELECT * FROM kendaraan ORDER BY id ASC");

    $students = array();    

    while($row = mysqli_fetch_array($query)){
        array_push($students,array(
            'username'=>$row['username'],
            'name'=>$row['name'],
            'course'=>$row['course'],
            'session'=>$row['session']
        ));
    }

    echo json_encode(array('result'=>$students));
    mysqli_close($con);
?>

Advertisement

Answer

I executed your code in my android studio. I looks like that your network call is unable to fetch data (result remains null). Check my code for reference. I replaced your network call with static data.

package com.attiq.testapp;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

public class Main5Activity extends AppCompatActivity implements Spinner.OnItemSelectedListener {
private Spinner spinner;
private ArrayList<String> students;

//JSON Array
private JSONArray result;

private TextView textViewName;
private TextView textViewCourse;
private TextView textViewSession;

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

    //Initializing the ArrayList
    students = new ArrayList<String>();

    spinner = findViewById(R.id.spinner);
    spinner.setOnItemSelectedListener(this);

    textViewName = findViewById(R.id.textViewName);
    textViewCourse = findViewById(R.id.textViewCourse);
    textViewSession = findViewById(R.id.textViewSession);

    getData();
}

private void getData(){
    String json= "{"result":[{"username":"haha","name":"Bus Bisnis","course":"math","session":"20119"},{"username":"hihi","name":"Bus Ace","course":"fizik","session":"12817"},{"username":"m_ridwan","name":"Ridwan","course":"Komputer","session":"1920"},{"username":"m_iqbal","name":"Iqbal","course":"Sains","session":"2021"}]}";
    try {
        JSONObject jsonObject = new JSONObject(json);
        result= jsonObject.getJSONArray("result");
        getStudents(result);
    } catch (Exception e){
        e.printStackTrace();
    }
}

private void getStudents(JSONArray j) {
    for (int i = 0; i < j.length(); i++) {
        try {
            JSONObject json = j.getJSONObject(i);

            students.add(json.getString(Config.TAG_USERNAME));
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    spinner.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, students));
}

private String getName(int position) {
    String name = "";
    try {

        JSONObject json = result.getJSONObject(position);

        name = json.getString(Config.TAG_NAME);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return name;
}

private String getCourse(int position) {
    String course = "";
    try {
        JSONObject json = result.getJSONObject(position);
        course = json.getString(Config.TAG_COURSE);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return course;
}

private String getSession(int position) {
    String session = "";
    try {
        JSONObject json = result.getJSONObject(position);
        session = json.getString(Config.TAG_SESSION);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return session;
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    //Setting the values to textviews for a selected item
    textViewName.setText(getName(position));
    textViewCourse.setText(getCourse(position));
    textViewSession.setText(getSession(position));
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
    textViewName.setText("");
    textViewCourse.setText("");
    textViewSession.setText("");
}
}
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement