2017-02-17 9 views
0

Detailsクラスのオブジェクトを作成した後、firebaseにアップロードするとnull値を持つ子が作成されます。名前=「」コスト=「」場所=「行方不明」ジャンル=「」電話=「」画像=「」null値を持つオブジェクトが作成されます

コード:

package com.example.amitroshan.dairyvilla; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.support.annotation.NonNull; 
import android.support.v4.app.Fragment; 
import android.text.format.DateUtils; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageButton; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.firebase.ui.database.FirebaseListAdapter; 
import com.google.android.gms.tasks.OnCompleteListener; 
import com.google.android.gms.tasks.Task; 
import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 
import com.google.firebase.storage.FirebaseStorage; 
import com.google.firebase.storage.StorageReference; 
import com.google.firebase.storage.UploadTask; 
import com.squareup.picasso.Picasso; 

import java.io.ByteArrayOutputStream; 
import java.util.Random; 

public class Feed extends Fragment { 

    DatabaseReference mRef = FirebaseDatabase.getInstance().getReference().child("Books"); 
    static final int REQUEST_IMAGE_CAPTURE = 1; 

    private EditText upload_name, upload_location, upload_cost, upload_genre, upload_phone; 
    private Button send; 
    private ImageButton upload; 
    private String upload_url; 

    public Feed() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) { 
      Bundle extras = data.getExtras(); 
      Bitmap imageBitmap = (Bitmap) extras.get("data"); 
      upload.setImageBitmap(imageBitmap); 
      //Uri filePath = data.getData(); 

      FirebaseStorage storage = FirebaseStorage.getInstance(); 
      StorageReference storageRef = storage.getReferenceFromUrl("gs://dairyvilla-3623a.appspot.com/"); 
      StorageReference mountainImagesRef = storageRef.child("images/" + new Random(10000) + ".jpg"); 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      imageBitmap.compress(Bitmap.CompressFormat.JPEG, 20, baos); 
      byte[] mdata = baos.toByteArray(); 
      UploadTask uploadTask = mountainImagesRef.putBytes(mdata); 
      uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) { 
        upload_url = task.getResult().getDownloadUrl().toString(); 
        //pro.dismiss(); 
       } 
      }); 
     } 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View v = inflater.inflate(R.layout.fragment_feed, container, false); 

     upload_name = (EditText) v.findViewById(R.id.upload_name); 
     upload_location = (EditText) v.findViewById(R.id.upload_location); 
     upload_cost = (EditText) v.findViewById(R.id.upload_cost); 
     upload_genre = (EditText) v.findViewById(R.id.upload_genre); 
     upload_phone = (EditText) v.findViewById(R.id.upload_phone); 
     upload = (ImageButton) v.findViewById(R.id.imageButton); 
     send = (Button) v.findViewById(R.id.upload_button); 


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

       Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); 

      } 
     }); 

     final Details d = new Details(upload_name.getText().toString(),upload_location.getText().toString(), 
       upload_cost.getText().toString(),upload_genre.getText().toString(), 
       upload_url,upload_phone.getText().toString()); 

     send.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mRef.child(mRef.push().getKey()).setValue(d); 
       Toast.makeText(getContext(), "Uploading Complete..", Toast.LENGTH_SHORT).show(); 
      } 
     }); 


     return v; 
    } 

} 

class Details{ 

    String name, location, cost, genre, phone, image; 

    public Details(String name, String location, String cost, String genre, String image, String phone) { 
     this.name = name; 
     this.location = location; 
     this.cost = cost; 
     this.genre = genre; 
     this.image = image; 
     this.phone = phone; 
    } 

    public String getPhone() { 
     return phone; 
    } 

    public void setPhone(String phone) { 
     this.phone = phone; 
    } 

    public String getImage() { 
     return image; 
    } 

    public void setImage(String image) { 
     this.image = image; 
    } 

    public String getGenre() { 
     return genre; 
    } 

    public void setGenre(String genre) { 
     this.genre = genre; 
    } 

    public String getCost() { 
     return cost; 
    } 

    public void setCost(String cost) { 
     this.cost = cost; 
    } 

    public String getLocation() { 
     return location; 
    } 

    public void setLocation(String location) { 
     this.location = location; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

答えて

1

あなたがfirebaseデータモデルクラスにオブジェクトをプッシュしたい場合空のコンストラクタが必要です。

ちょうどこの

mRef.push().setValue(d); 

アップデート使用

public Details() {} 

、代わりにこの

mRef.child(mRef.push().getKey()).setValue(d); 

のこの場合は:あなたは、あなたのすべての変数を使用してオブジェクトを作成

をonCr eateView-メソッド。この時点で、テキストビューはすべて空です。したがって、空のStringを返します。 クリックリスナー内

final Details d = new Details(upload_name.getText().toString(),upload_location.getText().toString(), 
      upload_cost.getText().toString(),upload_genre.getText().toString(), 
      upload_url,upload_phone.getText().toString()); 

を動かすようにしてください。あなたはクラスで、これを使用して、すべての値がプッシュするよりも、空のコンストラクタを作成する必要がありますFirebaseデータベース内のオブジェクトを押すため

+0

私はデフォルトのコンストラクタを試してみましたが、そのは動作していないが... –

+0

私は更新私の答え – Oliver

+0

ありがとう@オリーブ。今それは動作します –

1

clientName.push().setValue(n); 
+0

空のコンストラクタを作成することは役立っていません –

関連する問題