Заполнение Spinner с использованием строковых значений, возвращаемых веб-службой SOAP

1

Я работаю над кодом Android, который возвращает мне значения String, которые я храню в массиве String. Я хочу использовать этот массив String для заполнения одного из моих Spinners.

Мое основное намерение состоит в том, что в зависимости от того, что пользователь выбирает в 1-м счетчике, я хочу заполнить свой второй счетчик, используя мой массив String.

Однако, когда я пытаюсь, я получаю исключение NullPointerException, даже когда я заполняю адаптер

Мой Android-код:

public class Mark2 extends Activity 
{
  private static final String SOAP_ACTION = "http://tempuri.org/getData";
  private static final String METHOD_NAME = "getData";
  private static final String NAMESPACE = "http://tempuri.org/";
  private static final String URL = "http://10.0.2.2/getsubject/Service1.asmx"; 


  private Spinner s;
  private Spinner s2;
  private Spinner s3;

@Override
    protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    setContentView(R.layout.mainspinner);

    s = (Spinner) findViewById(R.id.spinner1);
    s2 = (Spinner) findViewById(R.id.spinner2);


    String[] myList4=call();
    for(int i=0;i<myList4.length;i++)
    System.out.println(myList4[i]);

    String[] myList = new String[] {"First half","Second Half"};
    String[] myList2=new  String[] {
                                           "abc",
                                   "ghf", 
                                   "ijk",                             
                                   };

    String[] myList3=new String[]  {
                            "john",
                            "ann", 
                            "joe",

                                   };

   s.setAdapter(new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item, myList));
    s2.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, myList2));


    final ArrayAdapter<String> adapter3 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, myList4);
    final ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, myList3);


    s.setOnItemSelectedListener(new OnItemSelectedListener()
    {

        @Override
        public void onItemSelected(AdapterView<?> parent, View v,int pos, long id) 
        {

        if(parent.getItemAtPosition(pos).toString().equalsIgnoreCase("First half"))
        {
           s2.setSelection(pos);
           s3.setAdapter(adapter3);
        }
        else
        {
            s2.setAdapter(adapter2);
            s2.setSelection(pos);


        }

        }



        @Override
        public void onNothingSelected(AdapterView<?> arg0) {


        }});


}

public String[] call()
{
    SoapPrimitive responsesData = null; 

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( 
    SoapEnvelope.VER11); 
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(request);

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    androidHttpTransport.debug = true; 

    try {

    androidHttpTransport.call(SOAP_ACTION, envelope);

    responsesData = (SoapPrimitive) envelope.getResponse(); 
    System.out.println(" --- response ---- " + responsesData); 

    } catch (SocketException ex) { 
    ex.printStackTrace(); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 

    System.out.println( " ----" + responsesData );

    String serviceResponse= responsesData .toString(); 


    String[] temp; 
    String delimiter = "#"; 
    temp= serviceResponse.split(delimiter);
    System.out.println( " ---- length ---- " + temp.length); 

    return temp; 


   }      


  }

Мой логарифм:

 11-17 15:51:09.668: DEBUG/dalvikvm(125): GC_EXPLICIT freed 1220 objects / 68272 bytes in 164ms
 11-17 16:20:29.649: ERROR/AndroidRuntime(620): java.lang.NullPointerException
 11-17 16:20:29.649: ERROR/AndroidRuntime(620):     at com.example.Mark2$1.onItemSelected(Mark2.java:88)
 11-17 16:20:29.649: ERROR/AndroidRuntime(620):     at android.widget.AdapterView.fireOnSelected(AdapterView.java:864)
 11-17 16:20:29.649: ERROR/AndroidRuntime(620):     at android.widget.AdapterView.access$200(AdapterView.java:42)
 11-17 16:20:29.649: ERROR/AndroidRuntime(620):     at  android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:830)
 11-17 16:20:29.649: ERROR/AndroidRuntime(620):     at android.os.Handler.handleCallback(Handler.java:587)  
 11-17 16:20:29.649: ERROR/AndroidRuntime(620):     at android.os.Handler.dispatchMessage(Handler.java:92)

Изменить: № линии: 88 - s3.setAdapter(адаптер3);

Теги:
android-arrayadapter
spinner

1 ответ

1
Лучший ответ

NullPointerException возникает, когда один из объектов имеет значение null, и вы пытаетесь его использовать.

Из вашего кода я обнаружил, что вы не инициализировали s3 Spinner.

Вы просто забыли добавить:

s3 = (Spinner) findViewById(R.id.spinner3);
  • 0
    ооо дерьмо человек !! Как я это пропустил :( спасибо за помощь !! :-)
  • 0
    Не волнуйся, это случится. ;) .. И вот как мы учимся запоминать вещи ..
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню