۱۳۹۵/۰۵/۰۲, ۰۸:۵۳ ب.ظ (آخرین تغییر در ارسال: ۱۳۹۵/۰۵/۰۳, ۰۸:۱۱ ب.ظ توسط admin.)
سلام دوستان
من طبق آموزشهایی که توی همین سایت وجود داره تونستم یه لیست ویو سفارشی بسازم
ولی یک مشکلی دارم
و اونم اینه که :
برنامه من یک سری اطلاعات رو از دیتابیس دریافت و باید توی لیست ویو سفارشیمون نشون بده
اما برنامه فقط آخرین رکورد از دیتابیس رو نشون میده
و بقیه رکورد ها رو نمایش نمیده
خواهشا راهنماییم کنین . من یکی دو هفتس شروع به برنامه نویسی اندروید کردم و فوق العاده علاقه دارم
لطفا راهنماییم کنین مشکلم حل شه و اولین ایده ی خودمو عملی کنم .
در واقع، یا مشکل از کدهای java مربوط به کار با database است، یا اینکه اصلا خود query (دستور فراخوانی از database) اشتباه نوشته شده و نتایجی غیر از آنچه می خواهید را برمی گرداند.
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
در واقع، یا مشکل از کدهای java مربوط به کار با database است، یا اینکه اصلا خود query (دستور فراخوانی از database) اشتباه نوشته شده و نتایجی غیر از آنچه می خواهید را برمی گرداند.
آخه با لیست ویو ی ساده تموم رذیف های ذخیره شذه در دیتابیس رو بر میگردونه
پس مشکل از کوئری ها نمی تونه باشه
چشم انشاالله ب زوذی کد هارو قرار میدم .
خییییییییییییییییییییییییییللللللللللللللییییییییییییییییییی ممنون از سایت خیییییییییییییللللللللللللیییییییییییی خوبتون
(۱۳۹۵/۰۵/۰۶, ۱۲:۵۳ ب.ظ)klike نوشته: کد های کامل لیست ویو سفارشی
با تشکر از مدیریت
منظور بنده این بود که کدها را درج کنید (درج بخش های مهم آنها به صورت بلوک کد) تا فردی که موضوع را می خواند، نگاهی هم به کدها بیندازد و اگر موردی به ذهنش رسید، آن را تذکر بدهد.
معمولا فایل ها توسط کاربران دانلود نمی شوند.
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
(۱۳۹۵/۰۵/۰۶, ۱۲:۵۳ ب.ظ)klike نوشته: کد های کامل لیست ویو سفارشی
با تشکر از مدیریت
منظور بنده این بود که کدها را درج کنید (درج بخش های مهم آنها به صورت بلوک کد) تا فردی که موضوع را می خواند، نگاهی هم به کدها بیندازد و اگر موردی به ذهنش رسید، آن را تذکر بدهد.
معمولا فایل ها توسط کاربران دانلود نمی شوند.
(۱۳۹۵/۰۵/۰۶, ۱۲:۵۳ ب.ظ)klike نوشته: کد های کامل لیست ویو سفارشی
با تشکر از مدیریت
منظور بنده این بود که کدها را درج کنید (درج بخش های مهم آنها به صورت بلوک کد) تا فردی که موضوع را می خواند، نگاهی هم به کدها بیندازد و اگر موردی به ذهنش رسید، آن را تذکر بدهد.
معمولا فایل ها توسط کاربران دانلود نمی شوند.
من ابتدا یک کلاس جدا گانه برای لیست ویو سفارشیم ساختم که کد هاش بصورت زیر :
کد:
package com.Ehsan.timer;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class CustomList extends ArrayAdapter<String>{
private final Activity context;
private final String[] roz;
private final String[] tar;
private final String[] time;
private final String[] mony;
(۱۳۹۵/۰۵/۰۶, ۱۲:۵۳ ب.ظ)klike نوشته: کد های کامل لیست ویو سفارشی
با تشکر از مدیریت
منظور بنده این بود که کدها را درج کنید (درج بخش های مهم آنها به صورت بلوک کد) تا فردی که موضوع را می خواند، نگاهی هم به کدها بیندازد و اگر موردی به ذهنش رسید، آن را تذکر بدهد.
معمولا فایل ها توسط کاربران دانلود نمی شوند.
من ابتدا یک کلاس جدا گانه برای لیست ویو سفارشیم ساختم که کد هاش بصورت زیر :
کد:
package com.Ehsan.timer;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class CustomList extends ArrayAdapter<String>{
private final Activity context;
private final String[] roz;
private final String[] tar;
private final String[] time;
private final String[] mony;
@Override
public boolean onItemLongClick(AdapterView<?> a, View v, int position, long id) {
// TODO Auto-generated method stub
String numit = list.get(position);
rdbr=new DATABASEME(getBaseContext());
rdbr.open();
try
{
//ساخت یک ذیالوگ
AlertDialog.Builder builder = new AlertDialog.Builder(Search.this);
builder.setTitle("جزئیات");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
}
});
//قابل نمایش کرد الرت دیالوگ
AlertDialog alert = builder.create();
alert.show();
(۱۳۹۵/۰۵/۰۶, ۱۲:۵۳ ب.ظ)klike نوشته: کد های کامل لیست ویو سفارشی
با تشکر از مدیریت
منظور بنده این بود که کدها را درج کنید (درج بخش های مهم آنها به صورت بلوک کد) تا فردی که موضوع را می خواند، نگاهی هم به کدها بیندازد و اگر موردی به ذهنش رسید، آن را تذکر بدهد.
معمولا فایل ها توسط کاربران دانلود نمی شوند.
من ابتدا یک کلاس جدا گانه برای لیست ویو سفارشیم ساختم که کد هاش بصورت زیر :
کد:
package com.Ehsan.timer;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class CustomList extends ArrayAdapter<String>{
private final Activity context;
private final String[] roz;
private final String[] tar;
private final String[] time;
private final String[] mony;
@Override
public boolean onItemLongClick(AdapterView<?> a, View v, int position, long id) {
// TODO Auto-generated method stub
String numit = list.get(position);
rdbr=new DATABASEME(getBaseContext());
rdbr.open();
try
{
//ساخت یک ذیالوگ
AlertDialog.Builder builder = new AlertDialog.Builder(Search.this);
builder.setTitle("جزئیات");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
}
});
//قابل نمایش کرد الرت دیالوگ
AlertDialog alert = builder.create();
alert.show();
من نگاهی به کدها انداختم.
می دانم بخش های مختلف کدها را می دانید، اما بنده به خاطر سایر کاربران، به صورت کامل توضیح می دهم.
در کلاس CustomList که در واقع Adapter مربوط به ListView است (از گسترش ArrayAdapter ساخته شده) و item های (ردیف های) ListView را می سازد، ورودی های آن به صورت زیر تعریف شده اند (5 ورودی) :
مشاهده می کنید که تمامی ورودی ها، آرایه (Array) می باشند (دسته کلید شماره 330).
اکنون به سراغ کدهای Activity با نام Search می رویم.
با کد زیر، به درستی Adapter را برای ListView تعیین کرده ایم :
کد پیاچپی:
CustomList adapter = new CustomList(Search.this,lbl0,lbl1,lbl2,lbl3,img); listView.setAdapter(adapter);
از کد بالا، نام 5 ورودی برای Adapter را متوجه می شویم و بنابراین در کدها باید شیوه تعریف و مقداردهی آنها را بررسی کنیم.
تعریف اولیه آنها به صورت زیر است :
} else { Toast.makeText(getApplicationContext(), "هیچ رکوردی موجود نیست", Toast.LENGTH_SHORT).show(); }
در اینجا و با توجه به تعریف اولیه آرایه ها (Array)، مشکل مشخص می شود. شما طول اولیه برای آرایه ها (Array) مشخص نکرده اید و بعد قصد دارید که به ترتیب، عنصرهای شماره 0 و 1 و 2 و 3 و ... از آرایه ها (Array) را مقداردهی کنید :
در صورتی که این روش، باعث ایجاد خطا می شود (برای کدنویسی استاندارد در مورد آرایه ها (Array)، کلید شماره 2877 را بخوانید).
برای اینکه ایجاد خطا را عملا خودتان ببینید، یک پروژه اندروید ساده (جدا از این پروژه) بسازید و کد زیر را در آن اجرا کنید (مشابه کدی که اکنون نوشته اید) :
اکنون که دلیل ایجاد خطا را متوجه شدید، دو راه دارید :
1- به شکلی کدها را تغییر دهید که بتوانید تعریف آرایه ها (Array) را با یک طول اولیه (برابر تعداد ردیف برگردانده شده از جدول موجود در پایگاه داده) قرار بدهید.
2- از لیست آرایه ای (ArrayList) استفاده کنید (دسته کلید شماره 123) که نیازی به تعریف طول اولیه برای آن نیست و با استفاده از روش add (کلید شماره 315) می توان عنصرهای جدید به آن اضافه نمود.
دقت شود که اگر از روش شماره 2 استفاده کنید، باید نوع ورودی های کلاس CustomList (همان Adapter) را هم تغییر بدهید (تبدیل از Array به ArrayList) و چون شیوه استفاده از این دو هم متفاوت است، احتمالا باید بخش هایی از کدها را تصحیح کنید (همان نوع ورودی ها را که عوض کنید، پیام های خطا به شما نشان می دهند که چه مواردی باید تغییر داده شوند).
این نکاتی که ذکر شد، مربوط به خطا بود، اما همچنین گفتید که تنها آخرین ردیف از جدول نمایش داده می شود (البته نگفتید که تنها یک item نمایش داده می شود یا تعدادی item که همگی برابر ردیف آخر از جدول هستند، ولی به هر حال، حالت دوم را هم بررسی می کنم).
بنده در این زمینه، مورد دیگری که مهم بود را هم چک کردم (البته در حالتی این مورد مهم است که تعدادی item داشته باشیم، ولی اطلاعات آنها جابجا یا تکراری باشد)، که همان وابسته بودن نمایش اطلاعات هر item از ListView به متغیر position می باشد. برای این مورد، باید در کدهای Adapter ، در روش getView ببینیم که item های Listview چگونه مقداردهی می شوند. کدهای آن به صورت زیر است :
مشاهده می کنید که وابستگی به position به درستی اعمال شده است.
بنابراین چنانچه بعد از برطرف کردن آن خطای خاص که ذکر شد، باز هم با برگردانده شدن تنها ردیف آخر از جدول روبرو شدید، توصیه می شود کدهای کار با پایگاه داده و query را بررسی نمایید.
همچنین از نمایش پیام هایی در LogCat برای بررسی اطلاعات در هر مرحله از کدها استفاده کنید.
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
(۱۳۹۵/۰۵/۰۷, ۱۱:۳۷ ب.ظ)admin نوشته: من نگاهی به کدها انداختم.
می دانم بخش های مختلف کدها را می دانید، اما بنده به خاطر سایر کاربران، به صورت کامل توضیح می دهم.
در کلاس CustomList که در واقع Adapter مربوط به ListView است (از گسترش ArrayAdapter ساخته شده) و item های (ردیف های) ListView را می سازد، ورودی های آن به صورت زیر تعریف شده اند (5 ورودی) :
مشاهده می کنید که تمامی ورودی ها، آرایه (Array) می باشند (دسته کلید شماره 330).
اکنون به سراغ کدهای Activity با نام Search می رویم.
با کد زیر، به درستی Adapter را برای ListView تعیین کرده ایم :
کد پیاچپی:
CustomList adapter = new CustomList(Search.this,lbl0,lbl1,lbl2,lbl3,img); listView.setAdapter(adapter);
از کد بالا، نام 5 ورودی برای Adapter را متوجه می شویم و بنابراین در کدها باید شیوه تعریف و مقداردهی آنها را بررسی کنیم.
تعریف اولیه آنها به صورت زیر است :
} else { Toast.makeText(getApplicationContext(), "هیچ رکوردی موجود نیست", Toast.LENGTH_SHORT).show(); }
در اینجا و با توجه به تعریف اولیه آرایه ها (Array)، مشکل مشخص می شود. شما طول اولیه برای آرایه ها (Array) مشخص نکرده اید و بعد قصد دارید که به ترتیب، عنصرهای شماره 0 و 1 و 2 و 3 و ... از آرایه ها (Array) را مقداردهی کنید :
در صورتی که این روش، باعث ایجاد خطا می شود (برای کدنویسی استاندارد در مورد آرایه ها (Array)، کلید شماره 2877 را بخوانید).
برای اینکه ایجاد خطا را عملا خودتان ببینید، یک پروژه اندروید ساده (جدا از این پروژه) بسازید و کد زیر را در آن اجرا کنید (مشابه کدی که اکنون نوشته اید) :
اکنون که دلیل ایجاد خطا را متوجه شدید، دو راه دارید :
1- به شکلی کدها را تغییر دهید که بتوانید تعریف آرایه ها (Array) را با یک طول اولیه (برابر تعداد ردیف برگردانده شده از جدول موجود در پایگاه داده) قرار بدهید.
2- از لیست آرایه ای (ArrayList) استفاده کنید (دسته کلید شماره 123) که نیازی به تعریف طول اولیه برای آن نیست و با استفاده از روش add (کلید شماره 315) می توان عنصرهای جدید به آن اضافه نمود.
دقت شود که اگر از روش شماره 2 استفاده کنید، باید نوع ورودی های کلاس CustomList (همان Adapter) را هم تغییر بدهید (تبدیل از Array به ArrayList) و چون شیوه استفاده از این دو هم متفاوت است، احتمالا باید بخش هایی از کدها را تصحیح کنید (همان نوع ورودی ها را که عوض کنید، پیام های خطا به شما نشان می دهند که چه مواردی باید تغییر داده شوند).
این نکاتی که ذکر شد، مربوط به خطا بود، اما همچنین گفتید که تنها آخرین ردیف از جدول نمایش داده می شود (البته نگفتید که تنها یک item نمایش داده می شود یا تعدادی item که همگی برابر ردیف آخر از جدول هستند، ولی به هر حال، حالت دوم را هم بررسی می کنم).
بنده در این زمینه، مورد دیگری که مهم بود را هم چک کردم (البته در حالتی این مورد مهم است که تعدادی item داشته باشیم، ولی اطلاعات آنها جابجا یا تکراری باشد)، که همان وابسته بودن نمایش اطلاعات هر item از ListView به متغیر position می باشد. برای این مورد، باید در کدهای Adapter ، در روش getView ببینیم که item های Listview چگونه مقداردهی می شوند. کدهای آن به صورت زیر است :
مشاهده می کنید که وابستگی به position به درستی اعمال شده است.
بنابراین چنانچه بعد از برطرف کردن آن خطای خاص که ذکر شد، باز هم با برگردانده شدن تنها ردیف آخر از جدول روبرو شدید، توصیه می شود کدهای کار با پایگاه داده و query را بررسی نمایید.
همچنین از نمایش پیام هایی در LogCat برای بررسی اطلاعات در هر مرحله از کدها استفاده کنید.
آقا واقعا ممنونم . بهترین و سریع ترین انجمنی که تاحالا دیدم هستین
مدیریت بسیار بالا و عالی دارید .از هر طریقی بتونم و هر کمکی از بنده بربیاد براتون انجام میدم . امیدوارم بتونم به خوبی جبران کنم . خیلی خیلی ممنون