アプリケーションの実行時に 2 つのプロセスが実行されています。プロセス「loaddata」が終了すると、結果は sqlite を使用してデータベースに格納されます。そのプロセスの次の「Workoffline」が実行されると、データベースからデータをロードし、アプリケーションのリストビューを表示します。しかし、ここでの問題は、アプリケーションが終了するとリストビューが空になり、アプリケーションを実行して再度リロードすると、新しいデータが表示されることです。あなたは私を助けてくれますか?
ソースコード
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.invoice);
doTimerTask();
}
// load dữ liệu lên listview
public void loaddatalistview()
{
listview = (ListView) findViewById(R.id.listView1);
listview.setAdapter(new DataAdapter(Invoice.this, codeInvoiceArray
.toArray(new String[codeInvoiceArray.size()]), nameArray
.toArray(new String[nameArray.size()]), phonenumberArray
.toArray(new String[phonenumberArray.size()]), addressArray
.toArray(new String[addressArray.size()])));
listview.setOnItemClickListener(new OnItemClickListener() {
// xử lý sự kiện khi chọn item trên listview
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent j = new Intent(Invoice.this, Menu_Main.class);
// lấy thông tin thông qua vị trí của item được chọn
String url = urlArray.get(position);
String address = addressArray.get(position);
String mahoadon = codeInvoiceArray.get(position);
String phone = phonenumberArray.get(position);
// chuyển thông tin này qua bên phần MENU
j.putExtra("url", url);
j.putExtra("address", address);
j.putExtra("mahoadon", mahoadon);
j.putExtra("phone", phone);
j.putExtra("ID", IDDelivery);
startActivity(j);
}
});
}
// Ứng dụng sẽ hoạt động offline với data được lưu trong database khi thiết
// bị không có
// kết nối mạng
public void workoffline()
{
clearArray();
try {
mDb.openDB();
Cursor mCursor = mDb.getAllInvoice(IDDelivery);
if (mCursor.moveToFirst()) {
do {
codeInvoiceArray.add(mCursor.getString(1));
nameArray.add(mCursor.getString(2));
phonenumberArray.add(mCursor.getString(3));
addressArray.add(mCursor.getString(4));
urlArray.add(mCursor.getString(5));
} while (mCursor.moveToNext());
loaddatalistview();
}
mDb.closeDB();
} catch (Exception e) {
e.printStackTrace();
}
}
// lấy dữ liệu từ server về thiết bị
public void loaddata()
{
String sampleURL = SERVICE_URL + "/monthlytarget.php";
CallUrl wst = new CallUrl(CallUrl.GET_TASK, this, "Lấy thông tin hóa đơn...", 1, IDDelivery);
wst.execute(new String[] {
sampleURL
});
// Hiển thị thông tin nhận được lên listview
}
// kiểm tra thiết bị có kết nối mạng hay không?
// nếu có thiết bị sẽ làm việc online
// nếu không thiết bị sẽ chuyển sang hoạt động offline
public void testNetwork()
{
// Kiểm tra kết nối đến server
TestConnectionNew test = new TestConnectionNew();
try {
String recieve = test.execute("http://longvansolution.tk/monthlytarget.php").get();
if (recieve.equalsIgnoreCase("true") && isNetworkAvailable() == true)
{
***loaddata();
workoffline();***
}
else if (recieve.equalsIgnoreCase("false") || isNetworkAvailable() == false)
{
String mess = "Không thể kết nối đến server hoặc thiết bị chưa có kết nối mạng!";
Toast.makeText(Invoice.this, mess, Toast.LENGTH_SHORT).show();
workoffline();
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
// thực hiện load data từ server về theo thời gian định sẵn
public void doTimerTask() {
TimerTask mTimerTask;
Timer t = new Timer();
final Handler handler = new Handler();
mTimerTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
testNetwork();
Log.d("TIMER", "TimerTask run");
}
});
}
};
// public void schedule (TimerTask task, long delay, long period)
t.schedule(mTimerTask, 500, 300000); //
}