групповой чат с использованием FireBase, и любой вид внутри фрагмента не отображается внутри табуляции - PullRequest
0 голосов
/ 23 октября 2018

Я использовал Firebase auth ui и Firebase realtime database с фрагментом внутри tablayout, имеющим фрагменты, и когда я запускаю приложение, оно ничего не показывает во фрагменте после перехода с auth ui


Пожалуйстапроверьте код аутентификации, чтобы либо я правильно настроил аутентификацию firebase и базу данных в реальном времени.Более того, я запутался, как заставить имя пользователя использовать в чате grpoup базу данных в реальном времени

Я искал в Интернете, но не нашел ничего, связанного с этой проблемой


Это мой фрагментв которой я настроил базу данных в реальном времени, чтобы сделать групповой чат

forum_fragment

public class forum_fragment extends Fragment {


private static final int DEFAULT_MSG_LENGTH_LIMIT = 1000;
private ListView mMessageListView;
private MessageAdapter mMessageAdapter;
private EditText mMessageEditText;
private Button mSendButton;
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mMessageDatabaseRefrence;
private ForumAdapter forumAdapter;
private ChildEventListener mChildEventListener;
private FirebaseAuth firebaseAuth;
private FirebaseUser user;
private FirebaseAuth.AuthStateListener authStateListener;

private static String mUsername;

public forum_fragment() {
    // Required empty public constructor
}


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

    View rootView = inflater.inflate(R.layout.forum, container, false);
    mMessageListView = (ListView) rootView.findViewById(R.id.messageListView);

    mMessageEditText = (EditText) rootView.findViewById(R.id.messageEditText);
    mSendButton = (Button) rootView.findViewById(R.id.sendButton);

    List<MessageModel> messageModel = new ArrayList<>();

    mMessageAdapter = new MessageAdapter(getActivity(),R.layout.item_message,messageModel);
    mMessageListView.setAdapter(mMessageAdapter);


    mFirebaseDatabase = FirebaseDatabase.getInstance();
    mMessageDatabaseRefrence = mFirebaseDatabase.getReference().child("messages");

    mMessageEditText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(s.toString().trim().length()>0){
                mSendButton.setEnabled(true);
            }else{
                mSendButton.setEnabled(false);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    mMessageEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(DEFAULT_MSG_LENGTH_LIMIT)});

    mSendButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MessageModel message = new MessageModel(mUsername,mMessageEditText.getText().toString());
            mMessageDatabaseRefrence.push().setValue(message);
            mMessageEditText.setText("");
        }
    });


    if (user!=null) {
        user = firebaseAuth.getCurrentUser();
        OnSignedInitialize(user.getDisplayName());
    }else {
        OnSignedOutInitialized();
    }

    return rootView;
}

public void attachDatabaseListener(){
    if(mChildEventListener==null){
        mChildEventListener = new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                MessageModel messageModel = dataSnapshot.getValue(MessageModel.class);
                mMessageAdapter.add(messageModel);

            }

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

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

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

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        };
        mMessageDatabaseRefrence.addChildEventListener(mChildEventListener);
    }
}

public void detachDatatabaseListener(){
    if(mChildEventListener!=null){
    mMessageDatabaseRefrence.removeEventListener(mChildEventListener);
    mChildEventListener=null;
    }
}

public void OnSignedInitialize(String userName) {
    mUsername = userName;
    attachDatabaseListener();
}
public void OnSignedOutInitialized(){
    mUsername = "anonymous";
    mMessageAdapter.clear();
    detachDatatabaseListener();
}


@Override
public void onPause() {
    super.onPause();
    detachDatatabaseListener();
    mMessageAdapter.clear();
}}

MessageAdapter.java

public MessageAdapter(@NonNull Context context, int resource, @NonNull List<MessageModel> objects) {
    super(context, resource, objects);
}

@NonNull
@Override
public View getView(int position,View convertView,@NonNull ViewGroup parent) {

    if (convertView == null) {
        convertView =((Activity) getContext()).getLayoutInflater().inflate(R.layout.item_message, parent, false);
    }

    MessageModel message = getItem(position);

    TextView messageTextView = (TextView) convertView.findViewById(R.id.messageTextView);
    TextView authorTextView = (TextView) convertView.findViewById(R.id.nameTextView);

    messageTextView.setText(message.getMsgText());
    authorTextView.setText(message.getUserName());

    return convertView;
}}

forum.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Forum.forum_fragment">



<ListView
    android:id="@+id/messageListView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/linearForumLayout"
    android:stackFromBottom="true"
    android:divider="@android:color/transparent"
    android:transcriptMode="alwaysScroll"
    tools:listitem="@layout/item_message"/>

<LinearLayout
    android:id="@+id/linearForumLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:orientation="horizontal">

    <EditText
        android:id="@+id/messageEditText"
        android:layout_width="20dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_weight="1" />

    <Button
        android:id="@+id/sendButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:enabled="false"
        android:text="@string/send_button_label"
        tools:background="@android:color/holo_green_dark" />

</LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {

private static final int RC_SIGN_IN = 1 ;
/**
 * The {@link android.support.v4.view.PagerAdapter} that will provide
 * fragments for each of the sections. We use a
 * {@link FragmentPagerAdapter} derivative, which will keep every
 * loaded fragment in memory. If this becomes too memory intensive, it
 * may be best to switch to a
 * {@link android.support.v4.app.FragmentStatePagerAdapter}.
 */
private SectionsPagerAdapter mSectionsPagerAdapter;

/**
 * The {@link ViewPager} that will host the section contents.
 */
private static MainActivity mainActivity;

public static MainActivity getMainActivity() {
    return mainActivity;
}

private static void setMainActivity(MainActivity mainActivity) {
    MainActivity.mainActivity = mainActivity;
}

private ViewPager mViewPager;


private FirebaseAuth mFirebaseAuth;
private FirebaseAuth.AuthStateListener mAuthStateListener;
private MessageAdapter mMessageAdapter;

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

    MainActivity.setMainActivity(this);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    // Create the adapter that will return a fragment for each of the three
    // primary sections of the activity.
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);

    mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));

    mFirebaseAuth = FirebaseAuth.getInstance();

    mAuthStateListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();

            if (user != null) {
                //User sign in


            } else {
                //User signed out

                startActivityForResult(
                        AuthUI.getInstance()
                                .createSignInIntentBuilder()
                                .setIsSmartLockEnabled(false)
                                .setAvailableProviders(Arrays.asList(
                                        new AuthUI.IdpConfig.GoogleBuilder().build(),
                                        new AuthUI.IdpConfig.EmailBuilder().build()))
                                .build(),
                        RC_SIGN_IN);
            }
        }
    };

}




@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.


    //noinspection SimplifiableIfStatement
    switch (item.getItemId()){
        case R.id.action_signout:
            AuthUI.getInstance().signOut(this);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }

}

 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
 * one of the sections/tabs/pages.
 */
public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
        // Return a PlaceholderFragment (defined as a static inner class below).
        switch (position){
            case 0:
                learning_fragment learning_fragment = new learning_fragment();
                return learning_fragment;
            case 1:
                forum_fragment forum_fragment = new forum_fragment();
                return forum_fragment;

                default:
                    return null;
        }
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 2;
    }

}

@Override
protected void onPause() {
    super.onPause();
    if (mAuthStateListener != null) {
        mFirebaseAuth.removeAuthStateListener(mAuthStateListener);
    }

}

@Override
protected void onResume() {
    super.onResume();
    mFirebaseAuth.addAuthStateListener(mAuthStateListener);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode==RESULT_OK){
        Toast.makeText(this,"singed out",Toast.LENGTH_SHORT).show();
    }else {
        Toast.makeText(this,"sign in cancelled",Toast.LENGTH_SHORT).show();
        finish();
    }
}}

MessageModel.java

public class MessageModel {

private String userName;
private String msgText;

public MessageModel() {
}

public MessageModel(String userName, String msgText) {
    this.userName = userName;
    this.msgText = msgText;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getMsgText() {
    return msgText;
}

public void setMsgText(String msgText) {
    this.msgText = msgText;
}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...