بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ
محاسبه مبلغ در لیست ویو (حل شد)
مدیریت گفتگو
آخرین تغییر: 11 سال پیش
سلام:
من در لیست ویو که از سرور می خونه تعدادی قیمت دارم . حالا قیمت ها رو چطوری از لیست ویو بگیرم که می خوام جمع کنم با هم؟
پاسخها 6
این الان غلطه ولی نمیدونم چطوری درسته ! :(
String result = Webservice.readUrl(url, params);
if (result != null) {
try {
G.account.clear();
JSONArray tasks = new JSONArray(result);
for (int i = 0; i < tasks.length(); i++) {
JSONObject object = tasks.getJSONObject(i);
StructCooperationAccount task = new StructCooperationAccount();
task.Row = object.getString("Row");
task.Desc = object.getString("Desc");
task.Pay = object.getInt("Pay");
if(object != null){
int F = task.Pay;
int Sum = F + task.Pay;
Log.i("LOG", " Sum : " + Sum);
}
G.account.add(task);
نظرات
تعریف متغیر sum رو ببر قبل از readUrl . اینجوری که شما نوشتی هر بار که یک json می خونی یک متغییر Sum جدید ایجاد می شه و مقدار قبلی که داخلش ریختی صفر میشه.
iebu جان انجام دادم ولی مثلا اگه دو تا قیمت اومده باشه تو لیست ویو میره اخری رو جمع می کنه . یعنی 22 رو می کنه 44
متغییر sum رو فیلد تعریف کنید فکر می کنم مشکلتون حل می شه.
اینی که نوشتی درسته. متغیر های F و sum رو قبل از for انجام بده که به قول دوستمون هر بار که for اجرا میشه، متغیر ها خالی نشه
احسان جان بازم نشد. ببین الان 2 تا قیمت اومده تو لیست ویو .
در ردیف اول 1 تومان
در ردیف دوم 22 تومان
حالا وقتی نمایش میده : 44
یعنی ردیف دوم رو امده 2 ها رو جمعه کرده. من اینو نمی خوام !!!
یعنی جیسونی که دریافت میکنی، دوتا Object داره؟ مطمئنی از سمت سرور عدد دریافت میکنی؟
ببین عکس رو این الان لیت ویو هستش. فقط ردیف دو رو در نظر میگیره و 22 میشه 44

نظرات
log بگیر ببین چرا دو بار جمع می زنه؟ طول آرایه رو LOG بگیر.
iebu جان دقیقا تو این کدها کدو رو log بگیرم؟
الان نمیدونم چرا هر لاگی می گیرم دوبار چاپ میشه !
شاید 2 بار read url رو فراخوانی می کنی. یعنی از دو قسمت مختلف.
نه این کار رو نکردم . الان مشکل جمع کردن چرا حل نمیشه ؟ یعنی task.pay میاد یه ردیف رو می خونه؟
از readUrl و asks.length و حلقه For و Log بگیر . اشکال مشخص می شه.
منظور دوستمون اینه که توی قسمت های مختلف کدت لاگ بگیر ببین این task.pay دقیقا چی چاپ میکنه و چند بار چاپ میشه. توی for لاگ بگیر
خوب وقتی از task.pay لاگ می گیرم نتیجه میشه این .
Log.i("LOG", " Pay : " + task.Pay);
Pay : 1
Pay : 22
نظرات
اگه یکبار میاره درسته بفیه رو هم بگیر.
بقیه رو هم گرفتم مثل همین لاگ میاره ولی جمع اعداد درست نیست.
البته توجه داشته باشید که اینها آرایه هستند نه معمولی
چرا ایتم های adapter رو جمع نمی زنی؟ G.accounts منظورمه.
چه فرقی می کنه ؟ در کل باید هر چند تا آرایه هست با هم جمع زده بشه. من مشکلم اینه نمیدونم آرایه های اینجا چطور جمع زده میشه .
سلام
بعد از اینکه G.account از سمت سرور تغذیه شد این 5خط کد رو اجرا کن:
int sum = 0;
for(StructCooperationAccount struct : G.account){
sum = sum + struct.Pay;
}
Log.i("LOG", " Sum : " + sum);
نظرات
با راهنمایی @Ali قسمتی از کارم حل شد، من در برنامم تعداد رو هم میگیرم، میخوام زمانی که تعداد تغییر کرد بلافاصله قیمت کل هم تغییر کنه، اما فقط زمانی که یبار اکتیویتی حاضر رو میبندم و باز میکنم قیمت کل تغییر میکنه
تعداد رو داخل آداپتر تنظیم کردم و قیمت کل رو بعد از خواندن اطلاعات، ممنون میشم راهنماییم کنین
ویرایش
در متد fill داخل آداپتر تعداد رو بوسیله Button کم و زیاد میکنم:(فقط دکمه اضافه کردن رو قرار دادم، کم کردن هم مانند همینه)
btnFactorPlus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
requestNumber++;
params.clear();
params.add(new BasicNameValuePair("request_name", "" + G.preferences.getLong("RECIEVED_ID", 1024)));
params.add(new BasicNameValuePair("request_brand", "" + item.id));
params.add(new BasicNameValuePair("request_number", "" + requestNumber));
Webservice.readUrl("http://192.168.56.1/web/?action=request", params);
txtFactorNumber.setText("" + requestNumber);
}
});
در تابع اصلی هم تعریف کردم:
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("user_id", "" + G.preferences.getLong("RECIEVED_ID", 1024)));
sendData(params);
int sum = 0;
for (StructBazarche struct: requests) {
sum += (struct.price * struct.number);
}
TextView txtFactorTotal = (TextView) findViewById(R.id.txtFactorTotal); <--در اینجا قیمت کل نشون داده شده
txtFactorTotal.setText("" + sum);
نظرات
بعد از تغییر تعداد ListView رو آپدیت می کنی؟
منظورتون استفاده از دستور notifydatasetchange هست؟ نه، چطوری و کجا ازش استفاده کنم؟ داخل آداپتر یا اکتیویتی؟
نمی دونم تعداد رو کاربر چجوری وارد می کنه. اما اگه با EditText مقدار رو می گرید می تونید در رویداد تغییر متن کنترل Adapter رو آپدیت کنید.
من دوتا Button قرار دادم که یکیش تعداد رو اضافه میکنه و یکیش تعداد رو کم میکنه، Button ها رو داخل آداپتر تنظیم کردم، اما جمع کل رو داخل اکتیویتی طبق راهنمایی @ali حالا زمانی که روی یکی از Buttonها کلیک میشه باید داخل اکتیویتی بگم یبار دیگه جمع ها رو محاسبه کن که راه حلشو نمیدونم!
چیزی که الان به ذهنم می رسه اینه که textView مربوط به جمع رو در اکتیویتی به صورت Static تعریف کنید و بعد از کلیک دکمه افزایش یا کاهش در متد fill مربوط به adapter، مقدار مجموع جدید رو هم با متد setText برای TextView اکتیویتی مقدار دهی کنید.
مرسی @vahid جان مشکلم فکر کنم با همین روش شما داخل لینک زیر حل شد
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
ویرایش
پیام
نظرات