PDA

View Full Version : مشکل در Lazy Load Listview



mazimazi
سه شنبه 03 شهریور 1394, 13:52 عصر
متد های سرور :

function readData(){
$conn = connectToDataBase();

$part = $_REQUEST['part'];
$start = $part * 10;
$end = $start + 10;

$sql = "SELECT * FROM app WHERE isActive='1' ORDER BY ap_id DESC LIMIT '$start' ,'$end' ";

$result = $conn->query($sql);

if ($result->num_rows > 0) {
// output data of each row
$output=array();
while($row = $result->fetch_assoc()) {
$record=array();
$record['app_id']=$row['app_id'];
$record['app_name']=$row['app_name'];
$record['app_vote']=$row['app_vote'];
$record['app_rating']=$row['app_rating'];
$record['app_logourl']=$row['app_logourl'];





$output[]=$record;


}

} else {
echo "0 results";
}

echo json_encode($output);
$conn->close();


}


اینم کدعای ارسال به سرور :
private void populateFromServer() {
String url = "http://192.168.1.51/serial-server/service.php?action=read";
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("part", "" + part));
Log.i("LOG", "part : " + part);


final String result = Webservice.readUrl(url, params);
if (result == null) {
Toast.makeText(ActivitySerials.this, "خطا در اتصال به سرور", Toast.LENGTH_SHORT).show();
} else {
Thread thread = new Thread(new Runnable() {

@Override
public void run() {
try {
appes.clear();
JSONArray appes= new JSONArray(result);
for (int i = 0; i < appes.length(); i++) {
JSONObject object = series.getJSONObject(i);
StructSerials serial = new StructSerials();
app.id = object.getLong("app_id");
app.name = object.getString("app_name");
app.ratingValue = (float) object.getDouble("app_rating");
app.logoUrl = object.getString("app_logourl");
app.votes = object.getString("app_vote");


appes.add(app);


}
adapter.notifyDataSetChanged();
part += 1;
list.setIsLoading(false);
}

catch (JSONException e) {
e.printStackTrace();
}
}

});


مشکل اینه که بعد از اجرا هر درخواست به سرور آرایه رو پاک میکنه . مثلا داخل بانک اطلاعاتی 30 تا رکورد دارم.بار اول 10 تا رکورد رو میگیری نمایش میدی برای بار دوم 10 تا اطلاعای که گرفتی پاک میشه و به جای 30 تا 20 رکورد نمایش میده حالا اگه اون clear رو برداری مشکلی که پیش میاد بعد هر درخواست اطلاعت تکراری تو لیست ویو میبینی. باید چی کار کنم ؟

s3rv3r
چهارشنبه 04 شهریور 1394, 22:46 عصر
مشکل از سمت سرور هست دوست عزیز
$start = $part * 10;
$end = $start + 10;
من عدد 1 میدم و نتیجه کوئری میشه شروع از 10 و 20 رکورد بعدی رو جدا میکنه
end رو ثابت کن 10
و clear رو هم بردار

موفق باشی

mazimazi
جمعه 06 شهریور 1394, 18:09 عصر
یک سوال دیگه من دارم ؟
وقتی 10 رکورد از دیتابیس گرفتم و میام به آخر لیست میرسم بعد از refresh به اول لیست بر میگردم چی کار کنم که بعد refresh به اول لیست نیام و همون پایین رکورد ها اضافه بشه ؟

tux-world
جمعه 06 شهریور 1394, 22:18 عصر
داده ها رو باید notifydatasetchange بکنید. ولی این کار شما برای lazy load کاملا اشتباه و غیر حرفه ای هستش

mazimazi
جمعه 06 شهریور 1394, 22:43 عصر
داده ها رو باید notifydatasetchange بکنید. ولی این کار شما برای lazy load کاملا اشتباه و غیر حرفه ای هستش

داده ها وقتی به پایین صفحه میرسم notify میشه و اضافه میشه ولی میاد اول لیست و من باید دوباره لیست رو پایین بکشم تا رکورد ها به لیست اضافه بشه.دوست من برای چی اشتباهه ؟ و شما چه راهی پیشنهاد میکنین ؟

s3rv3r
جمعه 06 شهریور 1394, 22:48 عصر
از لایبرری PullToRefreshh ListView استفاده کن
اگه از بالا pull کردی باید داده هارو به اول لیست اضافه کنی اگه لیست ویو از پایین pull کردی به آخرین اضافه کن

مثال های تو گیت هابش مشخصه کاملا