-2
私はアンドロイドの初心者であり、NullPointerExceptionを処理する際に問題があります。磁力計の値を配列の1つのクラスからフラグメントに渡す必要があります。ここ は、磁力計のクラスである:ここでフラグメントを使用して別のクラスから値を取得する場合のNullPointerException
public class Magnetometer implements SensorEventListener {
private Sensor mag;
private SensorManager magman;
private boolean magAvailable;
private float[] magValue;
public Magnetometer(MagFragment context){
magman=(SensorManager)context.getActivity().getSystemService(Context.SENSOR_SERVICE);
magAvailable=magman.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)!=null;
if(isMagAvailable()){
magValue=new float[3];
mag=magman.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
magman.registerListener(this,mag,SensorManager.SENSOR_DELAY_NORMAL);
}
}
@Override
public void onSensorChanged(SensorEvent event) {
for(int i=0;i<3;i++)
magValue[i]=event.values[i];
}
public float[] getLastReading(){
return this.magValue;
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
public boolean isMagAvailable(){
return this.magAvailable;
}
public void unregister(){
if(isMagAvailable())
magman.unregisterListener(this,mag);
}
}
は、フラグメントである:
ublic class MagFragment extends Fragment {
private Magnetometer mag;
private TextView x,y,z;
private float[] magValues;
public MagFragment() {
// Required empty public constructor
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//returning our layout file
//change R.layout.yourlayoutfilename for each of your fragments
View rootView = inflater.inflate(R.layout.fragment_mag, container, false);
x=(TextView) rootView.findViewById(R.id.mx);
y=(TextView) rootView.findViewById(R.id.my);
z=(TextView) rootView.findViewById(R.id.mz);
magValues=new float[3];
getData(this);
return rootView;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
//you can set the title for your toolbar here for different fragments different titles
getActivity().setTitle("Magnetometer");
}
public void getData(MagFragment context)
{
magValues=mag.getLastReading();
displayData(magValues);
}
public void displayData(float [] magV)
{
x.setText(String.valueOf(magV[0]));
y.setText(String.valueOf(magV[1]));
z.setText(String.valueOf(magV[2]));
}
}
私は関数は、いくつかのNULL値を返すことを、理解しています。 私が取得するエラーは、 "ヌルオブジェクト参照で仮想メソッド 'float [] com.example.ark.ark.Sensors.Magnetometer.getLastReading()'を呼び出そうとしています"
おかげで、私は、これは私自身、私の悪いことを発見しました。 –