2017-07-19 6 views
0

私のアプリは完璧に動作していました。しかし、コピーしたonlicklistnerを追加した後は、リフレッシュをクリックするたびにアプリケーションがクラッシュするようになっています。 ここに私のコードです。Android Firebase:アプリケーションがクラッシュしたときにクリック

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)); 
} 

そして、これは私がコピー用のコードを削除した場合、アプリが完全に実行されている

Android monitor

リフレッシュ

をクリックした後、私は取得していますものです。

答えて

1
int arraysize = storiesary.size(); 

storiesaryがnullの場合、NPEが発生する可能性があります。現在はここで初期化するだけです

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

setStory()が呼び出される前に実行されない可能性があります。

これをonCreateViewで初期化して、nullでないことを確認してください。

+0

問題が解決しました..ありがとうございました –

+0

@DalsukhTapaniyaは答えを受け入れます –

関連する問題