Java 使用recyclerview和ListItem在android studio中创建表

Java 使用recyclerview和ListItem在android studio中创建表,java,php,android,xml,android-recyclerview,Java,Php,Android,Xml,Android Recyclerview,我想使用ListItem和RecylerView在android中创建一个表。我已经使用API创建了它,但它没有显示任何数据。这是我的密码 kehadiran.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app

我想使用ListItem和RecylerView在android中创建一个表。我已经使用API创建了它,但它没有显示任何数据。这是我的密码

kehadiran.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="match_parent"
    tools:context=".kehadiran">

    <RelativeLayout
        android:id="@+id/llViewTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true">

        <TextView
            android:id="@+id/kehadiran"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="32dp"
            android:textColor="@color/colorPrimaryDark"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="32dp"
            android:layout_centerInParent="true"
            android:text = "Kehadiran"
            />

    </RelativeLayout>

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/llViewTitle"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recyclerViewDeliveryProductList"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:nestedScrollingEnabled="false"
            tools:listitem="@layout/table_list_item" />

    </HorizontalScrollView>

</RelativeLayout>
kehadiran.java

package com.example.eis2;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.eis2.Item.TableViewAdapter;
import com.example.eis2.Item.keteranganmodel;

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

import java.util.ArrayList;
import java.util.List;

import static com.example.eis2.Item.LoginItem.ABSENSI_URL;

public class kehadiran extends AppCompatActivity {
    private List<keteranganmodel> absensi;
    ListView list;

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

        RecyclerView recyclerView = findViewById(R.id.recyclerViewDeliveryProductList);

        TableViewAdapter adapter = new TableViewAdapter(getKehadiranlist(), getApplicationContext());

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);

        recyclerView.setAdapter(adapter);
        absensi = new ArrayList<>();
    }

    private List getKehadiranlist() {
        StringRequest stringRequest = new StringRequest(Request.Method.GET, ABSENSI_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject obj = new JSONObject(response);
                            JSONArray keteranganArray = obj.getJSONArray("data");

                            for (int i = 0; i < keteranganArray.length(); i++) {

                                JSONObject keteranganobject = keteranganArray.getJSONObject(i);

                                keteranganmodel keterangan = new keteranganmodel(
                                        keteranganobject.getString("shift_day"),
                                        keteranganobject.getString("f1"),
                                        keteranganobject.getString("depo_f1"),
                                        keteranganobject.getString("waktu_masuk"),
                                        keteranganobject.getString("f4"),
                                        keteranganobject.getString("depo_f4"),
                                        keteranganobject.getString("waktu_keluar"),
                                        keteranganobject.getString("ket_absensi"));

                                absensi.add(keterangan);
                                System.out.println("data:" + keterangan);
                            }
                            TableViewAdapter adapter = new TableViewAdapter(absensi, getApplicationContext());

                            list.setAdapter((ListAdapter) adapter);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
        return absensi;
    }
}
这是它的API

<?php 
function curl($url){
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $output = curl_exec($ch); 
    curl_close($ch);      
    return $output;
}
$send = curl("http://hrd.tvip.co.id/rest_server/api/absensi/index?shift_day=2020-08-24&shift_day_2=2020-08-27&badgenumber=0100028400");

// mengubah JSON menjadi array
$data = json_decode($send, TRUE);

echo "<pre>";
print_r($data);
echo "</pre>";
?>

我每次都试过,但总是空白或没有显示数据

主要问题是

$data = json_decode($send, TRUE);
echo $data;
2020-08-31 10:18:16.245 11130-11130/com.example.eis2 W/System.err:org.json.JSONException:java.lang.String类型的值数组无法转换为JSONObject

根据您正在执行的php代码
echo
package com.example.eis2.Item;

public class keteranganmodel {
    private String shift_day;
    private String f1;
    private String depo_f1;
    private String waktu_masuk;
    private String f4;
    private String depo_f4;
    private String waktu_keluar;
    private String ket_absensi;

    public keteranganmodel(String shift_day, String f1, String depo_f1, String waktu_masuk, String f4, String depo_f4, String waktu_keluar, String ket_absensi) {
        this.shift_day = shift_day;
        this.f1 = f1;
        this.depo_f1 = depo_f1;
        this.waktu_masuk = waktu_masuk;
        this.f4 = f4;
        this.depo_f4 = depo_f4;
        this.waktu_keluar = waktu_keluar;
        this.ket_absensi = ket_absensi;
    }

    public String getShift_day() {
        return shift_day;
    }
    public void setShift_day(String shift_day) { this.shift_day = shift_day; }

    public String getF1() {
        return f1;
    }
    public void setF1(String f1) {
        this.f1 = f1;
    }

    public String getDepo_f1() {
        return depo_f1;
    }
    public void setDepo_f1(String depo_f1) {
        this.depo_f1 = depo_f1;
    }

    public String getWaktu_masuk() {return waktu_masuk;}
    public void setWaktu_masuk(String waktu_masuk) {this.waktu_masuk = waktu_masuk; }

    public String getF4() {
        return f4;
    }
    public void setF4(String f4) {
        this.f4 = f4;
    }

    public String getDepo_f4() {
        return depo_f4;
    }
    public void setDepo_f4(String depo_f4) {
        this.depo_f4 = depo_f4;
    }

    public String getWaktu_keluar() {
        return waktu_keluar;
    }
    public void setKet_absensi(String waktu_keluar) {
        this.waktu_keluar = waktu_keluar;
    }

    public String getKet_absensi() {
        return ket_absensi;
    }
    public void setWaktu_keluar(String ket_absensi) {
        this.ket_absensi = ket_absensi;
    }
}
<?php 
function curl($url){
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $output = curl_exec($ch); 
    curl_close($ch);      
    return $output;
}
$send = curl("http://hrd.tvip.co.id/rest_server/api/absensi/index?shift_day=2020-08-24&shift_day_2=2020-08-27&badgenumber=0100028400");

// mengubah JSON menjadi array
$data = json_decode($send, TRUE);

echo "<pre>";
print_r($data);
echo "</pre>";
?>
2020-08-31 10:18:16.245 11130-11130/com.example.eis2 W/System.err: org.json.JSONException: Value <pre>Array of type java.lang.String cannot be converted to JSONObject
$data = json_decode($send, TRUE);
echo $data;