旋转屏幕时图像无法保留

时间:2018-07-11 00:48:15

标签: android firebase firebase-storage activity-state

我正在尝试将图库中的图像添加到图像视图中。它已添加,但是在旋转屏幕时图像从图像视图中消失了。图像已保存到Firebase。如何保存活动状态?我已经搜索过了,但是没有找到相关的答案。有人可以帮助我解决问题吗?

public class skcreateac extends AppCompatActivity 
{
static final int PICK_IMAGE_REQUEST = 1;

private EditText sketac1;
private EditText sksetac1;
private EditText sketac2;
private EditText sketac3;
private EditText sketac4;
private EditText sketac5;
private Button skbt;
private Spinner spac;
private ImageView skimg;
private StorageReference skdbimg, fp;
private Firebase skrootac1;
private String strsk, skurl;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_skcreateac);
    spac = (Spinner)findViewById(R.id.spinner2);
    String cities[] = new String[]{"Hyderabad", "Warangal"};
    ArrayAdapter<String> cityadapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, cities);
    spac.setAdapter(cityadapter);
    skimg = (ImageView) findViewById(R.id.skimg);
    skdbimg = FirebaseStorage.getInstance().getReference();

    sketac1 = (EditText) findViewById(R.id.skonac);
    sksetac1 = (EditText) findViewById(R.id.sksncac);
    sketac2 = (EditText) findViewById(R.id.skphcac);
    sketac3 = (EditText) findViewById(R.id.sksaddress);
    sketac4 = (EditText) findViewById(R.id.skpwcac);
    sketac5 = (EditText) findViewById(R.id.skpwrcac);
    skbt = (Button) findViewById(R.id.bsu);

    strsk = getIntent().getExtras().getString("value");
    String url1 = "https://my-app2-a14eb.firebaseio.com/Shopkeepers/";
    String url2 = strsk;
    skurl = url1 + url2;
    skrootac1 = new Firebase(skurl);

    skimg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent skimg = new Intent(Intent.ACTION_PICK);
            skimg.setType("image/*");
            startActivityForResult(skimg, PICK_IMAGE_REQUEST);

        }
    });

    skbt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String s1 = sketac1.getText().toString();
            if (sketac1.getText().length() == 0) {
                sketac1.setError("Kindly enter your Name");
            }
            Firebase childac1 = skrootac1.child("Name");
            childac1.setValue(s1);

            String ss1 = sksetac1.getText().toString();
            if (sksetac1.getText().length() == 0) {
                sksetac1.setError("Kindly enter your ShopName");
            }
            Firebase childsac1 = skrootac1.child("ShopName");
            childsac1.setValue(ss1);

            String s2 = sketac2.getText().toString();
            long i = Long.parseLong(s2);
            int j = 0;
            while (i > 0) {
                i = i / 10;
                j++;
            }
            if (j == 10) {
                Firebase childac2 = skrootac1.child("Phone");
                childac2.setValue(s2);
            } else {
                Toast.makeText(skcreateac.this, "Enter valid Mobile number", Toast.LENGTH_LONG).show();

            }
            String s3 = spac.getSelectedItem().toString();
            Firebase childac3 = skrootac1.child("City");
            childac3.setValue(s3);


            String s4 = sketac3.getText().toString();
            Firebase childac4 = skrootac1.child("Address");
            childac4.setValue(s4);

            String s5 = sketac4.getText().toString();
            String s6 = sketac5.getText().toString();
            if (s5.equals(s6)) {
                Firebase childac5 = skrootac1.child("Password");
                childac5.setValue(s5);
            } else {
                Toast.makeText(skcreateac.this, "Confirm Password field doesnot match with Create Password field", Toast.LENGTH_LONG).show();
            }

        }
    });


}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK) {
        final Uri uri = data.getData();
        fp = skdbimg.child("SKPhotos").child(strsk);
        fp.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                Picasso.get().load(uri).fit().centerCrop().into(skimg);
                Toast.makeText(skcreateac.this, "Uploaded photo", Toast.LENGTH_LONG).show();

            }
        });
    }
}

1 个答案:

答案 0 :(得分:1)

添加关注-

@Override
protected void onSaveInstanceState (Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelable("outputFileUri", photoURI);
}

在活动中进行一个private URI photoURI = null;

然后在您的onCreate()中添加do

    @Override
    protected void onCreate(Bundle savedInstanceState){
        // your other codes
        skrootac1 = new Firebase(skurl); 
        // your other codes
        if (savedInstanceState != null)
        {
            photoURI= savedInstanceState.getParcelable("outputFileUri");
            setImage(photoURI);

        }

    }
    private void setImage(final Uri uri){
            fp = skdbimg.child("SKPhotos").child(strsk);
            fp.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    Picasso.get().load(uri).fit().centerCrop().into(skimg);
                    Toast.makeText(skcreateac.this, "Uploaded photo", Toast.LENGTH_LONG).show();

                }
            });
    }

最后,更改您的onActivityResult()

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK) {
        photoURI = data.getData();
        setImage(photoURI);
    }
}
相关问题