Note that there are some explanatory texts on larger screens.

plurals
  1. POspeed of app when run by data from sqlite
    primarykey
    data
    text
    <p>my app will load data from server and show on listview and save this data to database sqlite on device.When device don't have connect to internet, app will load data from database of device to use.My problem is when run by data have connect to server fast, but when work offline load data from database, my app run slow and lag and delay.Can you help me why so!! Source code</p> <pre><code>public class Hoadon extends Activity { private String IDDelivery; private static String addresslocation = null; private Geocoder geocoder; private LocationManager mlocManager; private Location loc; private String provider = LocationManager.GPS_PROVIDER; private ArrayList&lt;String&gt; phonenumberArray = new ArrayList&lt;String&gt;(); private ArrayList&lt;String&gt; codeInvoiceArray = new ArrayList&lt;String&gt;(); private ArrayList&lt;String&gt; nameArray = new ArrayList&lt;String&gt;(); private ArrayList&lt;String&gt; addressArray = new ArrayList&lt;String&gt;(); private ArrayList&lt;String&gt; urlArray = new ArrayList&lt;String&gt;(); private ListView listview; private DB_Adapter mDb = new DB_Adapter(this); // Resume ứng dụng @Override protected void onResume() { // TODO Auto-generated method stub Toast.makeText(this, addresslocation, Toast.LENGTH_SHORT).show(); super.onResume(); } // Khởi tạo ứng dụng @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.hoadon); // Nhận dữ liệu từ activity khác Bundle extras = getIntent().getExtras(); if (extras != null) { IDDelivery = extras.getString("ID"); } // hàm kiểm tra cài đặt gps trên thiết bị LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE); boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER); if (!enabled) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Thông tin GPS!"); builder.setMessage("Bạn có muốn bật GPS không?"); builder.setPositiveButton("Có", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Launch settings, allowing user to make a change Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(i); } }); builder.setNegativeButton("Không", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }); builder.create().show(); } // Lấy thông tin vị trí hiện tại của thết bị geocoder = new Geocoder(getApplicationContext(), Locale.getDefault()); mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); LocationListener mlocListener = new GPSLocationListener(); mlocManager.requestLocationUpdates(provider, 10000, 5, mlocListener); // Khởi động service để chuyển thông tin vị trí về server Intent i = new Intent(Hoadon.this, GpsService.class); i.putExtra("IDgps", IDDelivery); startService(i); doTimerTask(); } 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") &amp;&amp; isNetworkAvailable() == true) { new LoadData().execute(); } 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 internet!Ứng dụng sẽ chuyển sang hoạt động offline"; Toast.makeText(Hoadon.this, mess, Toast.LENGTH_SHORT).show(); workoffline(); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } // return testInternet; } // Hàm kiểm tra kết nối mạng trên thiết bị public boolean isNetworkAvailable() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo(); // Nếu không có kết nối mạng thì network sẽ null // Nếu có kết nối mạng chúng ta sẽ kết nối if (networkInfo != null &amp;&amp; networkInfo.isConnected()) { // Log.i("net status:", "Online...!!!"); return true; } // Log.i("net status:", "offline...!!!"); return false; } // Thông báo dạng Alert public void showAlert(final String mess) { Hoadon.this.runOnUiThread(new Runnable() { public void run() { AlertDialog.Builder builder = new AlertDialog.Builder( Hoadon.this); builder.setTitle("Thông báo!"); builder.setMessage(mess) .setCancelable(false) .setPositiveButton("Đồng ý", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { } }); AlertDialog alert = builder.create(); alert.show(); } }); } // restart ứng dụng @Override protected void onRestart() { // TODO Auto-generated method stub // load dữ liệu mỗi lần khởi động lại activity workoffline(); super.onRestart(); } // Khởi tạo menu @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub MenuInflater i = getMenuInflater(); i.inflate(R.menu.menu_hoadon, menu); return true; } // Menu activity @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub super.onOptionsItemSelected(item); switch (item.getItemId()) { case R.id.bando: Intent i = new Intent(Hoadon.this, Bando.class); startActivity(i); break; case R.id.chamsockhachhang: Intent j = new Intent(Hoadon.this, Cskh.class); startActivity(j); break; case R.id.logout_hoadon: Intent k = new Intent(Hoadon.this, GpsService.class); stopService(k); System.exit(0); break; case R.id.update: testNetwork(); break; default: break; } return true; } // 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); // } // xử lý phím back @Override public void onBackPressed() { } // Thông báo dạng Toast public void thongbao(String mess) { Toast.makeText(Hoadon.this, mess, Toast.LENGTH_SHORT).show(); } // load dữ liệu lên listview public void loaddatalistview() { listview = (ListView) findViewById(R.id.listView1); listview.setAdapter(new DataAdapter(Hoadon.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&lt;?&gt; parent, View view, int position, long id) { Intent j = new Intent(Hoadon.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 data được lưu trong database khi thiết bị không có // kết nối mạng public void workoffline() { codeInvoiceArray.clear(); nameArray.clear(); phonenumberArray.clear(); addressArray.clear(); urlArray.clear(); 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(); } } catch (Exception e) { e.printStackTrace(); } mDb.closeDB(); } // class load data từ server về thiết bị private class LoadData extends AsyncTask&lt;Void, Void, Void&gt; { private ProgressDialog progressDialog; private Boolean flag = false; private String phonenumber, name, address, url, code; private JSONArray jArray; private String result = null; private InputStream is = null; private StringBuilder sb = null; @Override // can use UI thread here protected void onPreExecute() { this.progressDialog = ProgressDialog.show(Hoadon.this, "", " Đang tải thông tin..."); } @Override protected void onPostExecute(final Void unused) { this.progressDialog.dismiss(); if (flag == true) { thongbao("Tải dữ liệu thành công"); } else { thongbao("Hôm nay không có gì để giao!"); } try { loaddatalistview(); } catch (Exception e) { Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); } } // lấy thông tin từ server về dưới dạng json, được chuyển thành chuỗi và // lưu vào các mảng @Override protected Void doInBackground(Void... params) { try { // Gửi thông tin id người giao hàng lên server để lấy danh sách // hóa đơn về ArrayList&lt;NameValuePair&gt; nameValuePairs = new ArrayList&lt;NameValuePair&gt;(); HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost( "http://longvansolution.tk/monthlytarget.php"); nameValuePairs = new ArrayList&lt;NameValuePair&gt;(1); nameValuePairs.add(new BasicNameValuePair("user", IDDelivery)); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); // chuyển thông tin nhận được về dạng chuỗi BufferedReader reader = new BufferedReader( new InputStreamReader(is, "iso-8859-1"), 80); sb = new StringBuilder(); sb.append(reader.readLine() + "\n"); String line = "0"; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result = sb.toString(); } catch (Exception e) { Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); } // kiểm tra thông tin nhận được từ server if (result.equalsIgnoreCase("null\n\n \n")) { flag = false; // làm sạch mảng trước khi muốn thêm các thành phần để tránh // tình trạng trùng lặp phonenumberArray.clear(); codeInvoiceArray.clear(); nameArray.clear(); addressArray.clear(); urlArray.clear(); } else { flag = true; try { jArray = new JSONArray(result); JSONObject json_data = null; phonenumberArray.clear(); codeInvoiceArray.clear(); nameArray.clear(); addressArray.clear(); urlArray.clear(); mDb.openDB(); // sử dụng json lấy các giá trị thông qua các key // gán nó vào các mảng tương ứng for (int i = 0; i &lt; jArray.length(); i++) { json_data = jArray.getJSONObject(i); phonenumber = json_data.getString("phonenumber"); address = json_data.getString("address"); name = json_data.getString("name"); url = json_data.getString("url"); code = json_data.getString("code"); phonenumberArray.add(phonenumber); codeInvoiceArray.add(code); nameArray.add(name); addressArray.add(address); urlArray.add(url); if (mDb.test(code) == true) { mDb.insert(code, name, phonenumber, address, url, "Chuagiao", IDDelivery); } } } catch (JSONException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } mDb.closeDB(); return null; } } // Lấy vị trí của thiết bị public class GPSLocationListener implements LocationListener { @Override public void onLocationChanged(Location location) { // chuyển thông tin vị trí của thiết bị thành dạng địa chỉ để hiển // thị cho người dùng loc = mlocManager.getLastKnownLocation(provider); GoogleDataReader reader = new GoogleDataReader(); addresslocation = reader.GetAddressFromLatLng(loc.getLatitude(), loc.getLongitude(), geocoder); } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } } // Hàm trả về vị trí của thiết bị public static String gettext() { // TODO Auto-generated method stub return addresslocation; } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload