2017-06-06 16 views
-3

データはFireBaseで更新されていません更新中ではなく、更新中ではありません(Android App) 1つの画面で保持しますギャラリーから選択する1つの画像ボタン残りの2つは一つは、タイトルフィールドの編集テキストのボタンであり、もう一つは、ポストボタンをクリックした後、それはタイトル、説明フィールドと一緒に、それが継続的にデータはfirebase(Android)で更新されていません

import android.app.ProgressDialog; 
import android.content.Intent; 
import android.net.Uri; 
import android.support.annotation.NonNull; 
import android.support.v7.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.ImageButton; 

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.auth.FirebaseUser; 
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; 

public class PostActivity extends AppCompatActivity { 
    private ImageButton mSelectImage; 
    private EditText mPostTitle; 
    private EditText mPostDesc; 
    private Button mSubmitBtn; 
    private Uri mImageUri = null; 
    private StorageReference mStorage; 
    private ProgressDialog mProgress; 
    private DatabaseReference mDatabase; 
    private FirebaseAuth mAuth; 
    private FirebaseUser mCurrentUser; 
    private DatabaseReference mDatabaseUser; 

    private static final int GALLERY_REQUEST = 1; 

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

     mStorage = FirebaseStorage.getInstance().getReference(); 
     mDatabase = FirebaseDatabase.getInstance().getReference().child("Blog"); 

     mSelectImage = (ImageButton) findViewById(R.id.imageSelect); 

     mPostTitle = (EditText) findViewById(R.id.titleField); 
     mPostDesc = (EditText) findViewById(R.id.descField); 
     mSubmitBtn = (Button) findViewById(R.id.submitBtn); 
     mProgress = new ProgressDialog(this); 

     mAuth = FirebaseAuth.getInstance(); 
     mCurrentUser = mAuth.getCurrentUser(); 
     mDatabaseUser = FirebaseDatabase.getInstance().getReference().child("Users").child(mCurrentUser.getUid()); 

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

       Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT); 
       galleryIntent.setType("image/*"); 
       startActivityForResult(galleryIntent, GALLERY_REQUEST); 
      } 
     }); 

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

    private void startPosting() { 

     //Get values from title and description 
     mProgress.setMessage("Uploading to DB..."); 

     final String title_val = mPostTitle.getText().toString().trim(); 
     final String desc_val = mPostDesc.getText().toString().trim(); 

     if (!TextUtils.isEmpty(title_val) && !TextUtils.isEmpty(desc_val) && mImageUri != null) { 
      //start uploading to DB 
      //authenticate before letting upload(not in this app) 
      mProgress.show(); 

      StorageReference filePath = mStorage.child("Blog_Images").child(mImageUri.getLastPathSegment()); 

      filePath.putFile(mImageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       @SuppressWarnings("VisibleForTests") 
       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 

        final Uri downloadUrl = taskSnapshot.getDownloadUrl(); 

        final DatabaseReference newPost = mDatabase.push();//push creates unique random ID(no overwriting) 

        if(mDatabaseUser != null) { 
         mDatabaseUser.addValueEventListener(new ValueEventListener() { 
          @Override 
          public void onDataChange(DataSnapshot dataSnapshot) { 

           newPost.child("title").setValue(title_val); 
           newPost.child("desc").setValue(desc_val); 
           newPost.child("image").setValue(downloadUrl.toString()); 
           newPost.child("uid").setValue(mCurrentUser.getUid()); 
           newPost.child("username").setValue(dataSnapshot.child("name").getValue()).addOnCompleteListener(new OnCompleteListener<Void>() { 
            @Override 
            public void onComplete(@NonNull Task<Void> task) { 
             if (task.isSuccessful()) { 

              startActivity(new Intent(PostActivity.this, MainActivity.class)); 
             } 
            } 
           }); 

          } 

          @Override 
          public void onCancelled(DatabaseError databaseError) { 

          } 
         }); 
        } 

        mProgress.dismiss(); 

        startActivity(new Intent(PostActivity.this, MainActivity.class)); 

       } 
      }); 

     } 
    } 

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

     if (requestCode == GALLERY_REQUEST && resultCode == RESULT_OK) { 

      mImageUri = data.getData(); 
      mSelectImage.setImageURI(mImageUri); 

     } 
    } 
}  
+0

こんにちは、あなたの質問に詳細を追加して、人々があなたの答えを見つけ出すのに役立つようにしてください。また、今後の質問については、[最小限の、完全で検証可能なサンプルの作成方法](https://stackoverflow.com/help/mcve)を参照してください。 – DarkCygnus

+0

一度それをチェック@GrayCygnus –

答えて

0

まずif(mDatabaseUser != null) {..}を削除掲示アウトを使用したロード・ポストをクリックした後に画像を投稿する必要があります説明フィールドでありますmDatabaseUser.addValueEventListener(new ValueEventListener() {..}の代わりに、mDatabaseUser.child(mCurrentUser.getUid()).addValueEventListener(new ValueEventListener() {...}を削除した後に.child(mCurrentUser.getUid())をから削除してくださいがコードの先頭に表示されます。

また、第2のstartActivity(new Intent(PostActivity.this, MainActivity.class));も必要ありません。

関連する問題