2017-07-19 4 views
0

Meine App funktionierte perfekt. Aber nachdem ich onlicklistner auf copy hinzugefügt habe, stürzt meine App immer ab, wenn ich auf refresh klicke. Hier ist mein Code.Android Firebase: Anwendung stürzt ab Klicken Sie auf

public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle) { 
    this.localView = paramLayoutInflater.inflate(R.layout.fragmenthome, paramViewGroup, false); 
    story = (TextView) localView.findViewById(R.id.story_text); 
    rl = (RelativeLayout) localView.findViewById(R.id.rlLayout); 
    linearLayout = (LinearLayout) localView.findViewById(R.id.bottom_bar); 
    imgCopy = (ImageView) localView.findViewById(R.id.copyStory); 
    imgRefresh = (ImageView) localView.findViewById(R.id.refreshStory); 


    databaseReference = FirebaseDatabase.getInstance().getReference().child("stories"); 

    databaseReference.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      storiesary = new ArrayList<String>(); 
      for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) { 
       HashMap map =(HashMap) childSnapshot.getValue(); 
       if(map!=null) { 
        storiesary.add((String) map.get("storytext")); 
       } 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.d(TAG,"check your internet connection and try again"); 
     } 
    }); 


    imgRefresh.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      setStory(); 
     } 
    }); 

    imgCopy.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      String copy = story.getText().toString(); 

      ClipboardManager clipboard = (ClipboardManager) FragmentHome.this.getActivity().getSystemService(FragmentHome.this.getActivity().CLIPBOARD_SERVICE); 
      ClipData clip = ClipData.newPlainText("cpy_quotes", copy); 
      clipboard.setPrimaryClip(clip); 
      Toast.makeText(FragmentHome.this.getActivity(), "Text Copied to clipboard.", 0).show(); 
     } 
    }); 
    return localView; 

} 

public void setStory() 
{ 
    int arraysize = storiesary.size(); 
    final int arrayposition1 = (new Random()).nextInt(arraysize); 
    story.setText(storiesary.get(arrayposition1)); 
} 

Und das ist, was ich erhalte, nachdem ich auf Refresh klicken

Android monitor

Wenn ich den Code für die Kopie entfernen dann app perfekt läuft.

Antwort

1
int arraysize = storiesary.size(); 

Dies kann eine NPE verursachen, wenn null ist. Derzeit ist nur Sie es initialisieren hier

@Override 
public void onDataChange(DataSnapshot dataSnapshot) { 
    storiesary = new ArrayList<String>(); 

, die nicht ausgeführt werden können, bevor setStory() genannt wird.

Sie können auch in onCreateView initialisieren, um sicherzustellen, dass es nicht null ist.

+0

Problem ist gelöst .. danke Mann –

+0

@DalsukhTapaniya die Antwort zu akzeptieren –

Verwandte Themen