انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ارور هنگام تغییر پشت سر هم فرگمنت (Fragment) (در برنامه نویسی اندروید)

ارور هنگام تغییر پشت سر هم فرگمنت (Fragment) (در برنامه نویسی اندروید)

#1
سلام
من وقتی بین تب ها(هر تب یک لیست ویو داره که از دیتابیس گرفته میشه) چندین بار چپ و راست می کنم این ارور رو میده :

کد پی‌اچ‌پی:
03-30 19:33:33.891E/CursorWindow(12278): CursorWindow::createmmap return errno 12
03
-30 19:33:33.891E/CursorWindow(12278): Could not allocate CursorWindow 'data/data/com.banooyeparsi.srp/databases/charterdb' of size 2097152 due to error -12.
03
-30 19:33:33.925E/AndroidRuntime(12278): FATAL EXCEPTIONmain
03
-30 19:33:33.925E/AndroidRuntime(12278): Processcom.banooyeparsi.srpPID12278
03
-30 19:33:33.925E/AndroidRuntime(12278): android.database.CursorWindowAllocationExceptionCursor window allocation of 2048 kb failed# Open Cursors=733 (# cursors opened by this proc=733)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.database.CursorWindow.<init>;(CursorWindow.  java:104)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.database.AbstractWindowedCursor.clearOrCre  ateWindow(AbstractWindowedCursor.java:221)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.database.sqlite.SQLiteCursor.fillWindow(SQ  LiteCursor.java:154)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.database.sqlite.SQLiteCursor.getCount(SQLi  teCursor.java:148)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.database.AbstractCursor.moveToPosition(Abs  tractCursor.java:197)
03-30 19:33:33.925E/AndroidRuntime(12278):     at com.banooyeparsi.srp.adapter.database.nam_name(dat  abase.java:108)
03-30 19:33:33.925E/AndroidRuntime(12278):     at com.banooyeparsi.srp.KharejiAdapter.getView(Kharej  iAdapter.java:80)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.AbsListView.obtainView(AbsListView.  java:2338)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.ListView.makeAndAddView(ListView.ja  va:1812)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.ListView.fillDown(ListView.java:698  )
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.ListView.fillFromTop(ListView.java:  759)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.ListView.layoutChildren(ListView.ja  va:1631)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.AbsListView.onLayout(AbsListView.ja  va:2149)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.View.layout(View.java:15125)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewGroup.layout(ViewGroup.java:4867)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.LinearLayout.setChildFrame(LinearLa  yout.java:1888)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.LinearLayout.layoutVertical(LinearL  ayout.java:1742)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.LinearLayout.onLayout(LinearLayout.  java:1651)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.View.layout(View.java:15125)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewGroup.layout(ViewGroup.java:4867)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.FrameLayout.layoutChildren(FrameLay  out.java:515)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.FrameLayout.onLayout(FrameLayout.ja  va:450)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.View.layout(View.java:15125)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewGroup.layout(ViewGroup.java:4867)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.support.v4.view.ViewPager.onLayout(ViewPag  er.java:1594)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.View.layout(View.java:15125)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewGroup.layout(ViewGroup.java:4867)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.support.v4.widget.DrawerLayout.onLayout(Dr  awerLayout.java:890)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.View.layout(View.java:15125)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewGroup.layout(ViewGroup.java:4867)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.FrameLayout.layoutChildren(FrameLay  out.java:515)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.FrameLayout.onLayout(FrameLayout.ja  va:450)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.View.layout(View.java:15125)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewGroup.layout(ViewGroup.java:4867)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.support.v7.internal.widget.ActionBarOverla  yLayout.onLayout(ActionBarOverlayLayout.java:502)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.View.layout(View.java:15125)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewGroup.layout(ViewGroup.java:4867)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.FrameLayout.layoutChildren(FrameLay  out.java:515)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.FrameLayout.onLayout(FrameLayout.ja  va:450)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.View.layout(View.java:15125)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewGroup.layout(ViewGroup.java:4867)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.LinearLayout.setChildFrame(LinearLa  yout.java:1888)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.LinearLayout.layoutVertical(LinearL  ayout.java:1742)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.LinearLayout.onLayout(LinearLayout.  java:1651)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.View.layout(View.java:15125)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewGroup.layout(ViewGroup.java:4867)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.FrameLayout.layoutChildren(FrameLay  out.java:515)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.widget.FrameLayout.onLayout(FrameLayout.ja  va:450)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.View.layout(View.java:15125)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewGroup.layout(ViewGroup.java:4867)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewRootImpl.performLayout(ViewRootIm  pl.java:2317)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewRootImpl.performTraversals(ViewRo  otImpl.java:2023)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl  .java:1189)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.ViewRootImpl$TraversalRunnable.run(Vi  ewRootImpl.java:6223)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.Choreographer$CallbackRecord.run(Chor  eographer.java:788)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.Choreographer.doCallbacks(Choreograph  er.java:591)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.Choreographer.doFrame(Choreographer.j  ava:560)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.view.Choreographer$FrameDisplayEventReceiv  er.run(Choreographer.java:774)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.os.Handler.handleCallback(Handler.java:808  )
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.os.Handler.dispatchMessage(Handler.java:10  3)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.os.Looper.loop(Looper.java:193)
03-30 19:33:33.925E/AndroidRuntime(12278):     at android.app.ActivityThread.ma 

البته وقتی به صورت عادی و اروم تب ها رو تغییر میدم اروری ندارم اما وقتی پشت سر هم این کارو می کنم این ارور رو میده
کسی میدونه مشکل از چیه؟
پاسخ

ارور هنگام تغییر پشت سر هم فرگمنت (Fragment) (در برنامه نویسی اندروید)

#2
دوست عزیز اولین نکته اینه که سعی کنید از تب هاست زیاد استفاده نکنید چون بنابر مستندات ارائه شده دیگه استفاده از تب هاست منسوخ شده است..(میتونید استفاده کنید ولی بهتره اینکار انجام ندید)..
درمورده ایرادی که برنامه تون گرفته :این ارور به اصطلاح  باعث out of memory شده ..اینم بخاطر اینه که وقتی شما زود صفحات میبندید و از صفحه ای خارج و وارد میشید ..cursor که برای دیتابیس تون انتخاب کردید فرصتی برای بسته شدن نداره...پس کافیه cursor ببندید..از راههای زیادی میشه استفاده کرد مثلا از Try

کد پی‌اچ‌پی:
try {
    while (
cursor.moveToNext()) {
        
//دستورات
    
}
} finally {
    
cursor.close();


یا میتونید داخل متد  Onpause() کرسر رو ببندید..با دستور زیر

کد پی‌اچ‌پی:
cursor.close(); 

به احتمال زیاد مشکل حل میشه.
پاسخ
 سپاس شده توسط admin

ارور هنگام تغییر پشت سر هم فرگمنت (Fragment) (در برنامه نویسی اندروید)

#3
بهروز جان من کد های دیتابی و cursor ها رو در فایلی به اسم database ذخیره کردم و تو بقیه اکتیویتی ها ازش استفاده می کنم ، با فرمت کلی زیر

db.open
کد ها
db.close

این هم یک نمونه کد هایی که استفاده کردم :

کد پی‌اچ‌پی:
public class Toor_dakheli extends ListFragment implements OnItemClickListener {
    
    private 
database db;
    private 
String[] Name;
    private 
String[] Price;
    private 
String[] Tarikh;
    private 
String[] Hotel;
    private 
String[] Hstars;
    private 
String[] Image;
    
DakheliAdapter adapter;
    private List<
RowItemrowItems;
    
    
    @
Override
    
public View onCreateView(LayoutInflater inflaterViewGroup container,
            
Bundle savedInstanceState) {
        
View view inflater.inflate(R.layout.toor_dakhelicontainerfalse);
         
        return 
view;
    }


    @
Override
    
public void onActivityCreated(Bundle savedInstanceState) {
        
db = new database(getActivity());
        
db.open();
        
        
super.onActivityCreated(savedInstanceState);      
        
        
rowItems = new ArrayList<RowItem>();
        
int save db.sh_categ("charterdb""dakheli");
        
Name = new String [save];
        
Price = new String [save];
        
Hotel = new String [save];
        
Tarikh = new String [save];
        
Hstars = new String [save];
        
Image = new String [save];
        
        for (
int i 0<savei++) {
            
Name[i]= db.nam_name("charterdb""dakheli"i2);
            
RowItem items = new RowItem(Name[i], Price[i], Tarikh[i], Hotel[i], Hstars[i], Image[i]);
            
rowItems.add(items);
            }
        


        
adapter = new DakheliAdapter(getActivity(), rowItems);
        
setListAdapter(adapter);
        
getListView().setOnItemClickListener(this);
        
db.close();
    }
    @
Override
    
public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        Intent intent = new Intent(getActivity(), Etelaat.class);
        intent.putExtra("name", Name[position]);
        intent.putExtra("category", "dakheli");
        startActivity(intent);
        
    }


حالا اینکه گفتید cursor رو ببندم منظورتون تو اون فایل دیتابیسم هست یا در همین اکتیویتی؟
مثلا همین اکتیویتی که گذاشتم رو بخوایم به روش شما بنویسیم چجوری میشه کد هاش اگه میشه برام بزارید اصلاح شده اش رو ممنون میشم

ضمن اینکه من از تب هاست استفاده نمی کنم از اکشنبار تب استفاده می کنم و مثل خود گوگل پلی درست کردم منو رو
پاسخ

ارور هنگام تغییر پشت سر هم فرگمنت (Fragment) (در برنامه نویسی اندروید)

#4
نمونه از کد های فایل دیتابیس :

کد پی‌اچ‌پی:
public String nam_name(String table,String categint rowint field){
        
Cursor Cursor mydb.rawQuery("SELECT * FROM "+table+" where category='"+categ+"'"null);
        
Cursor.moveToPosition(row);
        
String s Cursor.getString(field);
        return 
s;
    } 
پاسخ

ارور هنگام تغییر پشت سر هم فرگمنت (Fragment) (در برنامه نویسی اندروید)

#5
(۱۳۹۴/۰۱/۱۱, ۱۰:۳۴ ق.ظ)'parniaznet' نوشته: نمونه از کد های فایل دیتابیس :

کد پی‌اچ‌پی:
public String nam_name(String table,String categint rowint field){
        
Cursor Cursor mydb.rawQuery("SELECT * FROM "+table+" where category='"+categ+"'"null);
        
Cursor.moveToPosition(row);
        
String s Cursor.getString(field);
        return 
s;
    } 
 

کافیه  در این متد بعد از اینکه رشته رو داخل s ذخیره کردید..اشاره گر ببندید..

کد پی‌اچ‌پی:
Cursor.close(); 
پاسخ
 سپاس شده توسط parniaznet ، admin ، شماره مجازی امارات


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان