2017-09-19 14 views
0

私のタイトルでは、アンドロイドアプリケーションでデータベースを使用する方法を学びたいと言いました。だから私はギャラリーから写真を撮ってイメージをfirebaseデータベースにアップロードするサンプルアプリケーションを作ることを考えました。しかし、ギャラリーから写真を選択すると、自分のアプリケーションが崩壊します。ここで ギャラリーから写真を選択し、ファイアベースデータベースにアップロードするアン​​ドロイドアプリケーション

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.trump.demo_cameraapp"> 

    <uses-permission android:name="android.permission.CAMERA"/> 

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.INTERNET" /> 


    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <provider 
      android:name="android.support.v4.content.FileProvider" 
      android:authorities="${applicationId}" 
      android:exported="false" 
      android:grantUriPermissions="true"> 

      <meta-data 
       android:name="android.support.FILE_PROVIDER_PATHS" 
       android:resource="@xml/file_paths" /> 
     </provider> 
    </application> 


</manifest> 

は私のレイアウトファイル、activity_main.xmlである:ここで

は私のアンドロイドマニフェストファイルである

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_width = "match_parent" 
    android:gravity="center" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     android:layout_weight="2"> 

    </ImageView> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Choose Photo!" 
     android:textColor="@color/Blue" 
     android:id="@+id/chooseButton"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text = "Upload Photo!" 
     android:textColor="@color/colorPrimaryDark" 
     android:id="@+id/uploadButton"/> 

</LinearLayout> 

私は

package com.example.trump.demo_cameraapp; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.net.Uri; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.support.v4.content.FileProvider; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.Toast; 

import com.google.android.gms.tasks.OnSuccessListener; 
import com.google.firebase.storage.FirebaseStorage; 
import com.google.firebase.storage.StorageReference; 
import com.google.firebase.storage.UploadTask; 

import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.IOException; 


public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    private static final int PICK_IMAGE_REQUEST = 1; 
    int TAKE_PHOTO_CODE = 0; 
    public static int count = 0; 
    private ImageView mImageView; 
    private StorageReference storage; 
    private ProgressDialog mProgressDialog; 
    public static final int GALLERY_INTENT = 2; 

    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Here, we are making a folder named picFolder to store 
     // pics taken by the camera using this application. 


     mImageView = (ImageView) findViewById(R.id.imageView1); 


     Button choose = (Button) findViewById(R.id.chooseButton); 
     choose.setOnClickListener(this); 

     Button upload = (Button) findViewById(R.id.uploadButton); 
     upload.setOnClickListener(this); 

    } 

    private void showFileChooser(){ 
     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     startActivityForResult(Intent.createChooser(intent,"Select an image"),PICK_IMAGE_REQUEST); 
    } 



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

     if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data!=null && data.getData()!=null) { 
      Log.d("ResultOK", String.valueOf(RESULT_OK)); 
      Log.d("CameraDemo", "Pic saved"); 
      mProgressDialog.setMessage("Uploading..."); 
      mProgressDialog.show(); 
      Uri uri = data.getData(); 

      try { 
       Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 
       mImageView.setImageBitmap(bitmap); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      StorageReference filepath = storage.child("images").child(uri.getLastPathSegment()); 
      filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>(){ 

       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
        Toast.makeText(MainActivity.this, "Upload Successful", Toast.LENGTH_SHORT).show(); 
        mProgressDialog.dismiss(); 
       } 
      }); 

     } 
    } 

    @Override 
    public void onClick(View view) { 
     if(view.getId() == R.id.chooseButton){ 
      showFileChooser(); 


     }else if(view.getId() == R.id.uploadButton){ 


     } 

    } 
} 
MainActivity

に次のコード行を持っています

私はまだfirebaseデータベースに画像をアップロードするコードを書いていません。私が今やろうとしているのは、私のアプリのイメージビューにギャラリーから選んだイメージを表示することだけです。しかし、前に言ったように、今は何も表示していないし、ギャラリーから写真を選ぶとすぐに崩壊する。この問題に関するいかなる助けも非常に高く評価されます。

答えて

1

あなたの画像ピッカーコードに問題はないと思うが、問題は、mProgressDialogをonCreate()メソッドで初期化せずに使用していることだ。ですから、mImageViewの初期化直後にonCreate()メソッドでmProgressDialogオブジェクトを初期化することをお勧めします。そして、あなたのアプリケーションが今では崩壊しないことを願っています。

+0

申し訳ありませんが、何も変更されませんでした。 – Ufomammut

+0

問題についてさらに調査できるように、取得しているエラーメッセージ(クラッシュメッセージ)を表示してください。 –

関連する問題