列表视图中未显示数据

时间:2012-12-21 03:36:23

标签: android

我运行应用程序时会运行两个进程。当进程“loaddata”完成时,结果将使用sqlite存储到数据库中。当该进程下一个“Workoffline”将被运行时,它负责从数据库加载数据并显示应用程序的列表视图。但我的问题是,当应用程序完成后,我的listview为空,我运行应用程序再次重新加载,新数据出现。你可以帮我吗。(我必须在谷歌上找到可以使用android同步,为了处理“LoadData”运行完成然后上次运行的过程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); //
}

0 个答案:

没有答案