gpt4 book ai didi

java - 应用程序因使用 com.github.glomadrian.materialanimatedswitch.MaterialAnimatedSwitch 而崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 09:11:28 27 4
gpt4 key购买 nike

我的问题是,当我单击应用程序中的登录按钮时,我的应用程序会转到另一个名为欢迎 Activity 的 Activity 。但是当转到欢迎 Activity 时,我的应用程序崩溃了。并给出一些错误。我不明白这个错误。所以请帮助我摆脱这种情况。

Hare 是我的欢迎 Activity 代码


import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;

import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.print.PrinterId;
import android.util.Log;
import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import android.widget.Toast;

import com.firebase.geofire.GeoFire;
import com.firebase.geofire.GeoLocation;
import com.github.glomadrian.materialanimatedswitch.MaterialAnimatedSwitch;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationRequest;
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.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.material.snackbar.Snackbar;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class Welcome extends FragmentActivity implements OnMapReadyCallback,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
LocationListener
{

private GoogleMap mMap;

private static final int MY_PERMISSION_REQUEST_CODE=7000;
private static final int PLAY_SERIVICES_RES_REQUEST=7001;

private LocationRequest mLocationRequest;
private GoogleApiClient mGoogleApiClient;
private Location lastLocation;

private static int UPDATE_INTERVAL=5000;
private static int FATEST_INTERVAL=3000;
private static int DISPLACEMENT=10;

DatabaseReference drivers;
GeoFire geoFire;
Marker mCurrent;
MaterialAnimatedSwitch location_switch;
SupportMapFragment mapFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

//init view..
location_switch=(MaterialAnimatedSwitch) findViewById(R.id.location_switch);
location_switch.setOnCheckedChangeListener(new MaterialAnimatedSwitch.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(boolean isOnline) {
if(isOnline)
{
startLocationUpdate();
displayLocation();
Snackbar.make(mapFragment.getView(),"You are Online",Snackbar.LENGTH_SHORT).show();
}

else
{
stopLocationUpdate();
mCurrent.remove();
Snackbar.make(mapFragment.getView(),"You are Offline",Snackbar.LENGTH_SHORT).show();
}

}
});

//Geo fire

drivers= FirebaseDatabase.getInstance().getReference("Drivers");
geoFire=new GeoFire(drivers);
setUpLocation();
}

//we request run time permission ,we need override OnRequestPermission Result..


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode)
{
case MY_PERMISSION_REQUEST_CODE:
if(grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED)
{
if(checkPlayServices())
{
buildGoogleApiClient();
createLocationRequest();
if(location_switch.isChecked())
displayLocation();
}
}
}
}

private void setUpLocation() {
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) !=PackageManager.PERMISSION_GRANTED)
{
//Request Runtime permission...
ActivityCompat.requestPermissions(this,new String[]{
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
},MY_PERMISSION_REQUEST_CODE);
}

else
{
if(checkPlayServices())
{
buildGoogleApiClient();
createLocationRequest();
if(location_switch.isChecked())
displayLocation();
}
}
}

private void createLocationRequest() {
mLocationRequest=new LocationRequest();
mLocationRequest.setInterval(UPDATE_INTERVAL);
mLocationRequest.setFastestInterval(FATEST_INTERVAL);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
mLocationRequest.setSmallestDisplacement(DISPLACEMENT);
}

private void buildGoogleApiClient() {

mGoogleApiClient=new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mGoogleApiClient.connect(); //Connected Google api client.....
}

private boolean checkPlayServices() {
int resultCode= GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if(resultCode!=ConnectionResult.SUCCESS)
{
if(GooglePlayServicesUtil.isUserRecoverableError(resultCode))
GooglePlayServicesUtil.getErrorDialog(resultCode,this,PLAY_SERIVICES_RES_REQUEST).show();
else {
Toast.makeText(this, "This device is not supported ", Toast.LENGTH_SHORT).show();
}

return false;

}

return true;
}

private void stopLocationUpdate() {

if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) !=PackageManager.PERMISSION_GRANTED)
{
return;
}

LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient,(com.google.android.gms.location.LocationListener) this);

}

private void displayLocation() {

if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) !=PackageManager.PERMISSION_GRANTED)
{
return;
}

lastLocation=LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);

if(lastLocation!=null)
{
if(location_switch.isChecked())
{
final double latitude=lastLocation.getLatitude();
final double longitude=lastLocation.getLongitude();

//update firebase..
geoFire.setLocation(FirebaseAuth.getInstance().getCurrentUser().getUid(), new GeoLocation(latitude, longitude), new GeoFire.CompletionListener() {
@Override
public void onComplete(String key, DatabaseError error) {
//add marker
if(mCurrent!=null)
mCurrent.remove();//marker remove already
mCurrent=mMap.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.drawable.car))
.position(new LatLng(latitude,longitude))
.title("YOU"));
//Move camera from this position..
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude,longitude),15.0f));

//draw animated rotated marker..
rotateMarker(mCurrent,-360,mMap);
}
});
}
}
else
{
Log.d("ERROR","Cannot get your location");
}

}

private void rotateMarker(final Marker mCurrent, final float i, GoogleMap mMap) {

final Handler handler=new Handler();
final long start= SystemClock.uptimeMillis();
final float startRotation=mCurrent.getRotation();
final long duration=1500;

final Interpolator interpolator=new LinearInterpolator();

handler.post(new Runnable() {
@Override
public void run() {
long elapsed=SystemClock.uptimeMillis()-start;
float t=interpolator.getInterpolation((float)elapsed/duration);
float rot=t*i+(1-t)*startRotation;

mCurrent.setRotation(-rot>180?rot/2:rot);

if(t<1.0)
{
handler.postDelayed(this,16);
}
}
});

}

private void startLocationUpdate() {
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) !=PackageManager.PERMISSION_GRANTED)
{
return;
}

LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,mLocationRequest, (com.google.android.gms.location.LocationListener) this);
}


@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;

// Add a marker in Sydney and move the camera
LatLng sydney = new LatLng(-34, 151);
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}

@Override
public void onLocationChanged(Location location) {
lastLocation=location;
displayLocation();

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}

@Override
public void onConnected(@Nullable Bundle bundle) {

displayLocation();
startLocationUpdate();

}

@Override
public void onConnectionSuspended(int i) {
mGoogleApiClient.connect();

}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {


}
}

Hare 是我的 activity_welcome 布局:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Welcome" >



<RelativeLayout

android:layout_width="match_parent"
android:layout_height="match_parent"

>

<LinearLayout
android:orientation="horizontal"
android:weightSum="10"
android:padding="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

<com.github.glomadrian.materialanimatedswitch.MaterialAnimatedSwitch
android:id="@+id/location_switch"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="wrap_content"
app:icon_release="@drawable/ic_location_off"
app:icon_press="@drawable/ic_location_on"
app:base_release_color="@color/baseReleaseColor"
app:base_press_color="@color/basePress"
app:ball_release_color="@color/ballReleaseColor"
app:ball_press_color="@android:color/white"
/>




</LinearLayout>

</RelativeLayout>


</fragment>

兔子是我的错误

    Process: com.example.ubarclone, PID: 15109
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ubarclone/com.example.ubarclone.Welcome}: android.view.InflateException: Binary XML file line #28: Binary XML file line #28: Error inflating class com.github.glomadrian.materialanimatedswitch.MaterialAnimatedSwitch
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.view.InflateException: Binary XML file line #28: Binary XML file line #28: Error inflating class com.github.glomadrian.materialanimatedswitch.MaterialAnimatedSwitch
Caused by: android.view.InflateException: Binary XML file line #28: Error inflating class com.github.glomadrian.materialanimatedswitch.MaterialAnimatedSwitch
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at android.view.LayoutInflater.createView(LayoutInflater.java:647)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:420)
at android.app.Activity.setContentView(Activity.java:2771)
at com.example.ubarclone.Welcome.onCreate(Welcome.java:72)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
E/AndroidRuntime: at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:734)
at com.github.glomadrian.materialanimatedswitch.painter.IconPainter.initBitmap(IconPainter.java:41)
at com.github.glomadrian.materialanimatedswitch.painter.IconPainter.init(IconPainter.java:36)
at com.github.glomadrian.materialanimatedswitch.painter.IconPainter.<init>(IconPainter.java:30)
at com.github.glomadrian.materialanimatedswitch.painter.IconPressPainter.<init>(IconPressPainter.java:30)
at com.github.glomadrian.materialanimatedswitch.MaterialAnimatedSwitch.initPainters(MaterialAnimatedSwitch.java:79)
at com.github.glomadrian.materialanimatedswitch.MaterialAnimatedSwitch.init(MaterialAnimatedSwitch.java:65)
at com.github.glomadrian.materialanimatedswitch.MaterialAnimatedSwitch.init(MaterialAnimatedSwitch.java:90)
at com.github.glomadrian.materialanimatedswitch.MaterialAnimatedSwitch.<init>(MaterialAnimatedSwitch.java:54)

为了更好地理解,请提供屏幕截图: Error

此错误显示在欢迎 Activity 的 72 号行中。这是 72 数轴的图像: enter image description here

Hare 是我的依赖项 Module:app :


android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.ubarclone"
minSdkVersion 26
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/assets/'] } }
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

//metarial edit text..
implementation 'com.rengwuxian.materialedittext:library:2.1.4'

implementation 'uk.co.chrisjenx:calligraphy:2.3.0'

implementation "androidx.cardview:cardview:1.0.0"


//add library for firebase
implementation 'com.google.firebase:firebase-auth:19.2.0'
implementation 'com.google.firebase:firebase-database:19.2.0'
implementation 'androidx.annotation:annotation:1.1.0'

//loading dialog dependency
implementation 'com.github.d-max:spots-dialog:0.7@aar'

//for maps
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'

//geofire
implementation 'com.firebase:geofire-android:3.0.0'

//for switch active map an inactive maps..
implementation'com.github.glomadrian:MaterialAnimatedSwitch:1.1@aar'

}
apply plugin: 'com.google.gms.google-services'
configurations.all {
resolutionStrategy.force 'com.android.support:support-v4:28.0.0'
// the above lib may be old dependencies version
}

请帮助我摆脱这种情况......

最佳答案

从崩溃堆栈跟踪和 Material 动画切换源代码来看,@drawable/ic_location_off 图标存在问题。库用于加载可绘制对象的方法 BitmapFactory.decodeResource 返回 null,因此无法根据所需的 11dp 图标大小重新缩放图像。

请确保它在 res/drawable 文件夹中定义。

关于java - 应用程序因使用 com.github.glomadrian.materialanimatedswitch.MaterialAnimatedSwitch 而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59617686/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com