【发布时间】:2017-11-20 02:27:14
【问题描述】:
所以我看到了有关数据未显示在 recyclerview 上的问题,但不适用于我的。我使用 PHP 从 Mysql 获取数据,php 将日期和整数作为 Json 获取。但是当我调用 recyclerview 时,数据没有显示。 PHP脚本,我已经测试了脚本,它确实以Json的形式获取数据
recyclerView 活动
public class recycle_view_sales_report extends AppCompatActivity {
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private String string_url = "http://10.0.3.2/sales_report.php";
private salesAdapter adapter;
Context context = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycle_view_sales_report);
this.setTitle("Customer table");
recyclerView = (RecyclerView)findViewById(R.id.recyclerv);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setHasFixedSize(true);
getinformation();
}
private void getinformation(){
StringRequest stringRequest = new StringRequest(Request.Method.POST,string_url,
new Response.Listener<String>(){
@Override
public void onResponse(String response) {
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
List<salesData> list = Arrays.asList(gson.fromJson(response,salesData[].class));
adapter = new salesAdapter(list,context);
recyclerView.setAdapter(adapter);
}
}, new Response.ErrorListener(){
@Override
public void onErrorResponse(VolleyError error) {
}
});
MySingleton.getInstance(this).addToRequestQue(stringRequest);
}
}
适配器类
public class salesAdapter extends RecyclerView.Adapter<salesAdapter.MyViewholder> {
private List<salesData> list = new ArrayList<>();
Context context;
salesAdapter(List<salesData> list, Context ctx){
this.list = list;
context = ctx;
}
@Override
public salesAdapter.MyViewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sales_report_layout,parent,false);
return new salesAdapter.MyViewholder(view,context,list);
}
@Override
public void onBindViewHolder(salesAdapter.MyViewholder holder, int position) {
holder.datetx.setText(String.valueOf(list.get(position).getDate()));
holder.salestx.setText(String.valueOf(list.get(position).getSales()));
}
@Override
public int getItemCount() {
return list.size();
}
public static class MyViewholder extends RecyclerView.ViewHolder {
TextView datetx,salestx;
List<salesData> datas = new ArrayList<salesData>();
Context context;
public MyViewholder(View itemView, Context ctx, List<salesData> datas){
super(itemView);
this.datas = datas;
context = ctx;
datetx = (TextView)itemView.findViewById(R.id.tx_date);
salestx = (TextView)itemView.findViewById(R.id.tx_sales);
}}
}
数据类
public class salesData {
String date;
int sales;
public salesData(String date, int sales) {
this.date = date;
this.sales = sales;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public int getSales() {
return sales;
}
public void setSales(int sales) {
this.sales = sales;
}
}
XML 回收视图
`<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="120dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="120dp"
android:id = "@+id/tx_id"
android:layout_alignParentLeft="true"
android:text="Date:"
android:gravity="center"
android:textAppearance="?android:textAppearanceLarge"
/>
<TextView
android:id="@+id/tx_date"
android:layout_width="wrap_content"
android:layout_height="120dp"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/tx_id"
android:layout_toRightOf="@+id/tx_id"
android:gravity="center"
android:text="tx_date"
android:textAppearance="?android:textAppearanceLarge"/>
<TextView
android:id="@+id/sales"
android:layout_width="wrap_content"
android:layout_height="120dp"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/tx_date"
android:layout_toRightOf="@+id/tx_date"
android:gravity="center"
android:text="Sales:"
android:textAppearance="?android:textAppearanceLarge"/>
<TextView
android:id="@+id/tx_sales"
android:layout_width="wrap_content"
android:layout_height="120dp"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/sales"
android:layout_toRightOf="@+id/sales"
android:gravity="center"
android:text="tx_sales"
android:textAppearance="?android:textAppearanceLarge"/>
`
XML 布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res /android"
android:layout_width="match_parent" android:layout_height="120dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="120dp"
android:id = "@+id/tx_id"
android:layout_alignParentLeft="true"
android:text="Date:"
android:gravity="center"
android:textAppearance="?android:textAppearanceLarge"
/>
<TextView
android:id="@+id/tx_date"
android:layout_width="wrap_content"
android:layout_height="120dp"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/tx_id"
android:layout_toRightOf="@+id/tx_id"
android:gravity="center"
android:text="tx_date"
android:textAppearance="?android:textAppearanceLarge"/>
<TextView
android:id="@+id/sales"
android:layout_width="wrap_content"
android:layout_height="120dp"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/tx_date"
android:layout_toRightOf="@+id/tx_date"
android:gravity="center"
android:text="Sales:"
android:textAppearance="?android:textAppearanceLarge"/>
<TextView
android:id="@+id/tx_sales"
android:layout_width="wrap_content"
android:layout_height="120dp"
android:layout_alignParentTop="true"
android:layout_toEndOf="@+id/sales"
android:layout_toRightOf="@+id/sales"
android:gravity="center"
android:text="tx_sales"
android:textAppearance="?android:textAppearanceLarge"/>
</RelativeLayout>
php 脚本
<?PHP
require "conn.php";
$sql_qry = " SELECT calendar.datefield AS DATE, SUM(orders.price) AS total_sales FROM orders
RIGHT JOIN calendar ON (DATE(orders.date_time) = calendar.datefield) GROUP BY DATE;";
$result = mysqli_query($conn, $sql_qry);
$response = array();
while($row = mysqli_fetch_array($result)){
array_push($response,array("DATE"=>$row[0],"total_sales"=>$row[1]));
}
echo json_encode($response);
?>
【问题讨论】:
-
检查JSON是否被正确解析
List<salesData> list = Arrays.asList(gson.fromJson(response,salesData[].class));在LogCat中设置断点调试或打印长度 -
另外,如果文本很长,回收站视图布局不是最佳的,会被截断。
-
你使用了凌空权
-
你能告诉我php脚本中的json格式吗?
-
@AdityaSharat 尝试过,我得到了正确的长度,对于第一个大小,部分应该是日期'2017-11-22',第二个是大约 3 到 4 位的总数,什么被认为是长的,