【发布时间】:2019-01-08 10:43:30
【问题描述】:
我已经解析了一个 xml 它可以工作,但现在我想将数据存储在 SQLite db 中,因为这是每部手机的本地地址。
我想在db中插入xml的数据,然后从db中加载数据。
我不知道如何创建一个 SQLite 数据库来检索数据,我可以在那里保存新条目。
这是我的代码Bookmark.class。
书签.class
public class Bookmark {
String name, id, nativeUrl, searchUrl;
int icon;
int viewType;
public String getName() { return name; }
public void setName(String name) {
this.name = name;
}
public int getIcon() { return icon; }
public void setIcon(int icon) {
this.icon = icon;
}
public String getId(){
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNativeUrl() {
return nativeUrl;
}
public void setNativeUrl(String nativeUrl) {
this.nativeUrl = nativeUrl;
}
public String getSearchUrl() {
return searchUrl;
}
public void setSearchUrl(String searchUrl) {
this.searchUrl = searchUrl;
}
public int getViewType() {
return viewType;
}
public void setViewType(int viewType) {
this.viewType = viewType;
}
@Override
public String toString() {
return "Bookmark{" +
"name='" + name + '\'' +
", icon='" + icon + '\'' +
", id='" + id + '\'' +
", nativeUrl='" + nativeUrl + '\'' +
", searchUrl='" + searchUrl + '\'' +
'}';
}
}
这是Adapter.class
适配器类
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
ArrayList<Bookmark> arrayList = new ArrayList<>();
public static final int ITEM_TYPE_ONE = 0;
public static final int ITEM_TYPE_TWO = 1;
public MyAdapter(Context context, ArrayList<Bookmark> arrayList) {
this.context = context;
this.arrayList = arrayList;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = null;
if (viewType == ITEM_TYPE_ONE) {
view = LayoutInflater.from(context).inflate(R.layout.grid_item, parent, false);
return new ViewHolder(view);
} else if (viewType == ITEM_TYPE_TWO) {
view = LayoutInflater.from(context).inflate(R.layout.add_bookmark, parent, false);
return new ButtonViewHolder(view);
}else {
return null;
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
final int itemType = getItemViewType(position);
if (itemType == ITEM_TYPE_ONE) {
final ViewHolder viewHolder = (ViewHolder) holder;
viewHolder.tvName.setText(arrayList.get(position).getName());
viewHolder.tvIcon.setImageResource(arrayList.get(position).getIcon());
// viewHolder.tvId.setText(arrayList.get(position).getId());
viewHolder.tvSearchUrl.setText(arrayList.get(position).getSearchUrl());
viewHolder.tvNativeUrl.setText(arrayList.get(position).getNativeUrl());
} else if (itemType == ITEM_TYPE_TWO) {
ButtonViewHolder buttonViewHolder = (ButtonViewHolder) holder;
buttonViewHolder.imgButton.setImageResource(arrayList.get(position).getIcon());
}
}
@Override
public int getItemViewType(int position) {
// based on you list you will return the ViewType
if (arrayList.get(position).getViewType() == 0) {
return ITEM_TYPE_ONE;
} else {
return ITEM_TYPE_TWO;
}
}
@Override
public int getItemCount() {
return arrayList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView tvName, tvId, tvSearchUrl, tvNativeUrl;
ImageView tvIcon;
public ViewHolder(@NonNull View itemView) {
super(itemView);
tvName = itemView.findViewById(R.id.textView);
tvIcon = itemView.findViewById(R.id.image_view);
// tvId = itemView.findViewById(R.id.tvId);
tvSearchUrl = itemView.findViewById(R.id.tvSiteURL);
tvNativeUrl = itemView.findViewById(R.id.tvNativeUrl);
// tvName.setTextColor(Color.parseColor("#FFFFFF"));
}
}
public class ButtonViewHolder extends RecyclerView.ViewHolder {
ImageView imgButton;
public ButtonViewHolder(@NonNull View itemView) {
super(itemView);
imgButton = itemView.findViewById(R.id.image_button_add);
imgButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ActivityChangeBookmark.class);
v.getContext().startActivity(intent);
}
});
}
}
这是Fragment.class,我展示了解析后的xml。
片段.class
public class FragmentBookmark extends Fragment {
ArrayList<Bookmark> arrayList = new ArrayList<>();
MyAdapter myAdapter;
View paramView;
RecyclerView myRecyclerView;
private Context mContext;
@Override
public void onAttach(Context context) {
super.onAttach(context);
mContext = context;
}
@Nullable
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
paramView = inflater.inflate(R.layout.bookmark, container, false);
myRecyclerView = paramView.findViewById(R.id.myRecyclerView);
// myRecyclerView.setLayoutManager(new LinearLayoutManager(mContext));
myRecyclerView.setLayoutManager(new GridLayoutManager(mContext, 4));
myRecyclerView.setHasFixedSize(true);
myAdapter = new MyAdapter(mContext, arrayList);
myRecyclerView.setAdapter(myAdapter);
try {
XmlResourceParser xpp = getResources().getXml(R.xml.bookmarks);
while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) {
if (xpp.getEventType() == XmlPullParser.START_TAG) {
if (xpp.getName().equals("Bookmark")) {
Bookmark bookmark = new Bookmark();
bookmark.setName(xpp.getAttributeValue(null, "name"));
bookmark.setSearchUrl(xpp.getAttributeValue(null, "searchUrl"));
bookmark.setNativeUrl(xpp.getAttributeValue(null, "nativeUrl"));
int drawableResourceId = getResources().getIdentifier(xpp.getAttributeValue(null, "icon"),"drawable", mContext.getPackageName());
bookmark.setIcon(drawableResourceId);
bookmark.setViewType(0);
arrayList.add(bookmark);
}
}
xpp.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
myAdapter.notifyDataSetChanged();
Bookmark bookmark = new Bookmark();
bookmark.setViewType(1);
bookmark.setIcon(R.drawable.add_new_bookmark_icon);
arrayList.add(bookmark);
return paramView;
}
}
这是.XML
<Bookmarks>
<Bookmark name="Bing" hidden="" icon="bing" id="0" nativeUrl="" searchUrl="https://www.bing.com" />
<Bookmark name="Google" hidden="true" icon="google" id="1" nativeUrl="" searchUrl="https://www.google.com" />
<Bookmark name="Youtube" hidden="" icon="youtube" id="2" nativeUrl="" searchUrl="http://m.youtube.com" />
<Bookmark name="Facebook" hidden="" icon="facebook" id="3" nativeUrl="facebook://" searchUrl="https://m.facebook.com" />
<Bookmark name="Twitter" hidden="" icon="twitter" id="4" nativeUrl="" searchUrl="https://mobile.twitte.com" />
<Bookmark name="Instagram" hidden="" icon="instagram" id="5" nativeUrl="instagram://" searchUrl="https://instagram.com" />
<Bookmark name="Gmail" hidden="" icon="gmail" id="6" nativeUrl="googlemail://" searchUrl="https://gmail.com" />
<Bookmark name="Translate" hidden="" icon="google_translate" id="7" nativeUrl="" searchUrl="https://" />
<Bookmark name="Amazon" hidden="" icon="amazon" id="8" nativeUrl="" searchUrl="https://www.amazon.com" />
<Bookmark name="Wikipedia" hidden="" icon="wiki" id="9" searchUrl="http://en.m.wikipedia.org/w/index.php?title=Main_Page" />
<Bookmark name="Weather" hidden="" icon="weathercom" id="10" searchUrl="http://weather.com" />
<Bookmark name="eBay" hidden="" id="9" icon="ebay" searchUrl="http://ebay.to/1VPVeAs" />
<Bookmark name="Apple" id="10" icon="apple" searchUrl="http://www.apple.com" hidden="true" />
</Bookmarks>
【问题讨论】:
标签: android xml android-fragments xml-parsing android-sqlite