使用Firebase的内存不足错误 [英] Out of Memory error using firebase

查看:180
本文介绍了使用Firebase的内存不足错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从Android上的Firebase数据库读取时,出现了一个OOM错误。我使用的片段的标签,这是一个选项卡的代码..

  public class EventsTab extends Fragment {

ListView listView;
ArrayList< String> titles = new ArrayList< String>();
ArrayList< String> descriptions = new ArrayList< String>();
ArrayList< String> dates = new ArrayList< String>();
ArrayList< String> urls = new ArrayList< String>();
int counter = 0;
float x1,x2;
float y1,y2;

静态ProgressDialog对话框;
static AnimationDrawable frameAnimation;
静态ProgressBar mProgressBar;

@Override
public查看onCreateView(LayoutInflater inflater,ViewGroup容器,
Bundle savedInstanceState){

titles = new ArrayList< String>();
urls = new ArrayList< String>();
dates = new ArrayList< String>();
descriptions = new ArrayList< String>();

查看rootView = inflater.inflate(R.layout.activity_events_tab,container,false);
返回rootView;


$ b @Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);

mProgressBar =(ProgressBar)getActivity()。findViewById(R.id.my_progress);
mProgressBar.setBackgroundResource(R.drawable.ani_icon);

frameAnimation =(AnimationDrawable)mProgressBar.getBackground();

frameAnimation.start();


Firebase ref = new Firebase(https://dazzling-inferno-7627.firebaseio.com/yourLocal/events/);
ref.addValueEventListener(new ValueEventListener(){
$ b $ @Override
public void onDataChange(DataSnapshot snapshot){
System.out.println(There ++ snapshot.getChildrenCount()+blog posts);

$ b(DataSnapshot postSnapshot:snapshot.getChildren()){
Event post = postSnapshot.getValue(Event.class );
titles.add(post.getTitle());
dates.add(post.getDate());
descriptions.add(post.getDescription()); $ b $ (b)b

$ b listView =(ListView)getActivity()。findViewById(R.id.listView3);

CustomList adapter = new CustomList(getActivity(), titles,date);

listView.setAdapter(adapter);

listView.setOnItemClickListener(new OnItemClickListener(){$ b $ public void onItemClick(AdapterView<?> PA租,View v,
int position,long id){

Intent intent = new Intent(getActivity(),ShowEvent.class);
intent.putExtra(title,titles.get(position));
intent.putExtra(date,dates.get(position));
intent.putExtra(description,descriptions.get(position));
startActivity(intent);

}
});
frameAnimation.stop();
mProgressBar.setVisibility(View.INVISIBLE);
}
@Override
public void onCancelled(FirebaseError firebaseError){
System.out.println(The read failed:+ firebaseError.getMessage());
}
});


$ b}

}



这是错误...

  10-27 11:46: 36.444:E / AndroidRuntime(11090):致命例外:主
10-27 11:46:36.444:E / AndroidRuntime(11090):java.lang.OutOfMemoryError
10-27 11:46:36.444 :E / AndroidRuntime(11090):at java.lang.AbstractStringBuilder。< init>(AbstractStringBuilder.java:82)
10-27 11:46:36.444:E / AndroidRuntime(11090):at java.lang (StringBuilder.java:67)
10-27 11:46:36.444:E / AndroidRuntime(11090):at com.shaded.fasterxml.jackson.core.util.TextBuffer.contentsAsString (TextBuffer.java:350)
10-27 11:46:36.444:E / AndroidRuntime(11090):at com.shaded.fasterxml.jackson.core.json.ReaderBasedJsonParser.getValueAsString(ReaderBasedJsonParser.java:223)
10-27 11:46:36.444:E / AndroidRuntime(11090):at com.shaded.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:29)
10 - 27 11:46:36.444:E / AndroidRuntime(11090):at com.shaded.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)​​
10-27 11:46: E / AndroidRuntime(11090):at com.shaded.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:464)
10-27 11:46:36.444:E / AndroidRuntime(11090) ):at com.shaded.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:98)
10-27 11:46:36.444:E / AndroidRuntime(11090):at com。 shaded.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:295)
10-27 11:46:36.444:E / AndroidRuntime(11090):at com.shaded.fasterxml.jackson.databind .deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
10-27 11:46:36.444:E / AndroidRuntime(11090):at com.shaded.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper。 java:2888)
10-27 11:46:36.444:E / AndroidRuntime(11090):在com.shaded.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034)
10-27 11:46:36.444:E / AndroidRuntime(11090):at com.firebase.client.DataSnapshot。 getValue(DataSnapshot.java:181)
10-27 11:46:36.444:E / AndroidRuntime(11090):at com.brianmccabe.yournews.EventsTab $ Test $ 1.onDataChange(EventsTab.java:107)
10-27 11:46:36.444:E / AndroidRuntime(11090):at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45)
10-27 11:46:36.444: E / AndroidRuntime(11090):在com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)
10-27 11:46:36.444:E / AndroidRuntime(11090):at com .firebase.client.core.view.EventRaiser $ 1.run(EventRaiser.java:38)
10-27 11:46:36.444:E / AndroidRuntime(11090):at android.os.Handler.handleCallback(Handler .java:615)
10-27 11:46:36.444:E / AndroidRuntime(11090):at android.os.Handler.dispatchMessage(Handler.java:92)
10-27 11:46 :36.444:E / AndroidRuntime(11090):在android.os.Looper.loop(Looper.java:137)
10-27 11:46:36.444:E / AndroidRuntime(11090):在android.app.ActivityThread.main(ActivityThread.java:4867)
10-27 11:46:36.444:E / AndroidRuntime(11090):在java.lang.reflect.Method.invokeNative(本地方法)
10-27 11:46:36.444:E / AndroidRuntime (11090):at java.lang.reflect.Method.invoke(Method.java:511)
10-27 11:46:36.444:E / AndroidRuntime(11090):at com.android.internal.os。 ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1007)
10-27 11:46:36.444:E / AndroidRuntime(11090):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774 )
10-27 11:46:36.444:E / AndroidRuntime(11090):at dalvik.system.NativeStart.main(Native Method)


解决方案

您正在从Firebase下载比适合内存更多的数据。尝试分割数据,使用查询,并减少了读取操作的范围。


I am getting an oom error when reading from firebase database on android. I'm using fragments for tabs, this is the code for one of the tabs..

public class EventsTab extends Fragment {

ListView listView;
ArrayList<String> titles = new ArrayList<String>();
ArrayList<String> descriptions = new ArrayList<String>();
ArrayList<String> dates = new ArrayList<String>();
ArrayList<String> urls = new ArrayList<String>();
int counter = 0;
float x1,x2;
float y1, y2;

static ProgressDialog dialog;
static AnimationDrawable frameAnimation;
static ProgressBar mProgressBar;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    titles = new ArrayList<String>();
    urls = new ArrayList<String>();
    dates = new ArrayList<String>();
    descriptions = new ArrayList<String>();

    View rootView = inflater.inflate(R.layout.activity_events_tab, container, false);
    return rootView;

}

@Override 
public void onActivityCreated(Bundle savedInstanceState) {  
    super.onActivityCreated(savedInstanceState); 

        mProgressBar = (ProgressBar) getActivity().findViewById(R.id.my_progress);
        mProgressBar.setBackgroundResource(R.drawable.ani_icon);

        frameAnimation = (AnimationDrawable) mProgressBar.getBackground();

        frameAnimation.start();


    Firebase ref = new Firebase("https://dazzling-inferno-7627.firebaseio.com/yourLocal/events/");
    ref.addValueEventListener(new ValueEventListener() {

        @Override
          public void onDataChange(DataSnapshot snapshot) {
            System.out.println("There are " + snapshot.getChildrenCount() + " blog posts");


            for (DataSnapshot postSnapshot: snapshot.getChildren()) {
                Event post = postSnapshot.getValue(Event.class);
                titles.add(post.getTitle());
                dates.add(post.getDate());
                descriptions.add(post.getDescription());

              }

                listView = (ListView) getActivity().findViewById(R.id.listView3);

               CustomList adapter = new  CustomList(getActivity(), titles, dates);

                listView.setAdapter(adapter);

                listView.setOnItemClickListener(new OnItemClickListener() {
                    public void onItemClick(AdapterView<?> parent, View v,
                        int position, long id) {

                        Intent intent = new Intent(getActivity(), ShowEvent.class);
                        intent.putExtra("title", titles.get(position));
                        intent.putExtra("date", dates.get(position));
                        intent.putExtra("description", descriptions.get(position));
                        startActivity(intent);  

                    }
                });
                frameAnimation.stop();
                mProgressBar.setVisibility(View.INVISIBLE);
          }
          @Override
          public void onCancelled(FirebaseError firebaseError) {
              System.out.println("The read failed: " + firebaseError.getMessage());
          }
      });



}

}

This is the Error...

10-27 11:46:36.444: E/AndroidRuntime(11090): FATAL EXCEPTION: main
10-27 11:46:36.444: E/AndroidRuntime(11090): java.lang.OutOfMemoryError
10-27 11:46:36.444: E/AndroidRuntime(11090):    at java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:82)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at java.lang.StringBuilder.<init>(StringBuilder.java:67)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.shaded.fasterxml.jackson.core.util.TextBuffer.contentsAsString(TextBuffer.java:350)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.shaded.fasterxml.jackson.core.json.ReaderBasedJsonParser.getValueAsString(ReaderBasedJsonParser.java:223)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.shaded.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:29)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.shaded.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.shaded.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:464)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.shaded.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:98)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.shaded.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:295)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.shaded.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.shaded.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.shaded.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:181)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.brianmccabe.yournews.EventsTab$Test$1.onDataChange(EventsTab.java:107)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at android.os.Handler.handleCallback(Handler.java:615)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at android.os.Looper.loop(Looper.java:137)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at android.app.ActivityThread.main(ActivityThread.java:4867)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at java.lang.reflect.Method.invokeNative(Native Method)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at java.lang.reflect.Method.invoke(Method.java:511)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
10-27 11:46:36.444: E/AndroidRuntime(11090):    at dalvik.system.NativeStart.main(Native Method)

解决方案

You are downloading more data from Firebase than will fit in memory. Try splitting up the data, using queries, and reducing the scope of the read operation.

这篇关于使用Firebase的内存不足错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆