活动本身

时间:2019-07-13 16:38:01

标签: java android

我正在创建一个聊天应用程序。用户可以更改其信息。创建新帐户后,他们必须创建自己的个人资料。个人档案活动会一次又一次地重新启动。我可以解决它还是Android问题

我已经在here尝试了一切!

settingsActivity.java:

IndexError: list index out of range

没有错误。但是我可以通过使用ADB卸载它来停止它

编辑:在我在Firebase中手动编辑它然后从主活动中打开该活动后,它可以正常工作。

Edit2: registerActivity.java

package com.satyamedh.chitchatmessenger;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
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.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.squareup.picasso.Picasso;
import com.theartofdev.edmodo.cropper.CropImage;
import com.theartofdev.edmodo.cropper.CropImageView;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Objects;

import de.hdodenhof.circleimageview.CircleImageView;

public class SettingsActivity extends AppCompatActivity {

    private Button Updatebutton;
    private EditText Username, Status;
    private CircleImageView profileImage;

    private String currentUID;
    private DatabaseReference rootref;

    private StorageReference ProfileImagesRef;

    private String downloadUrl;

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

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);



        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)
            {
                final CropImage.ActivityResult result = CropImage.getActivityResult(data);

                if(resultCode == RESULT_OK)
                {
                    Uri resultUri = result.getUri();

                    final StorageReference ref = ProfileImagesRef.child(currentUID + ".jpg");

                    ref.putFile(resultUri)
                            .addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                                @Override
                                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {


                                    ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                        @Override
                                        public void onSuccess(Uri uri)
                                        {
                                            Toast.makeText(SettingsActivity.this, uri.toString(), Toast.LENGTH_SHORT).show();
                                            downloadUrl = uri.toString();

                                            rootref.child("Users").child(currentUID).child("image")
                                                    .setValue(downloadUrl)
                                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                        @Override
                                                        public void onComplete(@NonNull Task<Void> task)
                                                        {
                                                            if(task.isSuccessful())
                                                            {
                                                                Toast.makeText(SettingsActivity.this, "Profile Image Uploaded Successfully...", Toast.LENGTH_SHORT).show();
                                                            }
                                                            else
                                                            {
                                                                Toast.makeText(SettingsActivity.this, "Some error has occurred, please try again later...", Toast.LENGTH_SHORT).show();
                                                            }
                                                        }
                                                    });

                                        }
                                    });


                                }



                            });

                }

            }


        }


    private void getUserInfo()
    {
        rootref.child("Users").child(currentUID)
                .addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                            String oldImage;
                            if(dataSnapshot.hasChild("name") && (dataSnapshot.hasChild("status"))) {
                                String oldUsername = dataSnapshot.child("name").getValue().toString();
                                String oldStatus = dataSnapshot.child("status").getValue().toString();
                                Username.setText(oldUsername);
                                Status.setText(oldStatus);
                            }

                            if (dataSnapshot.hasChild("image"))
                            {
                                oldImage = dataSnapshot.child("image").getValue().toString();
                                Picasso.get().load(oldImage).placeholder(R.drawable.profile_image).into(profileImage);

                            }








                            Toast.makeText(SettingsActivity.this, "Please update your profile", Toast.LENGTH_SHORT).show();



                    }

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

                    }
                });
    }


    private void updateSettings()
    {
        String setUserName = Username.getText().toString();
        String setStatus = Status.getText().toString();


        if (TextUtils.isEmpty(setUserName))
        {
            Toast.makeText(this, "Please enter Username to continue", Toast.LENGTH_SHORT).show();
        }
        if (TextUtils.isEmpty(setStatus))
        {
            Toast.makeText(this, "Please enter Status to continue", Toast.LENGTH_SHORT).show();
        }
        else
        {
            HashMap<String, String> profileMap = new HashMap<>();
            profileMap.put("uid", currentUID);
            profileMap.put("name", setUserName);
            profileMap.put("status", setStatus);

            rootref.child("Users").child(currentUID).setValue(profileMap)
                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful())
                            {
                                Toast.makeText(SettingsActivity.this, "Profile updated successfully", Toast.LENGTH_SHORT).show();
                                askUserToUseApp();
                            }

                            else
                            {
                                String messegess = task.getException().toString();
                                Toast.makeText(SettingsActivity.this, "Error : " + messegess, Toast.LENGTH_SHORT).show();
                            }
                        }
                    });

        }
    }

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



        FirebaseAuth mAuth = FirebaseAuth.getInstance();
        currentUID = Objects.requireNonNull(mAuth.getCurrentUser()).getUid();
        rootref = FirebaseDatabase.getInstance().getReference();
        ProfileImagesRef = FirebaseStorage.getInstance().getReference().child("Profile images");


        initializeFields();

        Updatebutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updateSettings();
            }
        });

        getUserInfo();



        profileImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                CropImage.activity()
                        .setGuidelines(CropImageView.Guidelines.ON)
                        .start(SettingsActivity.this);
            }
        });
        updateUserStatus("online");

    }

    private void initializeFields()
    {
        Updatebutton = findViewById(R.id.update_settings);
        Username = findViewById(R.id.set_user_name);
        Status = findViewById(R.id.set_status);
        profileImage = findViewById(R.id.set_profile_image);

    }


    private void askUserToUseApp() {


        Intent loginIntent = new Intent(SettingsActivity.this, MainActivity.class);
        loginIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(loginIntent);
        finish();

    }

    @Override
    protected void onStop()
    {
        super.onStop();



        updateUserStatus("offline");



    }

    @Override
    protected void onDestroy()
    {
        super.onDestroy();


        updateUserStatus("offline");



    }


    private void updateUserStatus(String state)
    {
        Calendar calForDate =  Calendar.getInstance();
        @SuppressLint("SimpleDateFormat") SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMM, yyyy");
        String  currentDate =  simpleDateFormat.format(calForDate.getTime());

        Calendar calForTime =  Calendar.getInstance();
        @SuppressLint("SimpleDateFormat") SimpleDateFormat simpleTimeFormat = new SimpleDateFormat("hh:mm:ss a");
        String  currentTime =  simpleTimeFormat.format(calForTime.getTime());

        HashMap<String, Object> onlineState = new HashMap<>();
        onlineState.put("time", currentTime);
        onlineState.put("date", currentDate);
        onlineState.put("state", state);

        rootref.child("Users").child(currentUID).child("userState")
                .updateChildren(onlineState);


    }


}

1 个答案:

答案 0 :(得分:0)

可能不是相关答案,但是无论何时使用任何Firebase或Firestore 事件尝试传递“ this(“活动上下文”)“作为第一个参数,它将管理 活动生命周期,当您的应用程序在后台运行时,它将删除您的侦听器。