[英]How can I build a model to distinguish tweets about Apple (Inc.) from tweets about apple (fruit)?
[英]Can not render tweets
嗨,我是 Android Studio 的新手,我有这样的代码:
HomeFragment.java
package fragments;
import android.content.Context;
import android.content.DialogInterface;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import com.example.asuss.myapplication.R;
import com.firebase.client.Firebase;
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.ValueEventListener;
import java.util.ArrayList;
import adapters.TweetAdapter;
import models.Tweet;
public class HomeFragment extends Fragment {
private ArrayList<Tweet> tweets = new ArrayList<Tweet>();
private RecyclerView mRecyclerView;
private TweetAdapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private OnFragmentInteractionListener mListener;
private View view;
public interface OnFragmentInteractionListener{
void onFragmentInteraction(Uri uri);
}
public HomeFragment(){
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.home_fragment, container, false);
//loadTweets();
getData();
buildRecyclerView();
return view;
}
private void getData() {
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference ref = firebaseDatabase.getReference().child("Tweets");
final DatabaseReference ref2 = firebaseDatabase.getReference().child("Users");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()) {
for (final DataSnapshot ds : dataSnapshot.getChildren()) {
System.out.println("Selam" + ds.toString());
if (ds.child("authorId") != null) {
final String authorID = ds.child("authorId").getValue().toString();
final String id = ds.child("id").getValue().toString();
final String content = ds.child("content").getValue().toString();
final int likeNumber = Integer.parseInt(ds.child("likeNumber").getValue().toString());
final boolean isActive = Boolean.parseBoolean(ds.child("isActive").getValue().toString());
ref2.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshotID) {
if (dataSnapshotID.exists()) {
for (DataSnapshot ds2 : dataSnapshotID.getChildren()) {
if (ds2.child("id").getValue().toString().equals(authorID)) {
System.out.println("AuthorID: " + authorID + " İsim: " + ds2.child("username").getValue().toString());
tweets.add(new Tweet(id, R.drawable.ic_adb_black_24dp, ds2.child("username").getValue().toString(),
content, likeNumber, isActive));
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseErrorID) {
}
});
}
}
}
else{
Log.i("Database: ","Fail");
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void addTweet() {
//String tweetContent = editText.getText().toString();
//tweets.add(new Tweet(tweets.size(), R.drawable.ic_adb_black_24dp, "yarenska", tweetContent, 0));
// notifyDataSetChanged de çağırılabilir ama animasyonlu olmasını istersek
// notifyItemInserted çağrılır.
//mAdapter.notifyItemInserted(tweets.size()-1);
}
private void buildRecyclerView() {
Log.i("Hello","Hello");
mRecyclerView = view.findViewById(R.id.recyclerView);
//mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getContext());
mAdapter = new TweetAdapter(tweets);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(new TweetAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
Log.i("onItemClicked","Hello" + position);
}
});
}
private void loadTweets() {
//tweets.add(new Tweet(1, R.drawable.ic_adb_black_24dp, "yarenska", "Çok güzel bir gün", 2));
//tweets.add(new Tweet(2, R.drawable.ic_adb_black_24dp, "aligunes73", "Yaşasın", 0));
//tweets.add(new Tweet(3, R.drawable.ic_adb_black_24dp, "jally_jam", "Matematikten 100 almışım.", 1));
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
}
//Fragment ilk oluştuğu zaman çağrılır.
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
}
问题是这个程序没有呈现我从数据库收集的推文。 当我尝试调试它时,它首先转到 getData 方法,但在 getData 的 ref.addValueEventListener(new ValueEventListener()) 方法之后,它然后转到 buildRecyclerView 方法,因此正如预期的那样,它尝试呈现长度为 0 的数组列表。我怎么能防止?
onDataChange()
是异步的,这意味着它不会等到所有数据都被检索到,而是在检索所有数据之前执行buildRecyclerView()
方法,从而解决问题。 您需要添加buildRecyclerView()
内onDataChange()
从并将其取出onCreateView()
private void getData() {
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference ref = firebaseDatabase.getReference().child("Tweets");
final DatabaseReference ref2 = firebaseDatabase.getReference().child("Users");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull final DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()) {
for (final DataSnapshot ds : dataSnapshot.getChildren()) {
System.out.println("Selam" + ds.toString());
if (ds.child("authorId") != null) {
final String authorID = ds.child("authorId").getValue().toString();
final String id = ds.child("id").getValue().toString();
final String content = ds.child("content").getValue().toString();
final int likeNumber = Integer.parseInt(ds.child("likeNumber").getValue().toString());
final boolean isActive = Boolean.parseBoolean(ds.child("isActive").getValue().toString());
ref2.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshotID) {
if (dataSnapshotID.exists()) {
for (DataSnapshot ds2 : dataSnapshotID.getChildren()) {
if (ds2.child("id").getValue().toString().equals(authorID)) {
System.out.println("AuthorID: " + authorID + " İsim: " + ds2.child("username").getValue().toString());
tweets.add(new Tweet(id, R.drawable.ic_adb_black_24dp, ds2.child("username").getValue().toString(),
content, likeNumber, isActive));
buildRecyclerView(); //add it here
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseErrorID) {
}
});
}
}
}
else{
Log.i("Database: ","Fail");
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.