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