Create -Android studio 出现错误
我不知道为什么我会收到错误。我是编程新手。这是我在 logcat 和 java 代码中的错误。 147 线上有错误,但我没有发现任何可疑的东西。请有人告诉我问题是什么,因为我是 android studio 和 java 语言的新手。
Error logcat:
2022-03-27 09:47:26.285 14374-14374/com.example.journeyjournalfinal E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.journeyjournalfinal, PID: 14374
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.journeyjournalfinal/com.example.journeyjournalfinal.AddItemJournal}: android.view.InflateException: Binary XML file line #7 in com.example.journeyjournalfinal:layout/map_dialog: Binary XML file line #7 in com.example.journeyjournalfinal:layout/map_dialog: Error inflating class androidx.fragment.app.FragmentContainerView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: android.view.InflateException: Binary XML file line #7 in com.example.journeyjournalfinal:layout/map_dialog: Binary XML file line #7 in com.example.journeyjournalfinal:layout/map_dialog: Error inflating class androidx.fragment.app.FragmentContainerView
Caused by: android.view.InflateException: Binary XML file line #7 in com.example.journeyjournalfinal:layout/map_dialog: Error inflating class androidx.fragment.app.FragmentContainerView
Caused by: java.lang.RuntimeException: API key not found. Check that <meta-data android:name="com.google.android.geo.API_KEY" android:value="your API key"/> is in the <application> element of AndroidManifest.xml
at com.google.maps.api.android.lib6.drd.p.a(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):6)
at com.google.maps.api.android.lib6.auth.f.i(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):1)
at com.google.maps.api.android.lib6.impl.l.a(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):24)
at com.google.android.gms.maps.internal.CreatorImpl.b(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):7)
at com.google.android.gms.maps.internal.CreatorImpl.logInitialization(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):3)
at com.google.android.gms.maps.internal.g.aX(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):3)
at dz.onTransact(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):4)
at android.os.Binder.transact(Binder.java:1043)
at com.google.android.gms.internal.maps.zza.zzc(com.google.android.gms:play-services-maps@@18.0.0:2)
at com.google.android.gms.maps.internal.zze.zzl(com.google.android.gms:play-services-maps@@18.0.0:4)
at com.google.android.gms.maps.MapsInitializer.initialize(com.google.android.gms:play-services-maps@@18.0.0:12)
at com.google.android.gms.maps.MapsInitializer.initialize(com.google.android.gms:play-services-maps@@18.0.0:1)
at com.google.android.gms.maps.zzav.zzc(com.google.android.gms:play-services-maps@@18.0.0:2)
at com.google.android.gms.maps.zzav.createDelegate(com.google.android.gms:play-services-maps@@18.0.0:1)
at com.google.android.gms.dynamic.DeferredLifecycleHelper.zaf(com.google.android.gms:play-services-base@@18.0.1:6)
at com.google.android.gms.dynamic.DeferredLifecycleHelper.onCreate(com.google.android.gms:play-services-base@@18.0.1:1)
at com.google.android.gms.maps.SupportMapFragment.onCreate(com.google.android.gms:play-services-maps@@18.0.0:5)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:2949)
2022-03-27 09:47:26.288 14374-14374/com.example.journeyjournalfinal E/AndroidRuntime: at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:475)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:278)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2106)
at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1971)
at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:311)
at androidx.fragment.app.FragmentContainerView.<init>(FragmentContainerView.java:180)
at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:52)
at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135)
at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:319)
at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:298)
at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1067)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:995)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:959)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1121)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082)
at android.view.LayoutInflater.inflate(LayoutInflater.java:680)
at android.view.LayoutInflater.inflate(LayoutInflater.java:532)
at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:455)
at android.app.Dialog.setContentView(Dialog.java:569)
at com.example.journeyjournalfinal.AddItemJournal.onCreate(AddItemJournal.java:148)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
爪哇: 包 com.example.journeyjournalfinal;
import android.Manifest;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.location.Location;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.DatePicker;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;
import androidx.appcompat.widget.AppCompatImageButton;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.core.app.ActivityCompat;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.karumi.dexter.Dexter;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionDeniedResponse;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.single.PermissionListener;
import java.io.InputStream;
import java.util.Calendar;
import java.util.Random;
public class AddItemJournal extends AppCompatActivity {
AppCompatImageView addJournalImageV;
AppCompatImageButton btnAddJournalImage;
TextInputEditText txtEditDateAddJournal, txtEditTitleAddJournal, txtEditDescriptionAddJournal, txtEditLocationAddJournal;
AppCompatButton btnSubmitAddJournal;
Uri imagePath;
Bitmap bitmap;
SupportMapFragment supportMapFragment;
FusedLocationProviderClient fusedLocationProviderClient;
Dialog mapDialog;
String uid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_item_journal);
//uid from dashboard
uid = getIntent().getStringExtra("uid");
//display picture in Image-View
addJournalImageV = findViewById(R.id.addJournalImageV);
btnAddJournalImage = findViewById(R.id.btnAddJournalImage);
btnAddJournalImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Dexter.withActivity(AddItemJournal.this)
.withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
.withListener(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, "Select Image File"), 1);
}
@Override
public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {
}
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest, PermissionToken permissionToken) {
permissionToken.continuePermissionRequest();
}
}).check();
}
});
//Setting up DatePicker on EditText
txtEditDateAddJournal = findViewById(R.id.txtEditDateAddJournal);
txtEditDateAddJournal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month= calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
//Date Picker Dialog
DatePickerDialog datePickerDialog = new DatePickerDialog(AddItemJournal.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
txtEditDateAddJournal.setText((month+1) +"-"+ dayOfMonth+ "-" +year );
}
}, year, month, day);
datePickerDialog.show();
}
});
//implementing map for location
txtEditLocationAddJournal = findViewById(R.id.txtEditLocationAddJournal);
mapDialog = new Dialog(this);
// mapDialog=findViewById(R.id.btnLogin);
mapDialog.setContentView(R.layout.map_dialog);
mapDialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
mapDialog.setCancelable(true);
txtEditLocationAddJournal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
supportMapFragment = (SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.fragMap);
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getApplicationContext());
Dexter.withContext(getApplicationContext())
.withPermission(Manifest.permission.ACCESS_FINE_LOCATION)
.withListener(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
getMapLocation();
}
@Override
public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {
}
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest, PermissionToken permissionToken) {
permissionToken.continuePermissionRequest();
}
}).check();
mapDialog.show();
}
});
//Uploading data to firebase
btnSubmitAddJournal = findViewById(R.id.btnSubmitAddJournal);
btnSubmitAddJournal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
uploadDataFirebase();
}
});
}
//loading Image in Image-view
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK){
imagePath = data.getData();
try {
InputStream inputStream = getContentResolver().openInputStream(imagePath);
bitmap = BitmapFactory.decodeStream(inputStream);
addJournalImageV.setImageBitmap(bitmap);
}catch (Exception e){
}
}
}
//getting Location using Map
private void getMapLocation()
{
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
Task<Location> task = fusedLocationProviderClient.getLastLocation();
task.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
supportMapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
googleMap.addMarker(markerOptions);
markerOptions.title(latLng.latitude + " : "+ latLng.longitude);
txtEditLocationAddJournal.setText(String.valueOf(location.getLatitude()) + " , " + String.valueOf(location.getLongitude()));
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
markerOptions.position(new LatLng(location.getLatitude(), location.getLongitude()));
txtEditLocationAddJournal.setText(String.valueOf(latLng.latitude) + " , " + String.valueOf(latLng.longitude));
googleMap.clear();
googleMap.addMarker(new MarkerOptions().position(latLng));
}
});
}
});
}
});
}
private void uploadDataFirebase() {
ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTitle("File Uploader");
progressDialog.show();
txtEditDateAddJournal = findViewById(R.id.txtEditDateAddJournal);
txtEditTitleAddJournal = findViewById(R.id.txtEditTitleAddJournal);
txtEditDescriptionAddJournal = findViewById(R.id.txtEditDescriptionAddJournal);
txtEditLocationAddJournal =findViewById(R.id.txtEditLocationAddJournal);
FirebaseStorage firebaseStorage = FirebaseStorage.getInstance();
final StorageReference storageReference = firebaseStorage.getReference("Image1" +new Random().nextInt(60));
storageReference.putFile(imagePath)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
dataholderadditemjournal obj = new dataholderadditemjournal(txtEditTitleAddJournal.getText().toString(),
txtEditDescriptionAddJournal.getText().toString(),
txtEditLocationAddJournal.getText().toString(),
uri.toString(),
txtEditDateAddJournal.getText().toString());
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference databaseReference = firebaseDatabase.getReference("JournalEntry").child(uid);
databaseReference.push().setValue(obj);
txtEditDateAddJournal.setText("");
txtEditTitleAddJournal.setText("");
txtEditDescriptionAddJournal.setText("");
txtEditLocationAddJournal.setText("");
addJournalImageV.setImageResource(R.drawable.ic_launcher_background);
Toast.makeText(getApplicationContext(), "Uploaded", Toast.LENGTH_SHORT).show();
}
});
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(@NonNull UploadTask.TaskSnapshot snapshot) {
float percent = (100* snapshot.getBytesTransferred())/snapshot.getTotalByteCount();
progressDialog.setMessage("Uploaded : " + (int)percent);
}
});
}
}
I have no idea why i'm getting error. I'm new in programming. This is my error in logcat and java code. There had been error on 147 line but i doesnt find any suspious things there. plz somebody tell me what is the problem coz im new-bie in android studio and java language.
Error logcat:
2022-03-27 09:47:26.285 14374-14374/com.example.journeyjournalfinal E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.journeyjournalfinal, PID: 14374
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.journeyjournalfinal/com.example.journeyjournalfinal.AddItemJournal}: android.view.InflateException: Binary XML file line #7 in com.example.journeyjournalfinal:layout/map_dialog: Binary XML file line #7 in com.example.journeyjournalfinal:layout/map_dialog: Error inflating class androidx.fragment.app.FragmentContainerView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: android.view.InflateException: Binary XML file line #7 in com.example.journeyjournalfinal:layout/map_dialog: Binary XML file line #7 in com.example.journeyjournalfinal:layout/map_dialog: Error inflating class androidx.fragment.app.FragmentContainerView
Caused by: android.view.InflateException: Binary XML file line #7 in com.example.journeyjournalfinal:layout/map_dialog: Error inflating class androidx.fragment.app.FragmentContainerView
Caused by: java.lang.RuntimeException: API key not found. Check that <meta-data android:name="com.google.android.geo.API_KEY" android:value="your API key"/> is in the <application> element of AndroidManifest.xml
at com.google.maps.api.android.lib6.drd.p.a(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):6)
at com.google.maps.api.android.lib6.auth.f.i(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):1)
at com.google.maps.api.android.lib6.impl.l.a(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):24)
at com.google.android.gms.maps.internal.CreatorImpl.b(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):7)
at com.google.android.gms.maps.internal.CreatorImpl.logInitialization(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):3)
at com.google.android.gms.maps.internal.g.aX(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):3)
at dz.onTransact(:com.google.android.gms.dynamite_mapsdynamite@[email protected] (150700-0):4)
at android.os.Binder.transact(Binder.java:1043)
at com.google.android.gms.internal.maps.zza.zzc(com.google.android.gms:play-services-maps@@18.0.0:2)
at com.google.android.gms.maps.internal.zze.zzl(com.google.android.gms:play-services-maps@@18.0.0:4)
at com.google.android.gms.maps.MapsInitializer.initialize(com.google.android.gms:play-services-maps@@18.0.0:12)
at com.google.android.gms.maps.MapsInitializer.initialize(com.google.android.gms:play-services-maps@@18.0.0:1)
at com.google.android.gms.maps.zzav.zzc(com.google.android.gms:play-services-maps@@18.0.0:2)
at com.google.android.gms.maps.zzav.createDelegate(com.google.android.gms:play-services-maps@@18.0.0:1)
at com.google.android.gms.dynamic.DeferredLifecycleHelper.zaf(com.google.android.gms:play-services-base@@18.0.1:6)
at com.google.android.gms.dynamic.DeferredLifecycleHelper.onCreate(com.google.android.gms:play-services-base@@18.0.1:1)
at com.google.android.gms.maps.SupportMapFragment.onCreate(com.google.android.gms:play-services-maps@@18.0.0:5)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:2949)
2022-03-27 09:47:26.288 14374-14374/com.example.journeyjournalfinal E/AndroidRuntime: at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:475)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:278)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2106)
at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1971)
at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:311)
at androidx.fragment.app.FragmentContainerView.<init>(FragmentContainerView.java:180)
at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:52)
at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:135)
at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:319)
at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:298)
at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1067)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:995)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:959)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1121)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082)
at android.view.LayoutInflater.inflate(LayoutInflater.java:680)
at android.view.LayoutInflater.inflate(LayoutInflater.java:532)
at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:455)
at android.app.Dialog.setContentView(Dialog.java:569)
at com.example.journeyjournalfinal.AddItemJournal.onCreate(AddItemJournal.java:148)
at android.app.Activity.performCreate(Activity.java:8000)
at android.app.Activity.performCreate(Activity.java:7984)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Java:
package com.example.journeyjournalfinal;
import android.Manifest;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.location.Location;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.DatePicker;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;
import androidx.appcompat.widget.AppCompatImageButton;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.core.app.ActivityCompat;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.karumi.dexter.Dexter;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionDeniedResponse;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.single.PermissionListener;
import java.io.InputStream;
import java.util.Calendar;
import java.util.Random;
public class AddItemJournal extends AppCompatActivity {
AppCompatImageView addJournalImageV;
AppCompatImageButton btnAddJournalImage;
TextInputEditText txtEditDateAddJournal, txtEditTitleAddJournal, txtEditDescriptionAddJournal, txtEditLocationAddJournal;
AppCompatButton btnSubmitAddJournal;
Uri imagePath;
Bitmap bitmap;
SupportMapFragment supportMapFragment;
FusedLocationProviderClient fusedLocationProviderClient;
Dialog mapDialog;
String uid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_item_journal);
//uid from dashboard
uid = getIntent().getStringExtra("uid");
//display picture in Image-View
addJournalImageV = findViewById(R.id.addJournalImageV);
btnAddJournalImage = findViewById(R.id.btnAddJournalImage);
btnAddJournalImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Dexter.withActivity(AddItemJournal.this)
.withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
.withListener(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, "Select Image File"), 1);
}
@Override
public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {
}
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest, PermissionToken permissionToken) {
permissionToken.continuePermissionRequest();
}
}).check();
}
});
//Setting up DatePicker on EditText
txtEditDateAddJournal = findViewById(R.id.txtEditDateAddJournal);
txtEditDateAddJournal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month= calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
//Date Picker Dialog
DatePickerDialog datePickerDialog = new DatePickerDialog(AddItemJournal.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
txtEditDateAddJournal.setText((month+1) +"-"+ dayOfMonth+ "-" +year );
}
}, year, month, day);
datePickerDialog.show();
}
});
//implementing map for location
txtEditLocationAddJournal = findViewById(R.id.txtEditLocationAddJournal);
mapDialog = new Dialog(this);
// mapDialog=findViewById(R.id.btnLogin);
mapDialog.setContentView(R.layout.map_dialog);
mapDialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
mapDialog.setCancelable(true);
txtEditLocationAddJournal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
supportMapFragment = (SupportMapFragment)
getSupportFragmentManager().findFragmentById(R.id.fragMap);
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getApplicationContext());
Dexter.withContext(getApplicationContext())
.withPermission(Manifest.permission.ACCESS_FINE_LOCATION)
.withListener(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
getMapLocation();
}
@Override
public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {
}
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest, PermissionToken permissionToken) {
permissionToken.continuePermissionRequest();
}
}).check();
mapDialog.show();
}
});
//Uploading data to firebase
btnSubmitAddJournal = findViewById(R.id.btnSubmitAddJournal);
btnSubmitAddJournal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
uploadDataFirebase();
}
});
}
//loading Image in Image-view
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK){
imagePath = data.getData();
try {
InputStream inputStream = getContentResolver().openInputStream(imagePath);
bitmap = BitmapFactory.decodeStream(inputStream);
addJournalImageV.setImageBitmap(bitmap);
}catch (Exception e){
}
}
}
//getting Location using Map
private void getMapLocation()
{
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
Task<Location> task = fusedLocationProviderClient.getLastLocation();
task.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
supportMapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
googleMap.addMarker(markerOptions);
markerOptions.title(latLng.latitude + " : "+ latLng.longitude);
txtEditLocationAddJournal.setText(String.valueOf(location.getLatitude()) + " , " + String.valueOf(location.getLongitude()));
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
markerOptions.position(new LatLng(location.getLatitude(), location.getLongitude()));
txtEditLocationAddJournal.setText(String.valueOf(latLng.latitude) + " , " + String.valueOf(latLng.longitude));
googleMap.clear();
googleMap.addMarker(new MarkerOptions().position(latLng));
}
});
}
});
}
});
}
private void uploadDataFirebase() {
ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTitle("File Uploader");
progressDialog.show();
txtEditDateAddJournal = findViewById(R.id.txtEditDateAddJournal);
txtEditTitleAddJournal = findViewById(R.id.txtEditTitleAddJournal);
txtEditDescriptionAddJournal = findViewById(R.id.txtEditDescriptionAddJournal);
txtEditLocationAddJournal =findViewById(R.id.txtEditLocationAddJournal);
FirebaseStorage firebaseStorage = FirebaseStorage.getInstance();
final StorageReference storageReference = firebaseStorage.getReference("Image1" +new Random().nextInt(60));
storageReference.putFile(imagePath)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
dataholderadditemjournal obj = new dataholderadditemjournal(txtEditTitleAddJournal.getText().toString(),
txtEditDescriptionAddJournal.getText().toString(),
txtEditLocationAddJournal.getText().toString(),
uri.toString(),
txtEditDateAddJournal.getText().toString());
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference databaseReference = firebaseDatabase.getReference("JournalEntry").child(uid);
databaseReference.push().setValue(obj);
txtEditDateAddJournal.setText("");
txtEditTitleAddJournal.setText("");
txtEditDescriptionAddJournal.setText("");
txtEditLocationAddJournal.setText("");
addJournalImageV.setImageResource(R.drawable.ic_launcher_background);
Toast.makeText(getApplicationContext(), "Uploaded", Toast.LENGTH_SHORT).show();
}
});
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(@NonNull UploadTask.TaskSnapshot snapshot) {
float percent = (100* snapshot.getBytesTransferred())/snapshot.getTotalByteCount();
progressDialog.setMessage("Uploaded : " + (int)percent);
}
});
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论