رفتن به مطلب
  • 0

نشان دادن اطلاعات در دیتابیس تو یه صفحه


mr.ehsan8001

سوال

سلام من طبق آموزش اقای شاهدی دیتا بیس ساختم و توی یه لیست ویو قرار دادم و میخام وقتی کاربر روی یه گزینه کلیک کرد وارد یه صفحه بشه که مطالب مربوط به اونو نشون بده.

خودم یسری کار کردم که دو تا مشکل داشت:

توی صفحه حدید متن ها داخل [ ] بودن  و همه اطلاعات دیتابیستو نشون میداد ،نه اونی که برای اون گزینست.

اینم کداشه:

کلاس DetailActivity برای نشون دادن اطلاعات روی یه لیوت:

public class DetailActivity extends AppCompatActivity {
    protected String courseTitle;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);
        FontsOverride.setDefaultFont(this, "MONOSPACE", "iransans.ttf");

        courseTitle = getIntent().getStringExtra(MainActivity.COURSE_TITLE);
        TextView tvTitle = (TextView) findViewById(R.id.tvTitle);
        tvTitle.setText(courseTitle);

        String courseDesc = getIntent().getStringExtra(MainActivity.COURSE_DESC);
        TextView tvDesc = (TextView) findViewById(R.id.tvDescription);
        tvDesc.setText(courseDesc);
    }
}

اینم کد MainActivity:

    public static final String COURSE_TITLE = "coursetitle";
    public static final String COURSE_DESC = "courseDesc";
    public static final int DETAIL_REQUEST_CODE = 1001;    
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

     final MyDatabase db = new MyDatabase(this);
ListView lv1 = (ListView) findViewById(R.id.lv1);
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,db.getListOfRow("SELECT * FROM data","title"));
lv1.setAdapter(adapter);
        lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                desplayDetail(db);
            }
        });

    private void desplayDetail(MyDatabase db) {
        Intent intent = new Intent(this, DetailActivity.class);
        intent.putExtra(COURSE_TITLE, String.valueOf(db.getListOfRow("SELECT * FROM data","title")));
        intent.putExtra(COURSE_DESC, String.valueOf(db.getListOfRow("SELECT * FROM data","content")));
        startActivityForResult(intent, DETAIL_REQUEST_CODE);
    }

لطفا کد های مربوط به سرچ کردن داخل لیست ویو و اضافه کردن یه آیتم به علاقه مندی ها و اینکه چطوری دیتابیس رو رمزگذاری کنیم که نتونن سواستفاده رو هم بگید.فقط من مبتدی هستم زیر دیپلمی توضیح بدید مرسی. :give_rose:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ارسال‌های توصیه شده

اینو امتحان کن

public class SearchActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search);
        FontsOverride.setDefaultFont(this, "MONOSPACE", "iransans.ttf");
        MyDatabase db = new MyDatabase(SearchActivity.this);
        final EditText search = (EditText) findViewById(R.id.search);
        search.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String searchT = search.getText().toString();
                ListView lv1 = (ListView) findViewById(R.id.search_list);
                ArrayAdapter adapter = new ArrayAdapter(SearchActivity.this, android.R.layout.simple_list_item_1,db.getListOfRow("SELECT * FROM data where title  LIKE '%" + searchT + "%'","title"));
                lv1.setAdapter(adapter);
                lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        Intent intent=new Intent(SearchActivity.this,DetailActivity.class);
                        intent.putExtra("position",position+1);
                        startActivity(intent);
                    }
                });
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });

    }
}

وقتی میخوای از مقدار ادیت تکست استفاده کتی باید توی addtextchangelistener استفاده کنی

تاهربار که عوض شد بیاد و با مقداری که عوض شده جست و جو کنه

 

دقت دقت دقت  :fekr:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

داداش من کد رو بهت دادم دیگه عوض کردن اسم جدول دیتابیس و ستون دیتابیس و اینا رو باید خودت انجام بدی عزیز من

وقتی کسی کدی بهت میده یکم آنالیزش کن ببین چی میگه چیا داره

من مشخصات دیتابیس شمارو که ندارم

String content = db.getString("select * from table where id='"+position+"'","content");

کد بالارو ببین

اونجا که نوشته table شما اسم جدولتو بنویس

اونجا هم که نوشته content اسم ستون دیتابیستو بنویس

آقا دمت گرم درست شد، برای سرچ کردن توی دیتا بیس نمیدونی باید چیکار کنم؟میدونم باید چه متد هایی به کار ببرم ولی کد هاشون رو نمیدونم دقیقا.میخام فقط تو یه فیلد تایتل ها سرچ بشه.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنون سرچش درست شد!

حالا مشکل بازکردنشون وجود داره!

چون توی متد ان کلیک لیسسنر میاد پوزیشنو میگیره و از تو دیتا بیس بازش میکنه. ولی باید از طریق اسم باشه :fekr:

الان هر چیو که بخام باز کنم اولین موضوع داخل دیتابیس باز میشه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

آقا دمت گرم درست شد، برای سرچ کردن توی دیتا بیس نمیدونی باید چیکار کنم؟میدونم باید چه متد هایی به کار ببرم ولی کد هاشون رو نمیدونم دقیقا.میخام فقط تو یه فیلد تایتل ها سرچ بشه.

برای سرچ کردن توی دیتابیس از کوئری زیر استفاده کن

"SELECT * FROM YOURTABLE WHERE name LIKE '%"+matn+"%'"
لینک ارسال
به اشتراک گذاری در سایت های دیگر

اینجاشو باید توی اداپتر مای دیتابیس یه متد بنویسی

و با استفاده از 

lv.getItemAtPosition(position)

ایدی اون رو از دیتابیس پیدا کنی

از این به بعدش به عهده خودت برادر ...

لینک ارسال
به اشتراک گذاری در سایت های دیگر

اینجاشو باید توی اداپتر مای دیتابیس یه متد بنویسی

و با استفاده از 

lv.getItemAtPosition(position)

ایدی اون رو از دیتابیس پیدا کنی

از این به بعدش به عهده خودت برادر ...

اصلا متوجه چیزی که گفتین نشدم  :sorry:

چه متدی باید توی مای دیتابیس بنویسم؟

چون اولین باره با دیتابیس کار میکنم یکم مشکل دارم توش.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

 

برای سرچ کردن توی دیتابیس از کوئری زیر استفاده کن

"SELECT * FROM YOURTABLE WHERE name LIKE '%"+matn+"%'"

ممنون، باید از متد AddTextChangeListener استفاده کنم دیگه؟

یکم مشکل دارم توش میشه بگید چطوری باید انجام بدمش؟ :pardon:

وقتی هم که بخام کاربر روی نتیجه جستجو کلیک کرد وارد صفحه مربوط به اون بشه باید چیکار کنم؟ :fekr:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

منظورت اینه میخوای هم زمان که تایپ میکنی نمایش نشون داده بشه یا این که تکست رو بگیری و تو یه اکتیویتی مجزا نمایش بدی؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

فهمیدم مشکلو

 db.getListOfRow("SELECT * FROM data WHERE name LIKE '%" + search + "%'")

این متد دو تا ورودی استرینگ میخاد ولی چون یدونه وارد شده ارور میده

دومیو null زدم برنامه فورس استاپ میشه

 

دومی رو باید اسم ستونی که میخوای ازش بخونی رو باید بدی

به این صورت

 db.getListOfRow("SELECT * FROM data WHERE name LIKE '%" + search + "%'","name")

اینجا میگیم همه ی ستون های جدول دیتا رو بگیر به شرطی که name برابر باشه با مقداری که جست و جو میکنیم

از ستون فلان که اینجا فک کنم مدنظرتون ستون name باشه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

دومی رو باید اسم ستونی که میخوای ازش بخونی رو باید بدی

به این صورت

db.getListOfRow("SELECT * FROM data WHERE name LIKE '%" + search + "%'","name")
اینجا میگیم همه ی ستون های جدول دیتا رو بگیر به شرطی که name برابر باشه با مقداری که جست و جو میکنیم

از ستون فلان که اینجا فک کنم مدنظرتون ستون name باشه

اتفاقا این کارو هم کردم ولی بعد از نوشتن چیزی تو ادیت تکست هیچی نشون نمیده.

اسم ستون ها رو درست وارد کردم

باید اسم ادیت تکسی که واسه سرچه رو بعد LIKE بزارم دیگه نه؟(اسم ادیت تکسش سرچم همون search هستش)

لینک ارسال
به اشتراک گذاری در سایت های دیگر

منظورت اینه میخوای هم زمان که تایپ میکنی نمایش نشون داده بشه یا این که تکست رو بگیری و تو یه اکتیویتی مجزا نمایش بدی؟

اکتیویتی جدا هم باشه اشکالی نداره ولی من میخام که ایکون سرچ رو اکشن بار که زده میشه یه ادیت تکست رو خود اکشن بار بیاد بعد وقتی چیزی تایپ شد خودش سرچ کنه تو یه چیزی مثه popUpMenu زیر ادیت تکست نشون بده و با کلیک روی نتیجه سرچ صفحه مربوط به اون بیاد

اگه اکتیویتی جدا باشه مشکلی نیست

لینک ارسال
به اشتراک گذاری در سایت های دیگر

لطفا جواب بدید خیلی لازم دارم :(

کل اینترنت رو زیر و رو کردم هیچی گیرم نیومد

لینک ارسال
به اشتراک گذاری در سایت های دیگر

اکتیویتی جدا هم باشه اشکالی نداره ولی من میخام که ایکون سرچ رو اکشن بار که زده میشه یه ادیت تکست رو خود اکشن بار بیاد بعد وقتی چیزی تایپ شد خودش سرچ کنه تو یه چیزی مثه popUpMenu زیر ادیت تکست نشون بده و با کلیک روی نتیجه سرچ صفحه مربوط به اون بیاد

اگه اکتیویتی جدا باشه مشکلی نیست

اکتیویتی جداگونه بزار هم راحتره هم مدیریت و امکانات بهتری در اختیارته

چیز خاصی نداره فقط کوئری که عرض شد خدمتتون رو به جای کوئری هایی که قبلا میزدین استفاده کنید آداپتر و لیستها همونه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

اکتیویتی جداگونه بزار هم راحتره هم مدیریت و امکانات بهتری در اختیارته

چیز خاصی نداره فقط کوئری که عرض شد خدمتتون رو به جای کوئری هایی که قبلا میزدین استفاده کنید آداپتر و لیستها همونه

یه اکتیویتی جدید ساختم و داخلش این کد ها رو قرار دادم ولی مثل اینکه یجا اشتباهه، زیر کوئری ای که دادید خط قرمز میکشه.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search);
        FontsOverride.setDefaultFont(this, "MONOSPACE", "BYekan+.ttf");
        final MyDatabase db = new MyDatabase(this);
        final EditText search = (EditText) findViewById(R.id.search);
        final ListView lv1 = (ListView) findViewById(R.id.search_list);
        search.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                ArrayAdapter adapter = new ArrayAdapter(SearchActivity.this,android.R.layout.simple_list_item_1,
                        db.getListOfRow("SELECT * FROM data WHERE name LIKE '%"+search+"%'"));
                lv1.setAdapter(adapter);
                lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        Intent intent=new Intent(SearchActivity.this,DetailActivity.class);
                        intent.putExtra("position",position+1);
                        startActivity(intent);
                    }
                });
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
    }
لینک ارسال
به اشتراک گذاری در سایت های دیگر

دوست عزیز عرض شد خدمتتون که یا تو اکتیویتی جدید یا هم تو همون اکتیویتی سرچ رو انجام بدین

شما میخواین تو اکتیویتی جدید سزچ کنید دیگه نیازی نیست کدهاتون رو توی onTextChanged بنویسید

کدهای زیر رو ببرید توی onCreate و بقیه متدهای اوراید شده ادیت تکست رو حذف کنید

ArrayAdapter adapter = new ArrayAdapter(SearchActivity.this,android.R.layout.simple_list_item_1,
                        db.getListOfRow("SELECT * FROM data WHERE name LIKE '%"+search+"%'"));
                lv1.setAdapter(adapter);
                lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        Intent intent=new Intent(SearchActivity.this,DetailActivity.class);
                        intent.putExtra("position",position+1);
                        startActivity(intent);
                    } 

addTextChangedListener رو حذف کنید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

دوست عزیز عرض شد خدمتتون که یا تو اکتیویتی جدید یا هم تو همون اکتیویتی سرچ رو انجام بدین

شما میخواین تو اکتیویتی جدید سزچ کنید دیگه نیازی نیست کدهاتون رو توی onTextChanged بنویسید

کدهای زیر رو ببرید توی onCreate و بقیه متدهای اوراید شده ادیت تکست رو حذف کنید

ArrayAdapter adapter = new ArrayAdapter(SearchActivity.this,android.R.layout.simple_list_item_1,
                        db.getListOfRow("SELECT * FROM data WHERE name LIKE '%"+search+"%'"));
                lv1.setAdapter(adapter);
                lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        Intent intent=new Intent(SearchActivity.this,DetailActivity.class);
                        intent.putExtra("position",position+1);
                        startActivity(intent);
                    } 

addTextChangedListener رو حذف کنید

فهمیدم مشکلو

 db.getListOfRow("SELECT * FROM data WHERE name LIKE '%" + search + "%'")

این متد دو تا ورودی استرینگ میخاد ولی چون یدونه وارد شده ارور میده

دومیو null زدم برنامه فورس استاپ میشه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

شما باید توی متد displaydetail که اینتنت هارو تعریف کردین به جای اونا بیاید و position که توی setonitemclicklistener داده بهتون رو بفرستید

البته باید یکی اضافه کنی بهش

مثلا 

Intent intent=new Intent(this,displaydetails.class);
putextra("position",position+1);
startactivity(intent);

تو اکتیویتی مقصد هم باید مقدار اینتنت رو بگیری

Intent intent = getIntent();
Bundle bundle = intent.getExtras();
int position = bundle.getInt("position");

String felan=db.getString("select * from table where id='"+position+"'","esm-field");

edittext.settext(felan)

تا اینجاش از دستم برمیومد 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

یه سوال کوچبک

من الان چنتا table توی دیتابیسم دارم، موقع سرچ بخام از داخل همه سرچ کنه باید کوئری رو به حالت زیر بنویسم؟ 

"SELECT * FROM data + data2 where title  LIKE '%" + searchT + "%'","title"

یا اینجوری؟

"SELECT * FROM data "+" data2 where title  LIKE '%" + searchT + "%'","title"
لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...