저는 새로운 Android입니다. 응용 프로그램을 만들었으며 phpmyadmin
에있는 테이블에서 json 데이터를 가져 와서 응용 프로그램의 데이터베이스에 저장합니다. 그리고 데이터를 읽고 RecyclerView에 표시하지만 처음으로 앱을 실행하면 테이블 데이터베이스에 아무것도 표시되지 않습니다. 하지만 두 번째로 앱은 원하는대로 데이터를 읽고 표시 할 수 있습니다.웹에서 JSON 데이터를 가져 와서 RecyclerView를 사용하여 표시
누구나 두 번째로 앱을 처음 실행하는 데 도움주세요.
db.querydata("Create table if not exists tbl_mon_app (_ID integer primary key, IDMon integer not null, IDCH integer not null, TenMon text not null, Gia text not null, ImgUrl text not null, ImgLocal text)");
Cursor c = db.getdata("select * from tbl_mon_app");
int count = c.getCount();
RequestQueue requestQueue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(Request.Method.GET, booking,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (response.equals("{\"DSMON\":[]}")) {
} else
try {
JSONObject jsonRootObject = new JSONObject(response);
JSONArray jsonArray = jsonRootObject.optJSONArray("DSMON");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
boolean check = false;
IDmon = jsonObject.optString("ID").toString();
IDcuahang = jsonObject.optString("IDCH").toString();
Tenmon = jsonObject.optString("TenMon").toString();
Gia = jsonObject.optString("Gia").toString();
Imgurl = jsonObject.optString("ImgUrl").toString();
String imgname = Imgurl.substring(Imgurl.lastIndexOf("/") + 1);
Cursor ds = db.getdata("select * from tbl_mon_app");
if (ds.moveToFirst()) {
while (!ds.isAfterLast()) {
if (IDmon.equals(ds.getString(ds.getColumnIndex("IDMon")))) {
check = true;
break;
}
ds.moveToNext();
}
}
if (check) {
db.querydata("update tbl_mon_app set IDCH='" + IDcuahang + "', TenMon='" + Tenmon + "', Gia='" + Gia + "', ImgUrl='" + Imgurl + "', ImgLocal='" + "hismart/hinhmon/" + imgname + "' where IDMon='" + IDmon + "'");
} else {
db.querydata("insert into tbl_mon_app values(null,'" + IDmon + "','"
+ IDcuahang + "','" + Tenmon + "','" + Gia + "','" + Imgurl + "','" + "hismart/hinhmon/" + imgname + "')");
}
ds.close();
}
db.close();
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Lỗi", "Lỗi" + "\n" + error.toString());
}
}
);
requestQueue.add(stringRequest);
확인 데이터베이스 이름 : 다음은 내 코드입니다
Cursor cur = db.getdata("select * from tbl_mon_app");
if (cur.moveToFirst()) {
while (!cur.isAfterLast()) {
Toast.makeText(BookActivity.this, cur.getString(cur.getColumnIndex("Gia")), Toast.LENGTH_SHORT).show();
ArrIDMon.add(cur.getString(cur.getColumnIndex("IDMon")));
cur.moveToNext();
}
}
if (cur.moveToFirst()) {
while (!cur.isAfterLast()) {
// Toast.makeText(BookActivity.this, cur.getString(cur.getColumnIndex("TenMon")), Toast.LENGTH_SHORT).show();
ArrTenmon.add(cur.getString(cur.getColumnIndex("TenMon")));
cur.moveToNext();
}
}
if (cur.moveToFirst()) {
while (!cur.isAfterLast()) {
// Toast.makeText(BookActivity.this, cur.getString(cur.getColumnIndex("Gia")), Toast.LENGTH_SHORT).show();
ArrGia.add(cur.getString(cur.getColumnIndex("Gia")));
cur.moveToNext();
}
}
if (cur.moveToFirst()) {
while (!cur.isAfterLast()) {
// Toast.makeText(BookActivity.this, cur.getString(cur.getColumnIndex("Gia")), Toast.LENGTH_SHORT).show();
ArrImgUrl.add(cur.getString(cur.getColumnIndex("ImgUrl")));
cur.moveToNext();
}
}
if (cur.moveToFirst()) {
while (!cur.isAfterLast()) {
// Toast.makeText(BookActivity.this, cur.getString(cur.getColumnIndex("Gia")), Toast.LENGTH_SHORT).show();
ArrImgLocal.add(cur.getString(cur.getColumnIndex("ImgLocal")));
cur.moveToNext();
}
}
가 ArrayList에 데이터를 추가하고있는 데이터 세트가 여기
String abc = MainActivity.resultQR.getContents();
Toast.makeText(this, String.valueOf(count), Toast.LENGTH_SHORT).show();
// add data to arraylist
for (int i = 0; i < count; i++) {
Album a = new Album(abc, ArrIDMon.get(i), ArrTenmon.get(i), ArrGia.get(i), ArrImgLocal.get(i), ArrImgUrl.get(i));
albumList.add(a);
adapter.notifyDataSetChanged();
}
cur.close();
}
을 변경 통지 설정 : tbl_mon_app 데이터베이스가 위에 추가 읽기 Recycleview 어댑터
public class AlbumsAdapter extends RecyclerView.Adapter<AlbumsAdapter.MyViewHolder> {
private Context mContext;
private List<Album> albumList;
public CardView cardView;
public View itemView;
public ClipData.Item currentItem;
String folder_main = "hismart/hinhmon";
File fileloc = new File(Environment.getExternalStorageDirectory(), folder_main);
String IDCH = "1";
SwipeRefreshLayout swipeContainer;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title, count;
public ImageView thumbnail, overflow;
public MyViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.title);
count = (TextView) view.findViewById(R.id.count);
thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
overflow = (ImageView) view.findViewById(R.id.overflow);
swipeContainer = (SwipeRefreshLayout) view.findViewById(R.id.swipeRefreshLayout);
}
}
public AlbumsAdapter(Context mContext, List<Album> albumList) {
this.mContext = mContext;
this.albumList = albumList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.album_card, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
Db db = new Db(mContext);
Album album = albumList.get(position);
holder.title.setText(album.getName());
holder.count.setText(album.getGia() + " vnđ");
Glide.with(mContext).load(album.getUrl()).into(holder.thumbnail);
}
getset 정보]
public class Db extends SQLiteOpenHelper {
public Db(Context context) {
super(context, "Db.sqlite", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
public Cursor getdata(String sql) {
SQLiteDatabase db = getWritableDatabase();
Cursor c = db.rawQuery(sql, null);
return c;
}
public void querydata(String sql) {
SQLiteDatabase db = getWritableDatabase();
db.execSQL(sql);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
를 추가하려면? 읽을 가치가 없습니다. 코드를 다시 포맷하십시오. – nhoxbypass
@nhoxbypass 이 메서드는 JSON 데이터를 데이터베이스에 저장 한 다음 읽어서 Arraylist에 추가합니다. 제발 날 도와 줬어, 2 일이 걸렸어. ( – lnmh
@nhoxbypass가 말했듯이 코드가 섞여서 읽기가 힘들지만 문제는 Volley가 비동기식으로 실행되지만 어댑터를 즉시 업데이트한다는 것입니다. – charlag