마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이스 스튜디오에서 파이어베이스 사진 업로드

0 추천

안녕하세요

앱 개발중에 파이어베이스로 사진 보내는 부분에서 막혔는데

질문할곳을 찾다가 이곳으로 왔습니다

고수님들 도와주세요..ㅠㅠ

다운로드 링크도 잘 따와지고 따로 전송하면 보내는 지는데

(제가 정의한 클래스 객체인)Post 객체에 담아서 파이어베이스에 넣으면 다운로드 링크가 파이어베이스게 들어가지를 않습니다

 

    private void uploadFile(Post post) {
        //업로드할 파일이 있으면 수행

        if (filePath != null) {
//            //업로드 진행 Dialog 보이기
//            final ProgressDialog progressDialog = new ProgressDialog(this);
//            progressDialog.setTitle("업로드중...");
//            progressDialog.show();

            //storage
            FirebaseStorage storage = FirebaseStorage.getInstance();

            //Unique한 파일명을 만들자.
            SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMHH_mmss");
            Date now = new Date();
            String filename = formatter.format(now) + ".png";
            //storage 주소와 폴더 파일명을 지정해 준다.
            StorageReference storageRef = storage.getReferenceFromUrl("gs://application-4bc30.appspot.com").child("Post/" + filename);

            storageRef.putFile(filePath).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    @SuppressWarnings("VisibleForTests") Uri downloadUrl = taskSnapshot.getDownloadUrl();
                    downUrl[0] = downloadUrl.toString();

                    post.setUrl(downUrl[0]);
                }
            });

이 함수에서 다운로드 링크를 따옵니다 다운링크는 전역변수로 설정했습니다
 

Button writeBtn = (Button) findViewById(R.id.doWrite);
        writeBtn.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                String text = mInput.getText().toString();
                if(TextUtils.isEmpty(text)){
                    return;
                }
                Post post = new Post();
                post.setText(text);
                post.setWriterId(getMyId());
                post.setWriteTime(System.currentTimeMillis());
                post.setProvince(province);
                post.setCity(city);
                post.setClassification(classification);
                post.setAnimal(animal);
                uploadFile(post);
//                post.setUrl(downUrl[0]);
                new Firebase(PostActivity.FIREBASE_POST_URL).push().setValue(post);
                setResult(RESULT_OK);
                finish();
            }
        });



그 후 버튼을 클릭했을 때 post 객체 생성 후 다른 값들을 세팅하고, uploadFile 메소드로 post 객체의 url 값을 설정해주려고 하는데 자꾸 세팅이 되지 않습니다ㅜ

post 객체를 전역변수로 미리 선언 후 해봐도 되지가 않고.. 막막해서 이렇게 질문을 올립니다

도와주시면 정말 감사드립니다ㅠㅠㅠㅠ

익명사용자 님이 2017년 12월 7일 질문

1개의 답변

0 추천

저도 잘은 모르겠지만 대충..

위 코드대로 하면 업로드 이미지주소를 가져오기전에 파이어베이스 업로드를 시도할것 같네요..

 

@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
    @SuppressWarnings("VisibleForTests") Uri downloadUrl = taskSnapshot.getDownloadUrl();
    downUrl[0] = downloadUrl.toString();
 
    post.setUrl(downUrl[0]);
 }

업로드 세팅부터 하지 마시고 바로 위 함수를 호출할수 있게 해서

이 함수에서 성공적으로 이미지주소를 가져왔을때 AsyncTask 등의 비동기 통신으로 Firebase에 업로드하는 순서로 한번 시도해보세요..

 

 

캬옹이 (37,920 포인트) 님이 2017년 12월 7일 답변
...