1

スピナーがあり、非同期タスクでjson投稿を作成するメソッドで現在選択されているスピナー値を取得しようとしていますが、私の spinner.getSelectedItem() はnullを返し、理由がわかりません。

私のアダプタクラス

public class SpinnerArrayAdapter extends ArrayAdapter<Station> { private final Context       context; private final List<Station> objects;
public SpinnerArrayAdapter(Context context, int resource,
    List<Station> objects) {
super(context, resource, objects);
this.context = context;
this.objects = objects;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = new ViewHolder();

if (row == null) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    row = inflater.inflate(R.layout.station_spinner_row, parent, false);
    holder.v1 = (TextView) row.findViewById(R.id.spinnerTextStation);
    holder.v2 = (TextView) row.findViewById(R.id.spinnerTextLine);
    row.setTag(holder);
} else {
    holder = (ViewHolder) row.getTag();
}
final Station station = objects.get(position);
if (station != null) {
    holder.v1.setText(station.getStation());
    holder.v2.setText(station.getLine());
    // Log.d("Adapter", "holder.v1.getText(): " + holder.v1.getText());
}
return row;
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = new ViewHolder();

if (row == null) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    row = inflater.inflate(R.layout.station_spinner_row, parent, false);
    holder.v1 = (TextView) row.findViewById(R.id.spinnerTextStation);
    holder.v2 = (TextView) row.findViewById(R.id.spinnerTextLine);
    row.setTag(holder);
} else {
    holder = (ViewHolder) row.getTag();
}
final Station station = objects.get(position);
if (station != null) {
    holder.v1.setText(station.getStation());
    holder.v2.setText(station.getLine());
    // Log.d("Adapter", "holder.v1.getText(): " + holder.v1.getText());
}
return row;
}

public static class ViewHolder {
TextView v1; // view1
TextView v2; // view2
}

@Override
public int getCount() {
return objects.size();
}

@Override
public Station getItem(int position) {
// TODO Auto-generated method stub
return objects.get(position);
}
}

これは、スピナーで選択された値を取得するが、null を返す Fragment 内の関数です。null ポインター例外が発生しましたが、その理由がわかりません。

private void sendNewWarning(View view) {
    Warning war = new Warning();

    Spinner stationSpinner = (Spinner) view
            .findViewById(R.id.stationSpinner);
    Spinner typeSpinner = (Spinner) view.findViewById(R.id.typeSpinner);
    EditText descText = (EditText) view.findViewById(R.id.EditTextDesc);

    war.setTown("St"); // HARDCODED!
    Station stat = new Station();
    Log.d("Project V", "getSelectedItemPosition: " + stationSpinner.getSelectedItemPosition());
    Log.d("Project V", stationSpinner.getItemAtPosition(1).getClass().toString());
    // PROBLEM HERE!
    stat = (Station)     stationSpinner.getItemAtPosition(stationSpinner.getSelectedItemPosition());
    war.setStation(stat.getStation());
    Log.d("Project V", "war.getStation(): " + war.getStation());
    war.setType(typeSpinner.getSelectedItem().toString());
    war.setDesc(descText.getText().toString());


    String input = gson.toJson(war).toString();
    new PostWarningTask(getActivity()).execute(input);
    }
4

0 に答える 0