2017-04-15 3 views
-1

これは私のMainActivity他の関数は実際にはbuttonUploadを除いて動作します。私がbuttonUploadを押すと、アプリケーションは残念ながら停止します。onActivity()で渡されたphotoURIがnullと表示されるのはなぜですか?私は間違って何をしています

洞察力のある人は?ひどく必要です。

public class MainActivity extends AppCompatActivity { 

private TrackGPS gps; 
private Button buttonUpload; 
private EditText editTextMessage; 
double longitude; 
double latitude; 

private StorageReference storage; 
private static final int CAMERA_REQUEST_CODE = 1; 
private ProgressDialog progressDialog; 

String mCurrentPhotoPath; 

private File createImageFile() throws IOException { 
    // Create an image file name 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String imageFileName = "JPEG_" + timeStamp + "_"; 
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); 
    File image = File.createTempFile(
      imageFileName, /* prefix */ 
      ".jpg",   /* suffix */ 
      storageDir  /* directory */ 
    ); 

    // Save a file: path for use with ACTION_VIEW intents 
    mCurrentPhotoPath = image.getAbsolutePath(); 
    return image; 
} 

private void dispatchTakePictureIntent() { 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    // Ensure that there's a camera activity to handle the intent 
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
     // Create the File where the photo should go 
     File photoFile = null; 
     try { 
      photoFile = createImageFile(); 
     } catch (IOException ex) { 
      // Error occurred while creating the File... 
     } 
     // Continue only if the File was successfully created 
     if (photoFile != null) { 
      Uri photoURI = FileProvider.getUriForFile(this, 
        "com.example.android.fileprovider", 
        photoFile); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
      startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE); 
     } 
    } 
} 

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

    buttonUpload = (Button) findViewById(R.id.buttonUpload); 
    editTextMessage = (EditText) findViewById(R.id.editTextMessage); 
    storage = FirebaseStorage.getInstance().getReference(); 
    progressDialog = new ProgressDialog(this); 


    buttonUpload.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      dispatchTakePictureIntent(); 

     } 
    }); 
} 

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

    if(requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK){ 
     progressDialog.setMessage("Uploading..."); 
     progressDialog.show(); 
     Uri uri = data.getData(); 

     StorageReference filepath = storage.child("Photos").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(); 
       progressDialog.dismiss(); 
      } 
     }).addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception e) { 
       Toast.makeText(MainActivity.this, "Upload Failed!", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
} 


public void distressMessage(View view){ 
    gps = new TrackGPS(MainActivity.this); 
    String message = ""; 

    if(view.getId() == R.id.fab){ 
     message = editTextMessage.getText().toString(); 
    }else { 
     Button sender = (Button) view; 
     message = sender.getText().toString(); 
    } 


    SmsManager smsManager = SmsManager.getDefault(); 

    if(gps.canGetLocation()){ 


     longitude = gps.getLongitude(); 
     latitude = gps.getLatitude(); 

     smsManager.sendTextMessage("+639972301925", null, message + "\n\nLongitude:"+Double.toString(longitude)+"\nLatitude:"+Double.toString(latitude), null, null); 
     Toast.makeText(getApplicationContext(),"Longitude:"+Double.toString(longitude)+"\nLatitude:"+Double.toString(latitude),Toast.LENGTH_SHORT).show(); 
    } 
    else 
    { 

     gps.showSettingsAlert(); 
    } 


} 

}

そして、ここでは、これが問題である私のLogcat

           java.lang.RuntimeException: Unable to resume activity {com.example.niki.currentlocation/com.example.niki.currentlocation.MainActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.example.niki.currentlocation/com.example.niki.currentlocation.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference 
               at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2986) 
               at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3017) 
               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392) 
               at android.app.ActivityThread.access$800(ActivityThread.java:151) 
               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
               at android.os.Handler.dispatchMessage(Handler.java:102) 
               at android.os.Looper.loop(Looper.java:135) 
               at android.app.ActivityThread.main(ActivityThread.java:5254) 
               at java.lang.reflect.Method.invoke(Native Method) 
               at java.lang.reflect.Method.invoke(Method.java:372) 
               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
               Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.example.niki.currentlocation/com.example.niki.currentlocation.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference 
               at android.app.ActivityThread.deliverResults(ActivityThread.java:3574) 
               at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2972) 
               at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3017)  
               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)  
               at android.app.ActivityThread.access$800(ActivityThread.java:151)  
               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
               at android.os.Handler.dispatchMessage(Handler.java:102)  
               at android.os.Looper.loop(Looper.java:135)  
               at android.app.ActivityThread.main(ActivityThread.java:5254)  
               at java.lang.reflect.Method.invoke(Native Method)  
               at java.lang.reflect.Method.invoke(Method.java:372)  
               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)  
               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  
               Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference 
               at com.example.niki.currentlocation.MainActivity.onActivityResult(MainActivity.java:101) 
               at android.app.Activity.dispatchActivityResult(Activity.java:6192) 
               at android.app.ActivityThread.deliverResults(ActivityThread.java:3570) 
               at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2972)  
               at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3017)  
               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)  
               at android.app.ActivityThread.access$800(ActivityThread.java:151)  
               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
               at android.os.Handler.dispatchMessage(Handler.java:102)  
               at android.os.Looper.loop(Looper.java:135)  
               at android.app.ActivityThread.main(ActivityThread.java:5254)  
               at java.lang.reflect.Method.invoke(Native Method)  
               at java.lang.reflect.Method.invoke(Method.java:372)  
               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)  
               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

である理由 そしてまた私のlogcatは、Android 2.3.1スタジオで作業していませんがIDKの。助けてください

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.example.niki.currentlocation/com.example.niki.currentlocation.MainActivity}: java.lang.NullPointerException: 
Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference 
+0

'public void onClick(View view){'の上にある '@ Override'を削除します。最初に 'onClick' XML属性を使用していたはずです。それはクリーナーです –

+0

あなたはカメラの権限が不足している可能性があります。マシュマロのために、あなたは権限を尋ねる必要があり、以下のデバイスについては、マニフェストで宣言する必要があります。 –

+0

投稿者logcatエラー... – rafsanahmad007

答えて

0

失敗ResultInfo提供結果{ヌル=、= 1、結果= -1、データを要求= nullを}

あなたがする何かにgetData()しようとしています存在しない。

はその後、中にいくつかのキャッチを入れて、このコードはテントを取得していないそうでない場合は理由を把握あなたは

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

    if(requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK 
      && data != null) { 

     progressDialog.setMessage("Uploading..."); 
     progressDialog.show(); 
     Uri uri = data.getData(); 

     if (uri != null) { 
      StorageReference filepath = storage.child("Photos").child(uri.getLastPathSegment()); 
      filepath.putFile(uri).addOnSuccessListener 

予想たとえば、あなたがここにあなたが無視していることを3ヶ所の合計を持っていますエラー...

if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 

    File photoFile = null; 
    try { 
     photoFile = createImageFile(); 
    } catch (IOException ex) { 
     // #1 Error 
     ex.printStackTrace(); 
    } 

    if (photoFile != null) { 
     Uri photoURI = FileProvider.getUriForFile(this, 
       "com.example.android.fileprovider", 
       photoFile); 
     takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
     startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE); 
    } else {// No else ... #2 error 
     Log.e("Error", "something bad happened"); 
    } 

} else { // No else... #3 error 
    Log.e("Error", "something bad happened"); 
} 
+0

問題なく動作しますが、問題はありませんが、写真を撮った後に進捗ダイアログが表示されなくても、ボタンは何もしません。私はfirebaseのストレージに保存したいと思います。多分私はここに速くなるよ – DarknessNight

+0

私が言ったように。これは、アプリがクラッシュするのを止めるだけです。すべてが魔法のように動作するわけではありません –

関連する問題