Guest User

Untitled

a guest
Feb 18th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.58 KB | None | 0 0
  1. public class MainActivity extends AppCompatActivity {
  2. private FirebaseAnalytics mFirebaseAnalytics;
  3. private FirebaseAuth mFirebaseAuth;
  4. private DatabaseReference mPicDataReference;
  5. private FirebaseStorage mFirebaseStorage;
  6. private Button button;
  7. private ImageView imageView;
  8. private ProgressBar progressBar;
  9. private GridView gridView;
  10. private ArrayList<PictureItem> pictureItems;
  11.  
  12.  
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. //連結畫面
  18. button = findViewById(R.id.button2);
  19. imageView = findViewById(R.id.imageView);
  20. progressBar = findViewById(R.id.progressBar2);
  21. progressBar.setVisibility(View.INVISIBLE);//ProgressBar設為不可見
  22. gridView = findViewById(R.id.gridView);
  23. pictureItems = new ArrayList<>();
  24.  
  25. // Obtain the FirebaseAnalytics instance.
  26. mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
  27. mFirebaseAuth = FirebaseAuth.getInstance();
  28. mPicDataReference = FirebaseDatabase.getInstance().getReference().child("pic");
  29. mFirebaseStorage = FirebaseStorage.getInstance();
  30. //匿名登入
  31. mFirebaseAuth.signInAnonymously();
  32. //取得firebase database 的照片檔案路徑後,顯示擴充到gridView
  33. mPicDataReference.addChildEventListener(new ChildEventListener() {
  34. @Override
  35. public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
  36. String path = dataSnapshot.child("path").getValue().toString();
  37. PictureItem pictureItem = new PictureItem(path);
  38. pictureItems.add(pictureItem);
  39. MyPictureListAdapter myPictureListAdapter = new MyPictureListAdapter();
  40. myPictureListAdapter.pictureItems = pictureItems;
  41. gridView.setAdapter(myPictureListAdapter);
  42. }
  43.  
  44. @Override
  45. public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
  46.  
  47. }
  48.  
  49. @Override
  50. public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
  51.  
  52. }
  53.  
  54. @Override
  55. public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
  56.  
  57. }
  58.  
  59. @Override
  60. public void onCancelled(@NonNull DatabaseError databaseError) {
  61.  
  62. }
  63. });
  64. //擷取照片按鈕監聽器
  65. button.setOnClickListener(new View.OnClickListener() {
  66. @Override
  67. public void onClick(View v) {
  68. Intent intent = new Intent();
  69. intent.setType("image/*");//開啟Pictures畫面Type設定為image
  70. intent.setAction(Intent.ACTION_GET_CONTENT);//使用Intent.ACTION_GET_CONTENT這個Action
  71. startActivityForResult(intent, 0);//取得照片後返回此畫面
  72. }
  73. });
  74. }
  75.  
  76. @Override
  77. protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  78. //當使用者按下確定後
  79. if(resultCode == RESULT_OK){
  80. //取得圖檔的路徑位置
  81.  
  82. Uri uri = data.getData();
  83. //抽象資料的接口
  84. ContentResolver cr = this.getContentResolver();
  85. try {//由抽象資料接口轉換圖檔路徑為Bitmap
  86.  
  87. final Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));
  88. //使用UUID為上傳檔名
  89. String fileName = UUID.randomUUID().toString() + ".jpg";
  90. //壓縮bitmap到ByteArrayOutputStream baos
  91. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  92. bitmap.compress(Bitmap.CompressFormat.JPEG, 50, baos);
  93. //設定bitmap到imageView
  94. imageView.setImageBitmap(bitmap);
  95. //帶有bitmap的ByteArrayOutputStream baos 轉成byte[]
  96. byte[] imageData = baos.toByteArray();
  97. //建立上傳圖片的metadata
  98. StorageMetadata storageMetadata = new StorageMetadata
  99. .Builder().setCustomMetadata("MyKey", "MyValue").build();
  100. //參考到firebase storage的/pic/uid/fileName位址
  101. final StorageReference mountainsRef = mFirebaseStorage.getReference()
  102. .child("pic")
  103. .child(mFirebaseAuth.getCurrentUser().getUid())
  104. .child(fileName);
  105. //用byte[]上傳圖檔到firebase storage
  106. UploadTask uploadTask = mountainsRef.putBytes(imageData, storageMetadata);
  107. //把上傳進度條設為顯示
  108. progressBar.setVisibility(View.VISIBLE);
  109. //上傳圖片到firebase storage的監聽器設定
  110. uploadTask.addOnFailureListener(new OnFailureListener() {
  111. @Override//上傳失敗執行
  112. public void onFailure(@NonNull Exception e) {
  113. Toast.makeText(MainActivity.this, "上傳失敗", Toast.LENGTH_LONG).show();
  114. progressBar.setVisibility(View.INVISIBLE);
  115. }
  116. }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
  117. @Override//上傳成功執行
  118. public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
  119. Toast.makeText(MainActivity.this, "上傳成功", Toast.LENGTH_LONG).show();
  120. //把上傳此照片的uid、下載路徑、檔案路徑記錄到Firebase Database/pic/自動key/
  121. HashMap<String, String> picData = new HashMap<>();
  122. picData.put("uid", mFirebaseAuth.getCurrentUser().getUid());
  123. picData.put("link", mountainsRef.getDownloadUrl().toString());
  124. picData.put("path", mountainsRef.getPath());
  125. mPicDataReference.push().setValue(picData);
  126. //隱藏上傳進度條
  127. progressBar.setVisibility(View.INVISIBLE);
  128. }
  129. }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
  130. @Override//正在上傳圖片時顯示進度bar
  131. public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
  132. int progressPercentage = (int) ((taskSnapshot.getBytesTransferred() * 100)
  133. / (taskSnapshot.getTotalByteCount()));
  134. Log.d("uploading", progressPercentage+"%");
  135. progressBar.setProgress(progressPercentage);
  136. }
  137. });
  138.  
  139.  
  140. } catch (FileNotFoundException e) {
  141. e.printStackTrace();
  142. }
  143. }
  144. super.onActivityResult(requestCode, resultCode, data);
  145. }
  146. //Gird View 用的 Adapter
  147. private class MyPictureListAdapter extends BaseAdapter {
  148. ArrayList<PictureItem> pictureItems;
  149.  
  150. @Override
  151. public int getCount() {
  152. return pictureItems.size();
  153. }
  154.  
  155. @Override
  156. public PictureItem getItem(int position) {
  157. return pictureItems.get(position);
  158. }
  159.  
  160. @Override
  161. public long getItemId(int position) {
  162. return position;
  163. }
  164.  
  165. @Override
  166. public View getView(int position, View convertView, ViewGroup parent) {
  167. LayoutInflater mInflater = getLayoutInflater();
  168. View myView = mInflater.inflate(R.layout.image_grid, null);
  169. final PictureItem pictureItem = pictureItems.get(position);
  170. ImageView imageView = (ImageView)myView.findViewById(R.id.imageView2);
  171. //使用 FirebaseUI 下載圖片
  172. Glide.with(MainActivity.this)
  173. .load(mFirebaseStorage.getReference().child(pictureItem.imagePath))
  174. .into(imageView);
  175. return myView;
  176. }
  177. }
  178.  
  179.  
  180. }
Add Comment
Please, Sign In to add comment