我的代码有问题,请帮助我更正我的代码,如果它不起作用,我是Android编程的新手
PostAdapter
package com.developer.fireone.fingaoffice.Adapter;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.media.MediaPlayer;
import android.net.Uri;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.FileProvider;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.RecyclerView;
import com.android.volley.AuthFailureError;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.developer.fireone.fingaoffice.CommentsActivity;
import com.developer.fireone.fingaoffice.FollowersActivity;
import com.developer.fireone.fingaoffice.Fragment.PostDetailFragment;
import com.developer.fireone.fingaoffice.Fragment.ProfileFragment;
import com.developer.fireone.fingaoffice.Model.ForAllUser;
import com.developer.fireone.fingaoffice.Model.Post;
import com.developer.fireone.fingaoffice.Model.User;
import com.developer.fireone.fingaoffice.Notifications.Data;
import com.developer.fireone.fingaoffice.Notifications.Sender;
import com.developer.fireone.fingaoffice.Notifications.Token;
import com.developer.fireone.fingaoffice.R;
import com.developer.fireone.fingaoffice.VideoActivity;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import com.google.gson.Gson;
import com.tylersuehr.socialtextview.SocialTextView;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static java.security.AccessController.getContext;
public class PostAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final int VIEW_TYPE_ITEM = 0;
private final int VIEW_TYPE_LOADING = 1;
public Context mContext;
public List<Post> mPost;
public Activity activity;
public FirebaseUser firebaseUser;
public RequestQueue requestQueue;
public boolean notify = false;
public PostAdapter(Context mContext, List<Post> mPost, Activity activity) {
this.mContext = mContext;
this.mPost = mPost;
this.activity = activity;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == VIEW_TYPE_ITEM) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_item, parent, false);
return new ItemViewHolder(view);
} else {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_loading, parent, false);
return new LoadingViewHolder(view);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
if (viewHolder instanceof ItemViewHolder) {
populateItemRows((ItemViewHolder) viewHolder, position);
} else if (viewHolder instanceof LoadingViewHolder) {
showLoadingView((LoadingViewHolder) viewHolder, position);
}
}
@Override
public int getItemCount() {
return mPost == null ? 0 : mPost.size();
}
/**
* The following method decides the type of ViewHolder to display in the RecyclerView
*
* @param position
* @return
*/
@Override
public int getItemViewType(int position) {
return mPost.get(position) == null ? VIEW_TYPE_LOADING : VIEW_TYPE_ITEM;
}
private class ItemViewHolder extends RecyclerView.ViewHolder {
public ImageView btn_play,image_profile, post_image, like, comment, save, more,certification_finga,share;
public TextView username, fullname, likes, publisher, comments, txt_time, txt_date, finga_android;
public SocialTextView description;
public ImageView post_video;
public ProgressBar progressBar;
public ItemViewHolder(@NonNull View itemView) {
super(itemView);
certification_finga=itemView.findViewById(R.id.certifier_finga);
finga_android=itemView.findViewById(R.id.finga_android);
progressBar=itemView.findViewById(R.id.progress);
image_profile=itemView.findViewById(R.id.image_profile);
share=itemView.findViewById(R.id.share);
btn_play=itemView.findViewById(R.id.btn_play);
post_image=itemView.findViewById(R.id.post_image);
post_video=itemView.findViewById(R.id.post_video);
like=itemView.findViewById(R.id.like);
comment=itemView.findViewById(R.id.comment);
save=itemView.findViewById(R.id.save);
username=itemView.findViewById(R.id.username);
fullname=itemView.findViewById(R.id.fullname);
likes=itemView.findViewById(R.id.likes);
publisher=itemView.findViewById(R.id.publisher);
description=itemView.findViewById(R.id.description);
comments=itemView.findViewById(R.id.comments);
more=itemView.findViewById(R.id.more);
txt_date=itemView.findViewById(R.id.txt_date);
txt_time=itemView.findViewById(R.id.txt_time);
}
}
private class LoadingViewHolder extends RecyclerView.ViewHolder {
ProgressBar progressBar;
public LoadingViewHolder(@NonNull View itemView) {
super(itemView);
progressBar = itemView.findViewById(R.id.progressBar_loading);
}
}
private void showLoadingView(LoadingViewHolder viewHolder, int position) {
//ProgressBar would be displayed
}
private void populateItemRows(ItemViewHolder viewHolder, int position) {
//...
}
//send Notification like...
private void sendNotificaion(String receiver, final String username, final String msg) {
DatabaseReference tokens = FirebaseDatabase.getInstance().getReference("Tokens");
requestQueue= Volley.newRequestQueue(mContext);
Query query = tokens.orderByKey().equalTo(receiver);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot snapshot : dataSnapshot.getChildren()){
Token token = snapshot.getValue(Token.class);
Data dataComment = new Data(
firebaseUser.getUid(),
R.mipmap.logo4,
username+": "+msg,
"Le Yamo de xa ! ",
""+receiver,
"LikeNotification");
Sender senderComment = new Sender(dataComment, token.getToken());
try {
JSONObject senderJsonObj = new JSONObject(new Gson().toJson(senderComment));
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("https://fcm.googleapis.com/fcm/send", senderJsonObj,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("JSON_RESPONSE", "onResponse: "+response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("JSON_RESPONSE", "onResponse: "+error.toString());
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String,String> headers=new HashMap<>();
headers.put("Content-Type","application/json");
headers.put("Authorization","key=AAAAST1mR1g:APA91bFEgcbD3UGgdhByr7gEP2Zrc1o6Lg2yqAZfhsPKtY1jPaGmc5MKblGLn6kT0atmVlPo95xaGTpxxTn997Bm_X9mlJQ6gwlY7wGl-Z7HV9RuJA6CP2JgSd52jRLycDoL8l_ONklX");
return headers;
}
};
requestQueue.add(jsonObjectRequest);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void shareTextOnly(String description) {
String shareBody = description+"\n"+"\n"+ "Ce post ete partager depuis 'Finga' le reseau Social Afro telechargeable ici: " +
"https://play.google.com/store/apps/details?id=com.developer.fireone.finga";
Intent sIntent = new Intent(Intent.ACTION_SEND);
sIntent.setType("text/plain");
sIntent.putExtra(Intent.EXTRA_SUBJECT,"Finga>> Subject Here");
sIntent.putExtra(Intent.EXTRA_TEXT,shareBody);
mContext.startActivity(Intent.createChooser(sIntent,"Finga>> Share Via"));
}
private void ShareImageAndText(String description, Bitmap bitmap) {
String shareBody = description +"\n"+ "\n"+"Ce post ete partager depuis 'Finga' le reseau Social Afro telechargeable ici: " +
"https://play.google.com/store/apps/details?id=com.developer.fireone.finga";
Uri uri = saveImageToShare(bitmap);
Intent sIntent = new Intent(Intent.ACTION_SEND);
sIntent.putExtra(Intent.EXTRA_STREAM,uri);
sIntent.putExtra(Intent.EXTRA_TEXT,shareBody);
sIntent.putExtra(Intent.EXTRA_SUBJECT,"Finga>> Subject Here");
sIntent.setType("image/png");
mContext.startActivity(Intent.createChooser(sIntent,"Finga>> Share Via"));
}
private Uri saveImageToShare(Bitmap bitmap) {
File imageFolder = new File(mContext.getCacheDir(),"images");
Uri uri = null;
try {
imageFolder.mkdirs();
File file = new File(imageFolder,"shared_image.png");
FileOutputStream stream =new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 90,stream);
stream.flush();
stream.close();
uri= FileProvider.getUriForFile(mContext,"com.developer.fireone.finga.fileprovider",file);
}catch (Exception e){
Toast.makeText(mContext, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
}
return uri;
}
private void getComments(String postid, final TextView comments ){
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Comments").child(postid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
comments.setText(mContext.getString(R.string.viewAll)+" "+dataSnapshot.getChildrenCount()+" "+mContext.getString(R.string.comments1));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
// isliked
private void isLiked(String postid, final ImageView imageView){
final FirebaseUser firebaseUser= FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference reference=FirebaseDatabase.getInstance().getReference()
.child("Likes")
.child(postid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
try{
if(dataSnapshot.child(firebaseUser.getUid()).exists()){
imageView.setImageResource(R.drawable.ic_liked);
imageView.setTag("liked");
}else {
imageView.setImageResource(R.drawable.ic_like);
imageView.setTag("like");
}
}catch (Exception e){
Toast.makeText(mContext, "wait a moment please...", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void addNotifications(String userid, String postid){
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Notifications").child(userid);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("userid", firebaseUser.getUid());
hashMap.put("text", mContext.getString(R.string.strlikePost));
hashMap.put("postid", postid);
hashMap.put("ispost", true);
hashMap.put("isseen", false);
reference.push().setValue(hashMap);
}
private void nrLikes(final TextView likes, String postid){
DatabaseReference reference=FirebaseDatabase.getInstance().getReference().child("Likes")
.child(postid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
likes.setText(dataSnapshot.getChildrenCount()+" yamo.");
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void publisherInfo(final ImageView image_profile,final ImageView certification_finga, final TextView username, final TextView fullname, final TextView publisher, final String userid){
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
final User user= dataSnapshot.getValue(User.class);
if(user.getCertifier()!=null && user.getCertifier().equals("certified")){
certification_finga.setVisibility(View.VISIBLE);
}else{
certification_finga.setVisibility(View.GONE);
}
Glide.with(mContext.getApplicationContext()).load(user.getImageurl()).into(image_profile);
username.setText(user.getUsername());
fullname.setText(user.getFullname());
publisher.setText(user.getUsername());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void isSave(final String postid, final ImageView imageView){
FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Saves")
.child(firebaseUser.getUid());
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.child(postid).exists()){
imageView.setImageResource(R.drawable.ic_saved);
imageView.setTag("saved");
}else{
imageView.setImageResource(R.drawable.ic_save_black);
imageView.setTag("save");
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void editPost(final String postid){
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
alertDialog.setTitle(R.string.strEditPost);
final EditText editText = new EditText(mContext);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
);
editText.setLayoutParams(lp);
alertDialog.setView(editText);
getText(postid, editText);
alertDialog.setPositiveButton(R.string.strEdit, (dialogInterface, i) -> {
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("description", editText.getText().toString());
FirebaseDatabase.getInstance().getReference("Posts")
.child(postid).updateChildren(hashMap);
});
alertDialog.setNegativeButton(R.string.strCancel, (dialogInterface, i) -> dialogInterface.dismiss());
alertDialog.show();
}
private void getText(String postid, final EditText editText) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts")
.child(postid);
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
editText.setText(dataSnapshot.getValue(Post.class).getDescription());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
MainFragment
private void initScrollListener() {
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
if (!isLoading) {
if (linearLayoutManager != null && linearLayoutManager.findLastCompletelyVisibleItemPosition() == postList.size() - 1) {
//bottom of list!
loadMore();
isLoading = true;
}
}
}
});
}
private void loadMore() {
postList.add(null);
postAdapter.notifyItemInserted(postList.size() - 1);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
postList.remove(postList.size() - 1);
int scrollPosition = postList.size();
postAdapter.notifyItemRemoved(scrollPosition);
currentSize = scrollPosition;
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts");
reference.keepSynced(true);
Query postQuery = reference.startAt(oldestPostId).limitToLast(currentSize*10);
postQuery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
postList.clear();
for(DataSnapshot snapshot:dataSnapshot.getChildren()){
Post post = snapshot.getValue(Post.class);
for(String id:followingList){
oldestPostId = dataSnapshot.getKey();
snapshot.getChildrenCount();
if(post.getPublisher()!=null && post.getPublisher().equals(id)){
postList.add(post);
indication.stopShimmer();
indication.setVisibility(View.GONE);
currentSize++;
}
}
if(post.getPublisher()!=null && post.getPublisher().equals(firebaseUser.getUid())){
postList.add(post);
//stop shimmer
indication.setVisibility(View.GONE);
indication.stopShimmer();
}
}
// postAdapter.notifyItemRemoved(postList.size());
// postAdapter.notifyItemChanged(postList.size());
postAdapter.notifyDataSetChanged();
isLoading=false;
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
postAdapter.notifyDataSetChanged();
isLoading = false;
}
}, 2000);
}
}
private void readsposts(){
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Posts");
reference.keepSynced(true);
Query postQuery = reference.limitToLast(10);
postQuery.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
postList.clear();
for(DataSnapshot snapshot:dataSnapshot.getChildren()){
Post post = snapshot.getValue(Post.class);
for(String id:followingList){
if(post.getPublisher()!=null && post.getPublisher().equals(id)){
postList.add(post);
indication.stopShimmer();
indication.setVisibility(View.GONE);
}
}
if(post.getPublisher()!=null && post.getPublisher().equals(firebaseUser.getUid())){
postList.add(post);
//stop shimmer
indication.setVisibility(View.GONE);
indication.stopShimmer();
}
}
// postAdapter.notifyItemRemoved(postList.size());
// postAdapter.notifyItemChanged(postList.size());
postAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
C0]函数中行limitToLast(...)
中的[Query postQuery = reference.startAt(oldestPostId).limitToLast(currentSize*10);
函数必须为positive整数”。因此,如果您的loadMore()
为0,则会引发此异常。
因此而不是currentSize
,您应该将其替换为:currentSize = scrollPosition;