Java 具有contentprovider的Listview中没有数据

Java 具有contentprovider的Listview中没有数据,java,android,listview,android-contentprovider,Java,Android,Listview,Android Contentprovider,我正在从事一个Java类项目,探索如何使用ContentProvider类在应用程序之间移动数据。我们正在制作一个基本的CRUD应用程序,带有SQLite存储和一个ContentProvider,用于将数据移动到第二个应用程序。我的调试表明,我的SQLite插入似乎正在工作并构建我的数据库,但我的ListView将不会填充。它提供了一个永远旋转的加载环,这不是我在ListView中经常看到的问题。我反复检查了适配器是否安装到位,并使用loadData()方法的一部分从数据库中创建了一个项目对象列

我正在从事一个Java类项目,探索如何使用
ContentProvider
类在应用程序之间移动数据。我们正在制作一个基本的CRUD应用程序,带有
SQLite
存储和一个ContentProvider,用于将数据移动到第二个应用程序。我的调试表明,我的SQLite插入似乎正在工作并构建我的数据库,但我的
ListView
将不会填充。它提供了一个永远旋转的加载环,这不是我在ListView中经常看到的问题。我反复检查了适配器是否安装到位,并使用
loadData()
方法的一部分从数据库中创建了一个项目对象列表,但没有发现问题。我不确定这个问题还可能来自哪里

主要活动:

    public static DatabaseHelper helper;
    public static ItemProvider provider;
    static Button addNew;
    public static final int NEXT_REQUESTCODE = 1;
    static ListFragment frag;
    static ArrayList<ItemObject> items = new ArrayList<ItemObject>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        helper = new DatabaseHelper(this);
        provider = new ItemProvider(helper);
        FragmentManager mgr = getFragmentManager();
        FragmentTransaction trans = mgr.beginTransaction();
        final Context context = this.getApplicationContext(); //to pass as context
        frag = ListFragment.newInstance(context, items);
        frag.loadData();


        trans.replace(R.id.fragment_container, frag, ListFragment.TAG);
        addNew = (Button) findViewById(R.id.addNew);
        addNew.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent addActivity = new Intent(context, FormActivity.class); //sets intent for addactivity
                        startActivityForResult(addActivity, NEXT_REQUESTCODE); //starts activity expecting response


                    }
                });

    }

    //handles response from addactivity
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if(resultCode == RESULT_OK && requestCode == NEXT_REQUESTCODE) {
            Bundle result = data.getExtras();
            ItemObject placeholder = new ItemObject(result.getString("weight"), result.getInt("steps"), result.getString("date")); //builds the object to be added to the list from addactivity response
            frag.addObject(placeholder); //adds the object to the list
        }
    }

    Context getContext() {
        return this.getContext();
    }

}
ListFragment类

    public class ListFragment extends Fragment {
    public static final String TAG = "ListFragment.TAG";
    public static ArrayList<ItemObject> items = new ArrayList<ItemObject>();
    static ListView itemList;
    static ItemAdapter adapter;
    static int selectedPosition;
    public static final int NEXT_REQUESTCODE = 2;
    static Context context;
    static ArrayList<ItemObject> placeholder;
    static MainActivity activity;
    static  Uri uri = Uri.EMPTY;

    //constructor
    public static ListFragment newInstance(Context _context, ArrayList<ItemObject> _items) {
        ListFragment fragment = new ListFragment();
        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        View theView = inflater.inflate(R.layout.list_fragment_layout, parent, false);
        //create and attach custom adapter
        MainActivity activity = (MainActivity) getActivity();
        context = activity.getContext();
        itemList = (ListView) theView.findViewById(R.id.itemList);
        adapter = new ItemAdapter(context, items);
        itemList.setAdapter(adapter);
        itemList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapter, View v, int position, long arg3) {
                selectedPosition = position;
                openView(items.get(position));
            }
        });
        loadData();
        adapter.notifyDataSetChanged();
        return theView;
    }

    //function for opening the "View details" view
    public void openView(ItemObject selected) {
        Intent detailActivity = new Intent(getActivity(), DetailActivity.class);
        detailActivity.putExtra("weight", selected.getWeight());
        detailActivity.putExtra("steps", selected.getSteps());
        detailActivity.putExtra("date", selected.getDate());
        detailActivity.putExtra("position", selectedPosition);
        startActivityForResult(detailActivity, NEXT_REQUESTCODE);

    }


    public void saveItem(ItemObject _item) {
        ContentValues v = new ContentValues();
        v.put("weight", _item.getWeight());
        v.put("steps", _item.getSteps());
        v.put("date", _item.getDate());
        activity.provider.insert(uri, v);
        loadData();


    }


    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public void loadData() {
        String[] columns = new String[]{"weight","steps","date"};
        Uri destination = Uri.parse(Environment.getDataDirectory().toString()+"/data/ContentProviderApp/database.db");
        Cursor c = activity.provider.query(destination, columns, null, null, null, null);
        if(c != null)
        {
            c.moveToFirst();
            ArrayList<ItemObject> placeholder = new ArrayList<ItemObject>();
            for(int i = 0; i < c.getCount(); i++)
            {
                int x = c.getCount();
                ItemObject newItem = new ItemObject(c.getString(3),c.getInt(2), c.getString(1));
                placeholder.add(newItem);
                c.moveToNext();
            }
            items = placeholder;

        }

    }

    public void deleteData() {
    }

    public void updateData() {
    }


    //handles a delete request from "view" activity
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == getActivity().RESULT_OK && requestCode == NEXT_REQUESTCODE) {
            Bundle result = data.getExtras();
                adapter.notifyDataSetChanged();
            }


        }



    //Mandatory empty constructor for the fragment manager to instantiate the fragment (e.g. upon screen orientation changes).

    public ListFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


    }

    //adds an object passed in from the activity
    public void addObject(ItemObject _item) {
        saveItem(_item);
        //items.add(_item);
        //adapter.notifyDataSetChanged();
        //saveData();

    }


    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            //  mListener = (OnFragmentInteractionListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        //  mListener = null;
    }
}
公共类ListFragment扩展了片段{
公共静态最终字符串TAG=“ListFragment.TAG”;
public static ArrayList items=new ArrayList();
静态ListView项目列表;
静态项目适配器;
静态int选择位置;
公共静态final int NEXT_REQUESTCODE=2;
静态语境;
静态ArrayList占位符;
静态主活动;
静态Uri=Uri.EMPTY;
//建造师
公共静态ListFragment newInstance(上下文_上下文,ArrayList _项){
ListFragment=新ListFragment();
返回片段;
}
@凌驾
创建视图上的公共视图(LayoutFlater充气器、视图组父级、捆绑保存状态){
查看视图=充气机。充气(R.layout.list\u fragment\u布局,父级,false);
//创建并连接自定义适配器
MainActivity=(MainActivity)getActivity();
context=activity.getContext();
itemList=(ListView)theView.findViewById(R.id.itemList);
adapter=新项目adapter(上下文,项目);
itemList.setAdapter(适配器);
itemList.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共单击(适配器视图适配器,视图v,内部位置,长arg3){
selectedPosition=位置;
openView(items.get(position));
}
});
loadData();
adapter.notifyDataSetChanged();
返回视图;
}
//打开“查看详细信息”视图的功能
public void openView(已选择ItemObject){
Intent detailActivity=新的意图(getActivity(),detailActivity.class);
detailActivity.putExtra(“权重”,selected.getWeight());
detailActivity.putExtra(“步骤”,selected.getSteps());
detailActivity.putExtra(“日期”,selected.getDate());
detailActivity.putExtra(“位置”,selectedPosition);
startActivityForResult(详细活动,下一个请求代码);
}
公共无效保存项(ItemObject\u项){
ContentValues v=新的ContentValues();
v、 put(“weight”,_item.getWeight());
v、 放置(“步骤”,_item.getSteps());
v、 put(“date”,_item.getDate());
activity.provider.insert(uri,v);
loadData();
}
@TargetApi(Build.VERSION\u code.JELLY\u BEAN)
公共void loadData(){
字符串[]列=新字符串[]{“权重”、“步长”、“日期”};
Uri destination=Uri.parse(Environment.getDataDirectory().toString()+“/data/ContentProviderApp/database.db”);
游标c=activity.provider.query(目标、列、null、null、null、null);
如果(c!=null)
{
c、 moveToFirst();
ArrayList占位符=新的ArrayList();
对于(int i=0;i
ContentProvider类

 public class ItemProvider extends ContentProvider {
    DatabaseHelper helper;
    public ItemProvider() {


    }
    public ItemProvider(DatabaseHelper _helper) {
        helper = _helper;

    }

    @Override
    public boolean onCreate() {

        return false;
    }

    @Nullable
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        return helper.db.query("item_table", null, null, null, null, null, null, null);

    }

    @Nullable
    @Override
    public String getType(Uri uri) {
        return null;
    }

    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        helper.db.insert("item_table", null, values);
        return null;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        helper.db.delete("item_table", selection, selectionArgs);
        return 0;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        helper.db.update("item_table", values, selection, selectionArgs);
        return 0;
    }
}

ItemAdapter class

    public class ItemAdapter extends BaseAdapter {
    private Context context;
    private static final long ID_CONSTANT = 0x666666L;
    private ArrayList<ItemObject> items;
    public ItemAdapter()
    {

    }
    public ItemAdapter(Context _context, ArrayList<ItemObject> _items)
    {
        context = _context;
        items = _items;
    }
    @Override
    public int getCount() {return items.size();}
    @Override
    public ItemObject getItem(int _position) {return items.get(_position);}
    @Override
    public long getItemId(int _position) { return ID_CONSTANT + _position;}
    @Override
    public View getView (int _position, View _convertView, ViewGroup _parent) {
        if(_convertView == null) {
            _convertView = LayoutInflater.from(context).inflate(R.layout.item_layout, _parent, false);
        }
        ItemObject item = getItem(_position);
        TextView text = (TextView) _convertView.findViewById(R.id.weight);
        text.setText(item.getWeight().toString());
        text = (TextView) _convertView.findViewById(R.id.steps);
        text.setText(Integer.toString(item.getSteps()));
        text = (TextView) _convertView.findViewById(R.id.date);
        text.setText(item.getDate().toString());
        return _convertView;
    }

}
公共类ItemProvider扩展了ContentProvider{
数据库助手;
公共项目提供者(){
}
公共项目提供程序(DatabaseHelper\u helper){
helper=\u helper;
}
@凌驾
公共布尔onCreate(){
返回false;
}
@可空
@凌驾
公共游标查询(Uri Uri、字符串[]投影、字符串选择、字符串[]selectionArgs、字符串排序器){
返回helper.db.query(“item_table”,null,null,null,null,null,null);
}
@可空
@凌驾
公共字符串getType(Uri){
返回null;
}
@可空
@O
 public class ItemProvider extends ContentProvider {
    DatabaseHelper helper;
    public ItemProvider() {


    }
    public ItemProvider(DatabaseHelper _helper) {
        helper = _helper;

    }

    @Override
    public boolean onCreate() {

        return false;
    }

    @Nullable
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        return helper.db.query("item_table", null, null, null, null, null, null, null);

    }

    @Nullable
    @Override
    public String getType(Uri uri) {
        return null;
    }

    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        helper.db.insert("item_table", null, values);
        return null;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        helper.db.delete("item_table", selection, selectionArgs);
        return 0;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        helper.db.update("item_table", values, selection, selectionArgs);
        return 0;
    }
}

ItemAdapter class

    public class ItemAdapter extends BaseAdapter {
    private Context context;
    private static final long ID_CONSTANT = 0x666666L;
    private ArrayList<ItemObject> items;
    public ItemAdapter()
    {

    }
    public ItemAdapter(Context _context, ArrayList<ItemObject> _items)
    {
        context = _context;
        items = _items;
    }
    @Override
    public int getCount() {return items.size();}
    @Override
    public ItemObject getItem(int _position) {return items.get(_position);}
    @Override
    public long getItemId(int _position) { return ID_CONSTANT + _position;}
    @Override
    public View getView (int _position, View _convertView, ViewGroup _parent) {
        if(_convertView == null) {
            _convertView = LayoutInflater.from(context).inflate(R.layout.item_layout, _parent, false);
        }
        ItemObject item = getItem(_position);
        TextView text = (TextView) _convertView.findViewById(R.id.weight);
        text.setText(item.getWeight().toString());
        text = (TextView) _convertView.findViewById(R.id.steps);
        text.setText(Integer.toString(item.getSteps()));
        text = (TextView) _convertView.findViewById(R.id.date);
        text.setText(item.getDate().toString());
        return _convertView;
    }

}
items = placeholder;