Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android Studio:带ArrayAdapter的ListView,访问数据库数据_Java_Android - Fatal编程技术网

Java Android Studio:带ArrayAdapter的ListView,访问数据库数据

Java Android Studio:带ArrayAdapter的ListView,访问数据库数据,java,android,Java,Android,我正在对话框中使用listView,希望显示数据库表中的数据。我拥有的数据没有显示在listview中。我正在将arrayAdapter与listView一起使用。此外,ShowOrder对话框显示两次,因为im使用2个recyclerView和一个适配器。有没有解决这两个问题的办法 有序碎片 package com.example.foodtruck.Fragments.Vendor; import android.app.AlertDialog; import android.content

我正在对话框中使用listView,希望显示数据库表中的数据。我拥有的数据没有显示在listview中。我正在将arrayAdapter与listView一起使用。此外,ShowOrder对话框显示两次,因为im使用2个recyclerView和一个适配器。有没有解决这两个问题的办法

有序碎片

package com.example.foodtruck.Fragments.Vendor;
import android.app.AlertDialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.res.ResourcesCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.foodtruck.Adapter.ListViewAdapter;
import com.example.foodtruck.Adapter.OrderAdapter;
import com.example.foodtruck.DataBase.ItemsContract;
import com.example.foodtruck.DataBase.OrdersContract;
import com.example.foodtruck.DataBase.VendorsContract;
import com.example.foodtruck.Models.Item;
import com.example.foodtruck.Models.Order;
import com.example.foodtruck.Models.OrderedItem;
import com.example.foodtruck.Models.Vendor;
import com.example.foodtruck.R;

import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class OrderFragment extends Fragment implements OrderAdapter.OnOrderListener, View.OnClickListener {
    private RecyclerView pendingRecyclerView;
    private RecyclerView completedRecyclerView;
    private RecyclerView.Adapter recyclerAdapter;
    private RecyclerView.Adapter recyclerAdapter2;
    private OrderAdapter pendingOrderAdapter;
    private OrderAdapter CompletedOrderAdapter;
    private RecyclerView.LayoutManager mLayoutManager;
    private RecyclerView.LayoutManager mLayoutManager2;
    private SharedPreferences sharedPref;
    private Order order;
    private LayoutInflater dialogInflater;
    private ArrayList<Order> pendingOrderList = new ArrayList<>();
    private ArrayList<Order> completedOrderList = new ArrayList<>();
    private ListView listView;
    private List<OrderedItem> mOrderedItems;
    private ListViewAdapter listAdapter;
    View dv;
    private TextView customerName;
    private Spinner statusSpinner;
    private Pattern p;
    private Matcher m;

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_orders, container, false);


        sharedPref = getActivity().getSharedPreferences("KeyData", Context.MODE_PRIVATE);

        //first recycler
        pendingRecyclerView = v.findViewById(R.id.pendingRecycler);
        pendingRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(getContext()); //use linear layout on cards
        pendingRecyclerView.setLayoutManager(mLayoutManager);
        pendingOrderAdapter = new OrderAdapter(getContext(), this);
        pendingOrderAdapter.submitList(getOrderList("Preparing"));
        recyclerAdapter = pendingOrderAdapter;//specify adapter and pass in item list
        pendingRecyclerView.setAdapter(recyclerAdapter);

        //second recycler
        completedRecyclerView = v.findViewById(R.id.completedRecycler);
        completedRecyclerView.setHasFixedSize(true);
        mLayoutManager2 = new LinearLayoutManager(getContext());
        completedRecyclerView.setLayoutManager(mLayoutManager2);
        CompletedOrderAdapter = new OrderAdapter(getContext(), this);
        CompletedOrderAdapter.submitList(getOrderList("Completed"));
        recyclerAdapter2 = CompletedOrderAdapter;
        completedRecyclerView.setAdapter(recyclerAdapter2);


        return v;
    }
    //need two arrayList, orderPending and orderComplete
    //get order list from order database
    public ArrayList<Order> getOrderList(String status) {

        String email = sharedPref.getString("Email", "");

        VendorsContract vc = new VendorsContract(getContext());
        OrdersContract oc = new OrdersContract(getContext());

        Vendor vendor = vc.getVendorIdByEmail(email);

       switch (status)
       {
           case "Preparing":
               pendingOrderList = oc.getOrderListByStatus(vendor.getM_Id(), status); //vendor = 3  status = preparing
               return pendingOrderList;
           case "Completed":
               completedOrderList = oc.getOrderListByStatus(vendor.getM_Id(), status);
               return completedOrderList;
       }
       return null;
    }

    @Override
    public void onClick(View v) {
    }

    @Override
    public void onPendingOrderClick(int position) {
    }
    @Override
    public void onCompletedOrderClick(int position)
    {
        showOrderDialog(CompletedOrderAdapter.getOrderAt(position));
    }
    //show order dialog
    private void showOrderDialog(Order order)
    {
        dialogInflater = getLayoutInflater();
        dv = dialogInflater.inflate(R.layout.dialog_show_order, null);
        //ListView
        listView = dv.findViewById(R.id.itemsInOrder);
        listView.setAdapter(listAdapter);

        customerName = dv.findViewById(R.id.tvCustomerName);
        statusSpinner = dv.findViewById(R.id.statusSpinner);

        int selection = ((order.getM_Status().equals("Preparing")) ? 0 : 1);

        customerName.setText(order.getM_Customer().getM_FirstName()+order.getM_Customer().getM_LastName());
        statusSpinner.setSelection(selection);

        final AlertDialog alertDialog = new AlertDialog.Builder(getContext()).setView(dv)
                .setPositiveButton("Update", null)
                .setNegativeButton("Cancel", null)
                .show();

        Button b = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
        b.setOnClickListener(v -> {
            if (updateOrderInDatabase(order)) {
                pendingOrderAdapter.submitList(getOrderList("Preparing"));
                CompletedOrderAdapter.submitList(getOrderList("Completed"));
                alertDialog.cancel();
                Toast.makeText(getContext(),"Order Updated", Toast.LENGTH_LONG).show();
            }
        });
    }
    private boolean updateOrderInDatabase(Order order) {
        //references to all Dialog views
        customerName = dv.findViewById(R.id.tvCustomerName);
        statusSpinner = dv.findViewById(R.id.statusSpinner);

        if (validateCustomerName(customerName)) {
            OrdersContract oc = new OrdersContract(getContext());
            oc.updateOrder(order.getM_Id(), statusSpinner.getSelectedItem().toString());
            return true;
        }
        return false;
    }

    private boolean validateCustomerName(TextView customerName) {
        p = Pattern.compile("[a-zA-Z]", Pattern.CASE_INSENSITIVE);
        m = p.matcher(customerName.getText().toString());
        boolean cv = m.find();
        String name = customerName.getText().toString();

        if (TextUtils.isEmpty(name)) {
            customerName.setError("Can Not Be Empty ");
            return false;
        } else if (!cv) {
            customerName.setError("Invalid Entry (Only Letters)");
            return false;
        }

        return true;
    }

}
package com.example.foodtruck.Fragments.Vendor;
导入android.app.AlertDialog;
导入android.content.Context;
导入android.content.SharedReferences;
导入android.graphics.Bitmap;
导入android.graphics.drawable.BitmapDrawable;
导入android.graphics.drawable.drawable;
导入android.os.Bundle;
导入android.text.TextUtils;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListAdapter;
导入android.widget.ListView;
导入android.widget.RadioGroup;
导入android.widget.Spinner;
导入android.widget.TextView;
导入android.widget.Toast;
导入androidx.annotation.NonNull;
导入androidx.annotation.Nullable;
导入androidx.core.content.res.ResourcesCompat;
导入androidx.fragment.app.fragment;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入com.example.foodtruck.Adapter.ListViewAdapter;
导入com.example.foodtruck.Adapter.OrderAdapter;
导入com.example.foodtruck.DataBase.ItemsContract;
导入com.example.foodtruck.DataBase.OrdersContract;
导入com.example.foodtruck.DataBase.VendorsContract;
导入com.example.foodtruck.Models.Item;
导入com.example.foodtruck.Models.Order;
导入com.example.foodtruck.Models.OrderedItem;
导入com.example.foodtruck.Models.Vendor;
导入com.example.foodtruck.R;
导入java.io.ByteArrayOutputStream;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
公共类OrderFragment扩展片段实现OrderAdapter.OnOrderListener、View.OnClickListener{
私人回收视图pendingRecyclerView;
私人RecyclerView completedRecyclerView;
专用回收器查看适配器回收器适配器;
专用回收器查看适配器回收器适配器2;
私有OrderAdapter pendingOrderAdapter;
专用OrderAdapter CompletedOrderAdapter;
private RecyclerView.LayoutManager MLLayoutManager;
private RecyclerView.LayoutManager MLAyoutManager 2;
私人SharedReferences SharedRef;
私人秩序;
私人充气机;
私有ArrayList pendingOrderList=新ArrayList();
私有ArrayList completedOrderList=新ArrayList();
私有列表视图列表视图;
私人名单;
私有ListViewAdapter listAdapter;
查看dv;
私有文本视图客户名称;
私有微调器状态微调器;
私有模式p;
私有匹配器m;
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图v=充气机。充气(R.layout.fragment_orders,container,false);
sharedPref=getActivity().GetSharedReferences(“KeyData”,Context.MODE\u PRIVATE);
//第一回收商
pendingRecyclerView=v.findViewById(R.id.PendingRecyclerer);
pendingRecyclerView.setHasFixedSize(true);
mLayoutManager=newlinearlayoutmanager(getContext());//在卡片上使用线性布局
pendingRecyclerView.setLayoutManager(MLLayoutManager);
pendingOrderAdapter=newOrderAdapter(getContext(),this);
pendingOrderAdapter.提交列表(getOrderList(“准备”);
recyclerAdapter=pendingOrderAdapter;//指定适配器并传入项列表
pendingRecyclerView.setAdapter(回收适配器);
//第二回收商
completedRecyclerView=v.findViewById(R.id.CompletedRecyclerer);
completedRecyclerView.setHasFixedSize(true);
mLayoutManager2=新的LinearLayoutManager(getContext());
completedRecyclerView.setLayoutManager(mLayoutManager2);
CompletedOrderAdapter=新的OrderAdapter(getContext(),this);
CompletedOrderAdapter.submitList(getOrderList(“Completed”);
recyclerAdapter2=已完成的OrderAdapter;
completedRecyclerView.setAdapter(recyclerAdapter2);
返回v;
}
//需要两个arrayList,orderPending和orderComplete
//从订单数据库获取订单列表
公共ArrayList getOrderList(字符串状态){
String email=sharedPref.getString(“email”,“电子邮件”);
VendorsContract vc=新的VendorsContract(getContext());
OrdersContract oc=新的OrdersContract(getContext());
Vendor=vc.getvendoridbymail(电子邮件);
开关(状态)
{
案例“准备”:
pendingOrderList=oc.getOrderListByStatus(vendor.getM_Id(),status);//vendor=3 status=preparing
返回pendingOrderList;
案件“已完成”:
completedOrderList=oc.getOrderListByStatus(vendor.getM_Id(),status);
返回完整的订单列表;
}
返回null;
}
@凌驾
公共void onClick(视图v){
}
@凌驾
公共作废待处理或单击(内部位置){
}
@凌驾
已完成订单点击时的公共作废(整数位置)
{
showOrderDialog(CompletedOrderAdapter.getOrderAt(位置));
}
//显示订单对话框
专用void showOrderDialog(订单)
{
dialogInflater=GetLayoutFlater();
dv=dialogInflater.inflate(R.layout.dialog\u show\u order,null);
//列表视图
listView=dv.findviewbyd(R.id.itemsInOrder);
setAdapter(listAdapter);
customerName=dv.findviewbyd(R.id.tvCustomerName);
statusSpinner=dv.findViewById(R.id.statusSpinner);
int selection=((order.getM_Status().equals(“Preparing”))?0:1
package com.example.foodtruck.Adapter;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.example.foodtruck.DataBase.OrderedItemsContract;
import com.example.foodtruck.Models.OrderedItem;
import com.example.foodtruck.R;

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

public class ListViewAdapter extends ArrayAdapter<OrderedItem>{

    ArrayList<OrderedItem> orderedItems;

    public ListViewAdapter(Context context, ArrayList<OrderedItem> mOrderedItems)
    {
        super(context, 0);
        orderedItems = mOrderedItems;
    }

    static class LayoutHandler{
        TextView items, quantity;
    }

    @Override
    public int getCount() {
        return orderedItems.size();
    }

    @Override
    public OrderedItem getItem(int position) {
        return orderedItems.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View mview = convertView;
        LayoutHandler layoutHandler;

        if(mview==null)
        {
            LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            mview = layoutInflater.inflate(R.layout.listview_layout, parent, false);
            layoutHandler = new LayoutHandler();
            layoutHandler.items = mview.findViewById(R.id.tvItem);
            layoutHandler.quantity = mview.findViewById((R.id.tvQuantity));
            mview.setTag(layoutHandler);
        }
        else
        {
         layoutHandler = (LayoutHandler) mview.getTag();
        }

        OrderedItem orderedItem = (OrderedItem) this.getItem(position);
        layoutHandler.items.setText(orderedItem.getM_Item().toString());
        layoutHandler.quantity.setText(orderedItem.getM_Quantity());
        return mview;
    }
}