Java 通过构造函数| ListView传递数组适配器

Java 通过构造函数| ListView传递数组适配器,java,android,android-studio,listview,android-fragments,Java,Android,Android Studio,Listview,Android Fragments,我正在尝试将适配器从我的位置fragment.class添加到我的设备admin.class中,以向我的列表视图添加两个字符串,即mylatitude和MyLongitute。 我正在学习构造函数方法。 但每当我调用adapter.add(mylatitude+“”+mylongitude)时,它似乎都返回null在我的设备管理员类中 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.

我正在尝试将适配器从我的
位置fragment.class
添加到我的
设备admin.class
中,以向我的
列表视图
添加两个字符串,即
mylatitude
MyLongitute
。 我正在学习构造函数方法。 但每当我调用
adapter.add(mylatitude+“”+mylongitude)时,它似乎都返回null在我的
设备管理员类中

  java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ArrayAdapter.add(java.lang.Object)' on a null object reference
        at com.ayush.trixter.ui.captures.DeviceAdmin$1.onLocationChanged(DeviceAdmin.java:103)
第103行是:
adapter.add(“纬度:+mylat+”经度:+mylon”)

设备管理员类


import android.Manifest;
import android.annotation.SuppressLint;
import android.app.admin.DeviceAdminReceiver;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Paint;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Looper;
import android.os.UserHandle;
import android.util.Log;
import android.util.SparseIntArray;
import android.view.ContextThemeWrapper;
import android.view.Surface;
import android.view.View;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.core.content.PermissionChecker;

import com.ayush.trixter.R;
import com.ayush.trixter.ui.locations.LocationFragment;
import com.google.android.gms.location.LocationCallback;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.material.snackbar.Snackbar;
import com.google.firebase.database.FirebaseDatabase;

import java.util.ArrayList;

public class DeviceAdmin extends DeviceAdminReceiver
{
    private static final SparseIntArray ORIENTATIONS = new SparseIntArray();
    public CameraManager cam;
    LocationManager locationManager;
    final String TAG = "[Trixter]";
    DevicePolicyManager mgr;
    FirebaseDatabase db;
    public boolean mTracking = false;
    public ArrayList<String> listItems=new ArrayList<>();
    LocationFragment lf = new LocationFragment();
    ArrayAdapter<String> adapter = lf.adapter;



    @Override
    public void onPasswordFailed(@NonNull Context ctx, @NonNull Intent intent, @NonNull UserHandle user) {
        super.onPasswordFailed(ctx, intent, user);
        cam = (CameraManager) ctx.getSystemService(Context.CAMERA_SERVICE);
        mgr = (DevicePolicyManager) ctx.getSystemService(Context.DEVICE_POLICY_SERVICE);

        Log.d(TAG,"PasswordFailed");
        int pwdfailcount = mgr.getCurrentFailedPasswordAttempts();

        if(pwdfailcount==3)
        {
            takeSnapShots();
            getloc(ctx);

        }
    }

    public void getloc(Context ctx)
    {
        locationManager = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        String provider =  locationManager.getBestProvider(criteria,true);
        boolean gps_enabled = false;
        boolean network_enabled = false;

        try
        { gps_enabled =   locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); }
        catch (Exception e) {}
        try { network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);} catch (Exception e) {}

        if(PermissionChecker.checkSelfPermission(ctx, Manifest.permission.ACCESS_COARSE_LOCATION) == PermissionChecker.PERMISSION_GRANTED && PermissionChecker.checkSelfPermission(ctx,Manifest.permission.ACCESS_FINE_LOCATION) == PermissionChecker.PERMISSION_GRANTED) {
            if(gps_enabled == true && network_enabled ==true) {
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener() {
                    @Override
                    public void onLocationChanged(@NonNull Location loc) {
                        double mylat = loc.getLatitude();
                        double mylon = loc.getLongitude();
                        double myacc = loc.getAccuracy();
                        double time = loc.getTime();
                        double myalt = loc.getAltitude();
                        Log.d("[TrixterLocation]", "The Latitude:- " + mylat + "\nThe Longitude:- " + mylon + "\nThe Altitude:- " + myalt + "\n The Accuracy" + myacc + "\nThe Time:- " + time);
                        adapter.add("Latitude: " + mylat + "Longitude: " + mylon);
                    }
                });
            }
            else
            {
                Toast.makeText(ctx, "Location is not enabled", Toast.LENGTH_SHORT).show();
                Log.d("[Trixter] ","Error: Location or Internet Not Enabled");
            }
        }

    }



    private void takeSnapShots()
    {

    }





}

导入android.Manifest;
导入android.annotation.SuppressLint;
导入android.app.admin.DeviceAdminReceiver;
导入android.app.admin.DevicePolicyManager;
导入android.content.Context;
导入android.content.Intent;
导入android.content.pm.PackageManager;
导入android.graphics.Paint;
导入android.graphics.SurfaceTexture;
导入android.hardware.Camera;
导入android.hardware.camera2.CameraAccessException;
导入android.hardware.camera2.CameraCaptureSession;
导入android.hardware.camera2.CameraCharacteristics;
导入android.hardware.camera2.CameraManager;
导入android.location.Criteria;
导入android.location.location;
导入android.location.LocationListener;
导入android.location.LocationManager;
导入android.os.Build;
导入android.os.Looper;
导入android.os.UserHandle;
导入android.util.Log;
导入android.util.SparseIntArray;
导入android.view.contexthemewrapper;
导入android.view.Surface;
导入android.view.view;
导入android.widget.Adapter;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.Toast;
导入androidx.annotation.NonNull;
导入androidx.core.content.PermissionChecker;
导入com.ayush.trixter.R;
导入com.ayush.trixter.ui.locations.LocationFragment;
导入com.google.android.gms.location.LocationCallback;
导入com.google.android.gms.location.LocationRequest;
导入com.google.android.gms.location.LocationServices;
导入com.google.android.material.snackbar.snackbar;
导入com.google.firebase.database.FirebaseDatabase;
导入java.util.ArrayList;
公共类DeviceAdmin扩展DeviceAdminReceiver
{
专用静态最终SparseIntArray方向=新SparseIntArray();
公共摄像机管理器;
地点经理地点经理;
最后一个字符串标记=“[Trixter]”;
设备运营经理;
FirebaseDB数据库;
公共布尔mTracking=false;
public ArrayList listItems=新建ArrayList();
LocationFragment lf=新的LocationFragment();
ArrayAdapter适配器=左前适配器;
@凌驾
public void onPasswordFailed(@NonNull Context ctx、@NonNull Intent Intent Intent、@NonNull UserHandle user){
super.onPasswordFailed(ctx、intent、user);
cam=(CameraManager)ctx.getSystemService(Context.CAMERA_服务);
mgr=(DevicePolicyManager)ctx.getSystemService(Context.DEVICE\u POLICY\u SERVICE);
Log.d(标记“PasswordFailed”);
int pwdfailcount=mgr.getCurrentFailedPasswordAttempts();
如果(pwdfailcount==3)
{
takeSnapShots();
getloc(ctx);
}
}
公共无效getloc(上下文ctx)
{
locationManager=(locationManager)ctx.getSystemService(Context.LOCATION\u服务);
标准=新标准();
字符串提供程序=locationManager.getBestProvider(条件为true);
布尔值gps_enabled=false;
布尔网络_enabled=false;
尝试
{gps_enabled=locationManager.isProviderEnabled(locationManager.gps_PROVIDER);}
捕获(例外e){}
请尝试{network_enabled=locationManager.isProviderEnabled(locationManager.network_PROVIDER);}捕获(异常e){}
if(PermissionChecker.checkSelfPermission(ctx,Manifest.permission.ACCESS\u rough\u LOCATION)=授予PermissionChecker.permission\u和PermissionChecker.checkSelfPermission(ctx,Manifest.permission.ACCESS\u FINE\u LOCATION)=授予PermissionChecker.permission\u){
如果(gps_启用==true&&network_启用==true){
locationManager.RequestLocationUpdate(locationManager.GPS_提供程序,0,0,新LocationListener(){
@凌驾
public void onLocationChanged(@NonNull Location){
双mylat=loc.getLatitude();
double mylon=loc.getLongitude();
double myacc=loc.getAccurance();
double time=loc.getTime();
double myalt=loc.getAltitude();
Log.d(“[TrixterLocation]”,纬度:-“+mylat+”\n经度:-“+mylon+”\n海拔:-“+myalt+”\n精度“+myacc+”\n时间:-“+Time”);
添加(“纬度:+mylat+”经度:+mylon);
}
});
}
其他的
{
Toast.makeText(ctx,“位置未启用”,Toast.LENGTH_SHORT.show();
Log.d(“[Trixter]”,“错误:位置或互联网未启用”);
}
}
}
私有快照()
{
}
}
LocationsFragment.class

package com.ayush.trixter.ui.locations;

import android.content.Context;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.ListFragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;

import com.ayush.trixter.R;
import com.ayush.trixter.ui.captures.DeviceAdmin;

import java.util.ArrayList;

public class LocationFragment extends ListFragment {

    ListView loclst;
    LocationManager locationManager;
    public ArrayList<String> listItems=new ArrayList<>();
    public ArrayAdapter<String> adapter = (ArrayAdapter<String>) getListAdapter();

    public LocationFragment()
    {

    }
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_locations, container, false);
            loclst = root.findViewById(android.R.id.list);
            Context context = getActivity();
            locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
            adapter = new ArrayAdapter<String>(getActivity(),   android.R.layout.simple_list_item_2 , listItems);
            loclst.setAdapter(adapter);

          return root;
    }

}
package com.ayush.trixter.ui.locations;
导入android.content.Context;
导入android.location.LocationManager;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
导入androidx.annotation.NonNull;
导入androidx.annotation.Nullable;
导入androidx.fragment.app.fragment;
导入androidx.fragment.app.ListFragment;
导入androidx.lifecycle.Observer;
导入androidx.lifecycle.ViewModelProviders;
导入com.ayush.trixter.R;
导入com.ayush.trixter.ui.captures.DeviceAdmin;
导入java.util.ArrayList;
公共级Locat