Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用intent…,共享从firebase服务器获取的数据(图像、标题和描述)。。。?_Java_Android_Firebase - Fatal编程技术网

Java 如何使用intent…,共享从firebase服务器获取的数据(图像、标题和描述)。。。?

Java 如何使用intent…,共享从firebase服务器获取的数据(图像、标题和描述)。。。?,java,android,firebase,Java,Android,Firebase,我正在设计一个android应用程序,在这个应用程序中,我成功地从firebase获取了数据(图像、标题和描述),现在我正试图使用intent共享所有这些数据……但每次我都失败了……请帮助解决我的问题。这是我的活动页面,我正在其中实现共享数据功能 MainActivity.Java package com.timts.swipenews; import android.content.Intent; import android.graphics.Bitmap; import android.g

我正在设计一个android应用程序,在这个应用程序中,我成功地从firebase获取了数据(图像、标题和描述),现在我正试图使用intent共享所有这些数据……但每次我都失败了……请帮助解决我的问题。这是我的活动页面,我正在其中实现共享数据功能

MainActivity.Java

package com.timts.swipenews;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Adapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

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 com.timts.swipenews.Adapter.MyAdapter;
import com.timts.swipenews.Listener.IFirebaseLoadDone;
import com.timts.swipenews.Model.Movie;
import com.timts.swipenews.Transformer.DeapthPageTransformer;

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class MainActivity extends AppCompatActivity implements IFirebaseLoadDone {
    private static final String TAG = "MainActivity";
    ViewPager viewPager;
    MyAdapter adapter;
    DatabaseReference movies;
    IFirebaseLoadDone iFirebaseLoadDone;


    TextView mTitleTv, mDetailTV;
    ImageView mImageIv, mShareBtn;
    Bitmap bitmap;

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

        mTitleTv = findViewById(R.id.movie_title);
        mDetailTV = findViewById(R.id.movie_description);
        mImageIv = findViewById(R.id.movie_image);
        mShareBtn = findViewById(R.id.img_shr);


        //ge dat from server


        byte[] bytes = getIntent().getByteArrayExtra("image");
        String title = getIntent().getStringExtra("title");
        String desc = getIntent().getStringExtra("description");
        Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

        //set data to views
        mTitleTv.setText(title);
        mDetailTV.setText(desc);
        mImageIv.setImageBitmap(bmp);

        //get image from image view

        bitmap = ((BitmapDrawable) mImageIv.getDrawable()).getBitmap();


        movies = FirebaseDatabase.getInstance().getReference("Movies");
        iFirebaseLoadDone = this;
        loadMovie();
        viewPager = (ViewPager) findViewById(R.id.view_pager);
        viewPager.setPageTransformer(true, new DeapthPageTransformer());

        //share btn click handle
        mShareBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                shareImage();

            }
        });


    }


    private void shareImage() {
        try {
            //get title and description save in string s
            String s = mTitleTv.getText().toString() + "\n" + mDetailTV.getText().toString();

            File file = new File(getExternalCacheDir(), "sample.png");
            FileOutputStream fOut = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
            fOut.flush();
            fOut.close();
            file.setReadable(true, false);
            //intent to share image and text
            Intent intent = new Intent(Intent.ACTION_SEND);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.putExtra(Intent.EXTRA_TEXT, s);//put the text
            intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
            intent.setType("image/png");
            startActivity(Intent.createChooser(intent, "Share Via"));
        } catch (Exception e) {
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();

        }
    }

    private void loadMovie() {

        movies.addListenerForSingleValueEvent(new ValueEventListener() {
            List<Movie> movieList = new ArrayList<>();

            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot movieSnapShot : dataSnapshot.getChildren()) {
                    movieList.add(movieSnapShot.getValue(Movie.class));
                    iFirebaseLoadDone.onFirebaseLoadSuccess(movieList);
                }
                Collections.reverse(movieList);
                adapter.notifyDataSetChanged();
            }

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

                iFirebaseLoadDone.onFirebaseLoadFailed(databaseError.getMessage());

            }
        });
    }

    @Override
    public void onFirebaseLoadSuccess(List<Movie> movieList) {
        adapter = new MyAdapter(this, movieList);
        viewPager.setAdapter(adapter);

    }

    @Override
    public void onFirebaseLoadFailed(String message) {
        Toast.makeText(this, "" + message, Toast.LENGTH_SHORT).show();

    }



}

您在第74行获得
NullPointerException
。您的意图值可以是
null
,尤其是
getIntent().getByteArrayExtra(“图像”)
。logcat说,
尝试获取空数组的长度
。您应该确保数组不是
null
。最好的方法是调试

编辑:

byte[] bytes = getIntent().getByteArrayExtra("image");
String title = getIntent().getStringExtra("title");
String desc = getIntent().getStringExtra("description");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Drawable drawable = new BitmapDrawable(getResources(), bitmap);

//set data to views
mTitleTv.setText(title);
mDetailTV.setText(desc);
mImageIv.setImageDrawable(drawable)

我更新了我的帖子。你能在onCreate中替换这个块而不是你的块吗?我更新了你的代码,先生…但它还是不工作。好的,哪一行是你的第74行?不,我的意思是,你能共享第74行吗,因为我们看不到哪一行是第74行
byte[] bytes = getIntent().getByteArrayExtra("image");
String title = getIntent().getStringExtra("title");
String desc = getIntent().getStringExtra("description");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
Drawable drawable = new BitmapDrawable(getResources(), bitmap);

//set data to views
mTitleTv.setText(title);
mDetailTV.setText(desc);
mImageIv.setImageDrawable(drawable)