-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()'を呼び出そうとしています"

答えて

0

磁力計のインスタンスを作成したことはありませんあなたのMagFragment。

例:Magnetometer mag = new Magnetometer(this);

+0

おかげで、私は、これは私自身、私の悪いことを発見しました。 –