2012-07-23 7 views
0

List 타입으로 Spinner을 채우는 데 어려움이 있습니다.리스트에서 스피너 삽입하기

조준하십시오 Button가 메인 메뉴를 누르면, 그것은 새로운 화면에 Spinner을 채우는 작업 GetTownsTask을 실행하지만 Adapter를 설정할 때이 나옵니다.

MainActivity.java

private class GetTownsTask extends AsyncTask<Void, Void, List<String>> { 
    @Override 
    protected List<String> doInBackground(Void... p) { 

     // api calls 
     List<String> towns = new ArrayList<String>(); 
     // populate towns 
     return towns; 
    } 

    @Override 
    protected void onPostExecute(List<String> townList) { 

     Spinner spinner = (Spinner) findViewById(R.id.spinner); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(
       MainActivity.this, 
       android.R.layout.simple_spinner_dropdown_item, 
       townList.toArray(new String[0])); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); // line 124, breaks here 
    } 
} 

충돌 로그인

FATAL EXCEPTION: main, 
java.lang.NullPointerException, 
at com.project.MainActivity$TestTask.onPostExecute(MainActivity.java:124) 

스피너 화면이

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#787878"> 

    <Spinner 
     android:id="@+id/spinner" 
     android:layout_width="200dip" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/townTextView" 
     android:layout_below="@+id/townTextView" 
     android:layout_marginTop="10dp" /> 

</RelativeLayout> 
+0

에 전달되고있다. 'XML' 파일에 추가 하시겠습니까? –

+0

'spinner'는 null입니다. 왜 여분의 코드가 없는지 알기가 어렵습니다. – dmon

+0

상단에 타운이 있지만 townList.toArray()를 호출하고 있습니다. townList가 onPostExecute 메서드 내에서 디버깅하여 null이 아닌지 확인 했습니까? – kosa

답변

0

문제는 지혜입니다 h townList.toArray(new String[0]). townList.toArray()을 사용해 보았을 때 생성 된 String 배열의 크기가 townList와 동일한 지 확인합니다.

+1

'townList.toArray()'는 java.lang.ClassCastException : java.lang.String []에 캐스트 할 수없는 java.lang.ClassCastException : java.lang.String []에 이르는 String []으로 형 변환되어야합니다. – Michael

0

//이 반드시 당신을 도울 것입니다 본

package com.javasamples; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.TextView; 

public class ArrayAdapterDemo2 extends Activity implements 
     AdapterView.OnItemSelectedListener { 
    TextView selection; 
    String[] items = { "this", "is", "a", "really", 
      "really2", "really3", 
      "really4", "really5", "silly", "list" }; 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 
     selection = (TextView) findViewById(R.id.selection); 

     Spinner spin = (Spinner) findViewById(R.id.spinner); 
     spin.setOnItemSelectedListener(this); 

     ArrayAdapter aa = new ArrayAdapter(
       this, 
       android.R.layout.simple_spinner_item, 
       items); 

     aa.setDropDownViewResource(
      android.R.layout.simple_spinner_dropdown_item); 
     spin.setAdapter(aa); 
    } 

    public void onItemSelected(AdapterView<?> parent, View v, int position, 
      long id) { 
     selection.setText(items[position]); 
    } 

    public void onNothingSelected(AdapterView<?> parent) { 
     selection.setText(""); 
    } 
}//class 

처럼 스피너를 채 웁니다.

감사합니다 :)

+0

그가 전체 코드를 제공하지 않았기 때문에 "townList"변수가 포함되지 않은 질문을보십시오. 가능한 한 빨리 도움을 청합니다. – SALMAN

0
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
       MainActivity.this, 
       android.R.layout.simple_spinner_dropdown_item, 
       townList.toArray(new String[0])); 

당신이 ArrayAdapter 생성자에 List<String> 개체를 전달할 수 있습니다 당신이 .toArray을 필요로하지 않는 것 같다.

그래서 시도,

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
       MainActivity.this, 
       android.R.layout.simple_spinner_dropdown_item, 
       townList); 

이 townList 실제로 doInBackground() 채워되고 있음을 가정하고 그것은 반환 값이 spinner`은 null``입니다`할 수있다 onPostExecute(townList)