نمایش اطلاعات دیتابیس در TextView

گزارش
سوال

لطفا علت گزارش خود را توضیح دهید.

گزارش لغو

سلام مهندس جعفری عزیز
بنده اطلاعاتی رو با زدن یه کلید از دیتابیس برمیدارم ولی داخل تکست ویو نمایش نمیده…
و برنامه کرش میکنه…
حتی اطلاعات دیتابیس رو Log کردم و نشون داد… ولی داخل TextView نمایش نمیده…

کد برنامه:

<pre class=””>
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = edtName.getText().toString();
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
int id = cursor.getInt(0);
name = cursor.getString(1);
Log.i(\”LOG\”,name);
data.add(name);

if (name == name) {
Log.i(\”LOG\”, name);
dataUni.add(name);
txtNameUni.setText(name);
cursor.close();
myDatabase.close();
}
}
}
});
</pre>

برای چک کردن رشته دریافتی
وقتی ازین استفاده میکنم: if (name == name)
خطایی نمیده…
و زمانیکه از if (name.equals(name)) استفاده میکنم

برنامه کرش میکنه و خطا میده:
Attempt to invoke virtual method \’boolean java.lang.String.equals(java.lang.Object)\’ on a null object reference

ممنون از راهنماییاتون

حل شده 1
اندروید - android 13 پاسخ 784 بازدید 0

درباره نویسنده

عاشق برنامه نویسی و جویای موفقیت هستم. یک روز هم انرژیم رو از دست نمیدم و عاشق کم خوابیم و وقتم رو به بطالت نمیگذرونم... روی تک تک ساعات زندگیم برنامه دارم و دنبال رشد فکری، شخصیتی، علمی و... هستم. از کار کردن در زمینه کدنویسی و همچنین نتورک لذت میبرم... خواهان ارتباط با افراد مثبت اندیش و پرانرژیم...

پاسخ ها ( ۱۳ )

  1. محمد حسین جعفری پور
    1
    ۱۴, خرداد , ۱۳۹۷ در ۳:۳۴ ب.ظ

    لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

    گزارش لغو

    سلام و درود به احتمال زیاد
    شما TextView رو find نکردید یا id که داره اشتباه است اگر این بخش را بررسی کرد و مشکل از اینجا نبودش کد زیر را استفاده کنید.

    موفق باشید.

    بهترین پاسخ
  2. ehsan.k
    0
    ۱۵, خرداد , ۱۳۹۷ در ۹:۴۹ ب.ظ

    لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

    گزارش لغو

    سلام جناب مهندس
    بنده دستور رو نوشتم تو حالتی که از if (name == name) استفاده میکنم اصلا وارد حلقه نمیشه ولی زمانی که از دستور if(name.matches(name) و یا از if(name.equals(name) استقاده میکنم وارد حلقه میشه و خطای زیر رو میده:
    java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteQuery: SELECT * FROM university

    ولی با وجود این خطا و اینکه برنامه کرش میکنه ولی تمامی اطلاعاتی که از دیتابیس رو میخوام رو برام Log میکنه…
    علتش چی میتونه باشه؟

    راستی جناب مهندس برای بررسی تساوی دو String از دستور equals مگه استفاده نمیشه؟
    چون == برای String جواب نمیده توی جاوا…

    • محمد حسین جعفری پور
      1
      ۱۶, خرداد , ۱۳۹۷ در ۳:۳۷ ب.ظ

      لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

      گزارش لغو

      سلام و درود
      از دستور equals باید استفاده بشه operator == اشتباه است. نکته هایی که میشه اشاره کرد بعد از کار با دیتابیس بهتر است cursor و db بسته یا close شوند کد زیر یک نمونه از استفاده از دیتابیس است شاید دیتابیس شما خالی باشد که خطا میدهد یعنی insert به درستی انجام نشده باشد.

      موفق باشید.

  3. ehsan.k
    0
    ۱۷, خرداد , ۱۳۹۷ در ۵:۱۹ ب.ظ

    لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

    گزارش لغو

    مهندس من این کارو کردم بازم فایده ای نداشت..
    کد شما رو تو کد زیر تلفیق کردم ولی بازم برنامه کرش میکنه …
    ولی دقیق همون اسمی رو که ازش میخوام برام فیلتر میکنه و با جزئیاتش تو Log نشون میده…

    کد:
    myDatabase = new MyDatabase(G.context);
    sqLiteDatabase = myDatabase.getReadableDatabase();
    cursor = sqLiteDatabase.rawQuery(“SELECT * FROM table “, null);
    if (cursor != null && !cursor.isClosed()) {
    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
    int id = cursor.getInt(0);
    name = cursor.getString(1);
    details = cursor.getString(2);
    dataUni.add(name);

    if (name.equals(nameUni)) {
    txtNameUni.setText(details + “”);
    cursor.close();
    myDatabase.close();
    }
    }
    }

    کد خطا:
    attempt to re-open an already-closed object: SQLiteQuery: SELECT * FROM table

    به این خط از برنامه گیر میده:
    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext())

    علتش چی میتونه باشه؟

    • محمد حسین جعفری پور
      1
      ۱۸, خرداد , ۱۳۹۷ در ۶:۵۶ ب.ظ

      لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

      گزارش لغو

      شما در اون بخش فقط یک movetoNext بگذارید کافی است و در اینکه شما cursor را حتما یه جای دیگه دارید استفاده می کنید باید اگر قبلا db یا cursor باز می شود بسته شود یعنی همون کدی که در پایین همین کد اصلی دارید باید هرجای که از دیتابیس و cursor استفاده می شود قرار گیرد.

  4. ehsan.k
    0
    ۱۹, خرداد , ۱۳۹۷ در ۲:۱۰ ب.ظ

    لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

    گزارش لغو

    بسیار ممنون از راهنماییاتون
    فقط میخواستم بدونم چون دیتابیسم آماده هست چرا وقتی در یکی از سطرهای دیتابیسم تغییرات اعمال میکنم توی نتیجه برنامه دقیقا همون اطلاعات قبلی دیتابیس ثبت میشه و خبری از اطلاعات جدید نیس درصورتیکه اطلاعات به روز شدن و فایل db دوباره به برنامه ادد شده…

    • محمد حسین جعفری پور
      1
      ۱۹, خرداد , ۱۳۹۷ در ۶:۴۱ ب.ظ

      لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

      گزارش لغو

      شما باید اگر دز recyclerView هستید از متد notifydatasetCahnged استفاده کنید تا لیست بروز شود در غیر اینصورت یک متد در مثلا MainACtivity درست کنید که شامل یک TextView هست سپس در اکتیویتی دیگهع که هستید آن متد را صدا بزنید تا در بازگشت آن TexTview اپدیت شود یا در متد Onstart همان اکتیویتی این کار رو انجام بدید.

      موفق باشید.

  5. ehsan.k
    0
    ۱۹, خرداد , ۱۳۹۷ در ۲:۱۶ ب.ظ

    لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

    گزارش لغو

    بنده سه چهار بار جدول اضافه کردم به دیتابیسم و دفعه آخر دیگه جدول به دیتابیسم اضافه نمیکنم(این کارو در DB Browser انجام میدم)
    علت چی میتونه باشه؟
    برای هر دیتابیس محدودیت داریم؟؟؟
    یا موضوع چیز دیگس…

    • محمد حسین جعفری پور
      1
      ۱۹, خرداد , ۱۳۹۷ در ۶:۳۹ ب.ظ

      لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

      گزارش لغو

      شما تا ۱۰۰ تا جدول بدون محدودیت می توانید به دیتابیس اضافه کنید شاید چون دارید از طرق نرم افزار table رو میسازید مشکل داشته ولی در آن حالت هم قبلا تست کرده بودم خطایی ندیده بودم.

  6. ehsan.k
    0
    ۲۰, خرداد , ۱۳۹۷ در ۷:۱۸ ق.ظ

    لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

    گزارش لغو

    اطلاعات داخل جداول رو تغییر میدادم به کرّات…
    علتش نمیتونه این باشه؟
    چون داخل دیتابیسم که نگاه میکنم همه اطلاعات جدید هست ولی برنامه همون اطلاعات قبلی رو نشون میده… با وجود اینکه دیتابیس قدیمی رو پاک و جدید رو اضافه کردم
    علت عملکرد نادرست برنامه برای واکشی اطلاعات جدید میتونه همین تغییرات اطلاعات باشه؟

    • محمد حسین جعفری پور
      1
      ۲۰, خرداد , ۱۳۹۷ در ۱:۳۵ ب.ظ

      لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

      گزارش لغو

      سلام
      شاید دلیل اول همین تغییرات زیاد باشه دلیل دوم ذخیره نشده دیتا باشه اگر از برنامه db browser استفاده می کنید حتما ابتدا svae سپس write change رو بزنید تا دیتا ذخیره بشه سپس از بخش device manager اندروید استودیو اون رو آپلود کنید دستی replace نکنید.
      اگر ذیتا به درستی ذخیره شده باشه به درستی واکشی میشه شاید مشکل از همون ذخیره باشه باز دیتا رو یکبار نگاه بکنید .

  7. ehsan.k
    0
    ۲۴, خرداد , ۱۳۹۷ در ۲:۴۶ ب.ظ

    لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

    گزارش لغو

    سپاس فراوان مهندس

  8. علی
    0
    ۳۰, فروردین , ۱۳۹۸ در ۴:۱۲ ق.ظ

    لطفا علت گزارش خود را در رابطه با این پاسخ بنویسید.

    گزارش لغو

    سلام
    من یه برنامه ای دارم که باید اطلاعات رو از دیتابیس برداره و داخل edit text نمایش بده
    میشه راهنمایی کنید

ارسال نظر