2017-05-25 111 views
-1

我已经创建了Android聊天应用程序,但是当我想打开聊天来发送消息时,出现错误应用程序已停止工作。 错误可能是由于聊天中消息太多造成的! 如何解决这个问题???Android聊天应用程序消息问题

public class Chat extends AppCompatActivity 
{ 
    LinearLayout layout; 
    RelativeLayout layout_2; 
    ImageView sendButton; 
    EditText messageArea; 
    ScrollView scrollView; 
    Firebase reference1, reference2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_chat); 

     layout = (LinearLayout) findViewById(R.id.layout1); 
     layout_2 = (RelativeLayout)findViewById(R.id.layout2); 
     sendButton = (ImageView)findViewById(R.id.sendButton); 
     messageArea = (EditText)findViewById(R.id.messageArea); 
     scrollView = (ScrollView)findViewById(R.id.scrollView); 

     Firebase.setAndroidContext(this); 

     reference1 = new Firebase("https://zipa1x.firebaseio.com/messages/" + UserDetails.username + "_" + UserDetails.chatWith); 
     reference2 = new Firebase("https://zipa1x.firebaseio.com/messages/" + UserDetails.chatWith + "_" + UserDetails.username); 

     sendButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       String messageText = messageArea.getText().toString(); 

       if(!messageText.equals("")){ 
        Map<String, String> map = new HashMap<String, String>(); 
        map.put("message", messageText); 
        map.put("user", UserDetails.username); 
        reference1.push().setValue(map); 
        reference2.push().setValue(map); 
        messageArea.setText(""); 
       } 
      } 
     }); 

     reference1.addChildEventListener(new ChildEventListener() 
     { 
      @Override 
      public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
       Map map = dataSnapshot.getValue(Map.class); 
       String message = map.get("message").toString(); 
       String userName = map.get("user").toString(); 

       if(userName.equals(UserDetails.username)){ 
        addMessageBox("You:-\n" + message, 1); 

        //sendNotification(message,userName); 
       } 
       else{ 
        addMessageBox(UserDetails.chatWith + ":-\n" + message, 2); 

        //sendNotification(message,userName); 
       } 
      } 

      @Override 
      public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

      } 

      @Override 
      public void onChildRemoved(DataSnapshot dataSnapshot) { 

      } 

      @Override 
      public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

      } 

      @Override 
      public void onCancelled(FirebaseError firebaseError) { 

      } 
     }); 

     scrollView.post(new Runnable() { 
      @Override 
      public void run() { 
       scrollView.fullScroll(View.FOCUS_DOWN); 
      } 
     }); 
    } 

    public void addMessageBox(String message, int type){ 
     TextView textView = new TextView(Chat.this); 
     textView.setText(message); 

     LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     lp2.weight = 1.0f; 

     if(type == 1) { 
      lp2.gravity = Gravity.LEFT; 
      textView.setBackgroundResource(R.drawable.bubble_in); 
     } 
     else{ 
      lp2.gravity = Gravity.RIGHT; 
      textView.setBackgroundResource(R.drawable.bubble_out); 
     } 
     textView.setLayoutParams(lp2); 
     layout.addView(textView); 
     //scrollView.fullScroll(View.FOCUS_DOWN); 

     scrollView.post(new Runnable() { 
      @Override 
      public void run() { 
       scrollView.fullScroll(View.FOCUS_DOWN); 
      } 
     }); 
    } 

    private void sendNotification(String message,String userName) 
    { 
     Intent intent = new Intent(this,Chat.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

     PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT); 

     Uri notificationSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 

     NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this) 
       .setVisibility(Notification.VISIBILITY_PUBLIC) 
       //.setOngoing(true) 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentTitle(userName) 
       .setContentText(message) 
       .setSound(notificationSound) 
       .setContentIntent(pendingIntent); 

     NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     mNotificationManager.notify(0, builder.build()); 
    } 
} 
+0

了解如何使用Logcat调试您的应用程序。错误将出现在您的“Android消息”窗口中,包含行号和错误代码。 – rupps

+0

我修复了我需要的问题(DataSnapshot child:dataSnapshot.getChildren())onChildAdded !!! – pavlestojanovic1906

回答

0

我已经解决了我需要的问题(DataSnapshot child:dataSnapshot.getChildren())onChildAdded !!!