Android 中使用 Firebase 数据库的 WebView 实现

WebView implementation with Firebase Database in Android

我想用 Firebase 实现 webView 这样如果我添加 URLfirebase 数据库 它在我的 webView 在应用程序 中在 实时 中实现,我已经成功通过数据库实现文本和图像但无法使 webView 正常工作,我搜索了很多选项但都不适合我,请帮忙。如果您需要更多详细信息,我可以为您提供。

I am using Android Studio

下面是我的 Java class 图像和文本的 Firebase 实现代码

@Override
    public void onStart() {
        super.onStart();
        FirebaseUser currentUser = mAuth.getCurrentUser();
        if (currentUser == null) {
            sentToStart();
        }
        FirebaseRecyclerAdapter <post, postViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<post, postViewHolder>(

            post.class,
            R.layout.post_row_recycle_home,
            postViewHolder.class,
            mDatabaseReference
    ) {
        @Override
        protected void populateViewHolder(postViewHolder viewHolder, post model, int position) {
            viewHolder.setTitle(model.getTitle());
            viewHolder.setdescription(model.getDescription());
            viewHolder.setimage(getApplicationContext(), model.getImage());
            viewHolder.setsource(model.getSource());
        }
    };
    mrecyclerView.setAdapter(firebaseRecyclerAdapter);
}
public static class postViewHolder extends RecyclerViewPager.ViewHolder{

    View mView;

    public postViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
    }

    public void setTitle(String title){
        TextView post_title = (TextView)mView.findViewById(R.id.title_cardView);
        post_title.setText(title);
    }
    public void setsource(String source){
        TextView post_source = (TextView)mView.findViewById(R.id.source_cardView);
        post_source.setText(source);
    }

    public void setdescription(String description){
        TextView post_description = (TextView)mView.findViewById(R.id.description_cardView);
        post_description.setText(description);
    }

    public void setimage(final Context ctx, final String image){
        final ImageView post_image = (ImageView)mView.findViewById(R.id.post_image);
        Picasso.with(ctx).load(image).networkPolicy(NetworkPolicy.OFFLINE).into(post_image, new Callback() {

            @Override
            public void onSuccess() {
            }
            @Override
            public void onError() {
                Picasso.with(ctx).load(image).into(post_image);
            }
        });
    }
}

Getter/Setter Java Class

public class post {

    private String title;
    private String description;
    private String image;
    private String source;



    public String getSource() {
        return source;
    }

    public void setSource(String source) {
        this.source = source;
    }

    public post(){
    }

    public post(String title, String description, String image, String source) {
        this.title = title;
        this.description = description;
        this.image = image;
        this.source = source;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

}

已更新:WebView java Activity

public class webViewNews extends AppCompatActivity {

    private WebView webviewthis;
    private DatabaseReference mDatabaseReference;
    private DatabaseReference mdataRef;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview_page);
        mdataRef = FirebaseDatabase.getInstance().getReference().child("webView");
        webviewthis = (WebView)findViewById(R.id.webView_news);
        webviewthis.setWebViewClient(new WebViewClient());
        webviewthis.getSettings().setJavaScriptEnabled(true);
        webviewthis.getSettings().setLoadsImagesAutomatically(true);


        mdataRef.child("webView").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                    dataSnapshot.child("webView").getValue();
                    webviewthis.loadUrl("");

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

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

首先,正如我在您的代码中看到的,您使用了 .child("webView") 两次。一次在 DatabaseReference 中,一次在添加 ValueEventListener 时。那是您数据库中的内容吗?如果您的数据库中没有重复的孩子,您需要删除其中一个。

您在 mdataRef 上添加了一个 ValueEventListener,但您在那里什么也没做。您的 onDataChange() 方法是空的。请记住,每次数据库中发生更改时都会触发此方法。所以为了显示一些内容,你需要根据你的数据库结构从dataSnapshotobject中取出数据并显示在那里。

希望对您有所帮助。