StartListening()在OnBindviewHolder或onStart()方法中不起作用。 Android Studio 3.4版本

时间:2019-04-19 07:15:40

标签: java android

onBindviewHolder中的startListening()无效,并且在onStart()方法中也无效。

对此行发表评论后,显示MainAcitvity,但不显示此活动中的帖子项目。如果我请求添加onStart()方法,它将显示红色热线。

public class MainActivity extends AppCompatActivity {

    private NavigationView navigationView;
    private DrawerLayout drawerLayout;
    private ActionBarDrawerToggle actionBarDrawerToggle;
    private RecyclerView postlist;
    private Toolbar mToolbar;

    private CircleImageView NavProfileImage;
    private TextView NavProfileUserName;
    private ImageButton AddNewPostButton;

    private FirebaseAuth mAuth;
    private DatabaseReference UsersRef, PostsRef;
    String currentUserID;

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

        mAuth = FirebaseAuth.getInstance();
        currentUserID = mAuth.getCurrentUser().getUid();
        UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");
        PostsRef = FirebaseDatabase.getInstance().getReference().child("Posts");

        mToolbar = (Toolbar) findViewById(R.id.main_page_toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setTitle("Home");

        AddNewPostButton = (ImageButton) findViewById(R.id.add_new_post_button);

        drawerLayout = (DrawerLayout) findViewById(R.id.drawable_layout);
        actionBarDrawerToggle = new ActionBarDrawerToggle(MainActivity.this, drawerLayout, R.string.drawer_open, R.string.drawer_close);
        drawerLayout.addDrawerListener(actionBarDrawerToggle);
        actionBarDrawerToggle.syncState();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        navigationView = (NavigationView) findViewById(R.id.navigation_view);

        postlist = (RecyclerView) findViewById(R.id.all_users_post_list);
        postlist.setHasFixedSize(true);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setReverseLayout(true);
        linearLayoutManager.setStackFromEnd(true);

        postlist.setLayoutManager(linearLayoutManager);

        View navView = navigationView.inflateHeaderView(R.layout.nav_header);
        NavProfileImage = (CircleImageView) navView.findViewById(R.id.nav_profile_image);
        NavProfileUserName = (TextView) navView.findViewById(R.id.nav_user_name);

        UsersRef.child(currentUserID).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {

                    if (dataSnapshot.hasChild("fullname")) {
                        String fullname = dataSnapshot.child("fullname").getValue().toString();
                        NavProfileUserName.setText(fullname);
                    }

                    if (dataSnapshot.hasChild("profileimage")) {
                        String image = dataSnapshot.child("profileimage").getValue().toString();
                        Picasso.get().load(image).placeholder(R.drawable.profile).into(NavProfileImage);
                    } else {
                        Toast.makeText(MainActivity.this, "User doesnot Exist here...", Toast.LENGTH_SHORT).show();
                    }
                }
            }

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

            }
        });

        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                UserMenuSelector(item);
                return false;
            }
        });

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

        DisplayAllUsersPosts();
    }

    private void DisplayAllUsersPosts() {

        FirebaseRecyclerOptions<Posts> options = new FirebaseRecyclerOptions.Builder<Posts>().setQuery(PostsRef, Posts.class).build();
        final FirebaseRecyclerAdapter<Posts, PostsViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Posts, PostsViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull PostsViewHolder holder, int position, @NonNull Posts model) {
                holder.username.setText(model.getFullname());
                holder.time.setText(" " + model.getTime());
                holder.date.setText(" " + model.getDate());
                holder.description.setText(model.getDescription());
                Picasso.get().load(model.getProfileimage()).into(holder.user_post_image);
                Picasso.get().load(model.getPostimage()).into(holder.postImage);

            }

            @NonNull
            @Override
            public PostsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.all_posts_layout, parent, false);
                PostsViewHolder viewHolder = new PostsViewHolder(view);
                return viewHolder;
            }
        };

        //firebaseRecyclerAdapter.startListening();
        postlist.setAdapter(firebaseRecyclerAdapter);
    }

    public static class PostsViewHolder extends RecyclerView.ViewHolder {
        TextView username, date, time, description;
        CircleImageView user_post_image;
        ImageView postImage;

        public PostsViewHolder(View itemView) {
            super(itemView);

            username = itemView.findViewById(R.id.post_user_name);
            date = itemView.findViewById(R.id.post_date);
            time = itemView.findViewById(R.id.post_time);
            description = itemView.findViewById(R.id.post_Description);
            postImage = itemView.findViewById(R.id.post_image);
            user_post_image = itemView.findViewById(R.id.post_profile_image);
        }
    }

    private void SendUserToPostActivity() {
        Intent postIntent = new Intent(MainActivity.this, PostActivity.class);
        startActivity(postIntent);
    }

    @Override
    protected void onStart() {
        super.onStart();

        FirebaseUser currentUser = mAuth.getCurrentUser();
        if (currentUser == null) {
            SendUserToLoginActivity();
        } else {
            CheckUserExistence();
        }
    }

    private void CheckUserExistence() {
        final String current_user_id = mAuth.getCurrentUser().getUid();

        UsersRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (!dataSnapshot.hasChild(current_user_id)) {
                    SendUserToSetupActivity();
                }
            }

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

            }
        });
    }

    private void SendUserToSetupActivity() {
        Intent setupIntent = new Intent(MainActivity.this, SetupActivity.class);
        setupIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(setupIntent);
        finish();
    }

    private void SendUserToLoginActivity() {
        Intent loginIntent = new Intent(MainActivity.this, LoginActivity.class);
        loginIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(loginIntent);
        finish();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (actionBarDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private void UserMenuSelector(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.nav_post:
                SendUserToPostActivity();
                break;
            case R.id.nav_profile:
                Toast.makeText(this, "Profile", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_home:
                Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_friend:
                Toast.makeText(this, "Friends", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_find_friends:
                Toast.makeText(this, "Find Friends", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_messages:
                Toast.makeText(this, "Messages", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_settings:
                Toast.makeText(this, "Setting", Toast.LENGTH_SHORT).show();
                break;
            case R.id.nav_logout:
                mAuth.signOut();
                SendUserToLoginActivity();
                break;
        }
    }
}
  

04-19 12:10:05.836 4162-4162 / androidwork.app.chadii.socialchatapp   E / AndroidRuntime:致命异常:main       流程:androidwork.app.chadii.socialchatapp,PID:4162       android.view.InflateException:二进制XML文件第25行:膨胀类错误           在android.view.LayoutInflater.createView(LayoutInflater.java:633)           在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)           在android.view.LayoutInflater.rInflate(LayoutInflater.java:806)           在android.view.LayoutInflater.rInflate(LayoutInflater.java:809)           在android.view.LayoutInflater.rInflate(LayoutInflater.java:809)           在android.view.LayoutInflater.inflate(LayoutInflater.java:504)           在android.view.LayoutInflater.inflate(LayoutInflater.java:414)           在androidwork.app.chadii.socialchatapp.MainActivity $ 4.onCreateViewHolder(MainActivity.java:165)           在androidwork.app.chadii.socialchatapp.MainActivity $ 4.onCreateViewHolder(MainActivity.java:150)           在androidx.recyclerview.widget.RecyclerView $ Adapter.createViewHolder(RecyclerView.java:6794)           在androidx.recyclerview.widget.RecyclerView $ Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975)           在androidx.recyclerview.widget.RecyclerView $ Recycler.getViewForPosition(RecyclerView.java:5858)           在androidx.recyclerview.widget.RecyclerView $ Recycler.getViewForPosition(RecyclerView.java:5854)           在androidx.recyclerview.widget.LinearLayoutManager $ LayoutState.next(LinearLayoutManager.java:2230)           在androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)           在androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)           在androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)           在androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)           在androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)           在androidx.recyclerview.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1888)           在androidx.recyclerview.widget.RecyclerView $ 1.run(RecyclerView.java:407)           在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:767)           在android.view.Choreographer.doCallbacks(Choreographer.java:580)           在android.view.Choreographer.doFrame(Choreographer.java:549)           在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:753)           在android.os.Handler.handleCallback(Handler.java:739)           在android.os.Handler.dispatchMessage(Handler.java:95)           在android.os.Looper.loop(Looper.java:135)           在android.app.ActivityThread.main(ActivityThread.java:5293)           在java.lang.reflect.Method.invoke(本机方法)           在java.lang.reflect.Method.invoke(Method.java:372)           在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)        造成原因:java.lang.reflect.InvocationTargetException           在java.lang.reflect.Constructor.newInstance(本地方法)           在java.lang.reflect.Constructor.newInstance(Constructor.java:288)           在android.view.LayoutInflater.createView(LayoutInflater.java:607)           在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)           在android.view.LayoutInflater.rInflate(LayoutInflater.java:806)           在android.view.LayoutInflater.rInflate(LayoutInflater.java:809)           在android.view.LayoutInflater.rInflate(LayoutInflater.java:809)           在android.view.LayoutInflater.inflate(LayoutInflater.java:504)           在android.view.LayoutInflater.inflate(LayoutInflater.java:414)           

     

ERROR_HERE

     

androidwork.app.chadii.socialchatapp.MainActivity $ 4.onCreateViewHolder(MainActivity.java:165)           在androidwork.app.chadii.socialchatapp.MainActivity $ 4.onCreateViewHolder(MainActivity.java:150)           在androidx.recyclerview.widget.RecyclerView $ Adapter.createViewHolder(RecyclerView.java:6794)           在androidx.recyclerview.widget.RecyclerView $ Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975)           在androidx.recyclerview.widget.RecyclerView $ Recycler.getViewForPosition(RecyclerView.java:5858)           在androidx.recyclerview.widget.RecyclerView $ Recycler.getViewForPosition(RecyclerView.java:5854)           在androidx.recyclerview.widget.LinearLayoutManager $ LayoutState.next(LinearLayoutManager.java:2230)           在androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)           在androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)           在androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)           在androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)           在androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)           在androidx.recyclerview.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1888)           在androidx.recyclerview.widget.RecyclerView $ 1.run(RecyclerView.java:407)           在android.view.Choreographer $ CallbackRecord.run(Choreographer.java:767)           在android.view.Choreographer.doCallbacks(Choreographer.java:580)           在android.view.Choreographer.doFrame(Choreographer.java:549)           在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:753)           在android.os.Handler.handleCallback(Handler.java:739)           在android.os.Handler.dispatchMessage(Handler.java:95)           在android.os.Looper.loop(Looper.java:135)           在android.app.ActivityThread.main(ActivityThread.java:5293)           在java.lang.reflect.Method.invoke(本机方法)           在java.lang.reflect.Method.invoke(Method.java:372)           在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)        原因:java.lang.IllegalArgumentException:不支持ScaleType FIT_CENTER。           在de.hdodenhof.circleimageview.CircleImageView.setScaleType(CircleImageView.java:134)           在android.widget.ImageView(ImageView.java:169)           在android.widget.ImageView(ImageView.java:135)           在de.hdodenhof.circleimageview.CircleImageView。(CircleImageView.java:98)           在de.hdodenhof.circleimageview.CircleImageView。(CircleImageView.java:94)

1 个答案:

答案 0 :(得分:0)

java.lang.IllegalArgumentException: ScaleType FIT_CENTER not supported. at de.hdodenhof.circleimageview.CircleImageView.setScaleType(CircleImageView.java:134)

CircleImageView仅支持ScaleType.CENTER_CROP

链接https://github.com/hdodenhof/CircleImageView/blob/master/circleimageview/src/main/java/de/hdodenhof/circleimageview/CircleImageView.java

public class CircleImageView extends ImageView {

private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP;
...
@Override
public void setScaleType(ScaleType scaleType) {
    if (scaleType != SCALE_TYPE) {
        throw new IllegalArgumentException(String.format("ScaleType %s not supported.", scaleType));
    }
}
...