2013-08-01 2 views
0

"고정 탭 + 스 와이프"모델을 사용하는 안드로이드 애플리케이션 내에서 액티비티를 개발 중입니다. 이 활동의 ​​각 '탭'은 다른 유형의 연락처 정보를 저장하는 데 사용됩니다. 첫 번째 상점 이름, 성별, 모바일, 생년월일 등. 다음 탭에는 주소 정보가 저장되고 다음 탭에는 다른 정보가 저장됩니다.액티비티를 시작할 수 없습니다 : 널 포인터 예외

그래서 첫 번째 탭에서 나는 그 사람의 제목 (Mr/Ms/Mrs 등)을 선택하기위한 '드롭 다운 메뉴'와 같이 작동하는 회 전자를 원했습니다. 그래서 다음과 같이 정의 내 strings.xml의 문자열 배열을 가지고 : 나는 코드에서 스피너를 채우기 위해 노력하고 내가 선 titleSpinner.setAdapter(adapter);에 널 포인터 예외를 얻고있다 그러나

<string-array name="titles"> 
    <item>"Mr."</item> 
    <item>"Miss"</item> 
    <item>"Ms."</item> 
    <item>"Mrs."</item> 
    <item>"Dr."</item>   
</string-array> 

. 그것에 회 전자와 -

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/androidbg_dark" 
    tools:context=".ModifyCustActivity" /> 

을 그리고 여기에 조각 중 하나 (문제의 하나의 XML 파일 :이 활동에 대한 XML이

public class ModifyCustActivity extends FragmentActivity implements 
     ActionBar.TabListener { 

private static final int NUM_PAGES = 2; 
private static final int DATE_DIALOG = 0; 

SectionsPagerAdapter mSectionsPagerAdapter; 
ViewPager mViewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_modify_cust); 

    final ActionBar actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    actionBar.setDisplayHomeAsUpEnabled(true); 

    mSectionsPagerAdapter = new SectionsPagerAdapter(
      getSupportFragmentManager()); 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 

    mViewPager 
      .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
       @Override 
       public void onPageSelected(int position) { 
        actionBar.setSelectedNavigationItem(position); 
       } 
      }); 

    for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { 
     actionBar.addTab(actionBar.newTab() 
       .setText(mSectionsPagerAdapter.getPageTitle(i)) 
       .setTabListener(this)); 
    } 
    setupTitleSpinner(); 
} 

private void setupTitleSpinner() {  
    Spinner titleSpinner = (Spinner) findViewById(R.id.spnTitle);  
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
      R.array.titles, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    titleSpinner.setAdapter(adapter); // EXCEPTION OCCURS HERE 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.modify_cust, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     NavUtils.navigateUpFromSameTask(this); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onTabSelected(ActionBar.Tab tab, 
     FragmentTransaction fragmentTransaction) { 
    mViewPager.setCurrentItem(tab.getPosition()); 
} 

@Override 
public void onTabUnselected(ActionBar.Tab tab, 
     FragmentTransaction fragmentTransaction) { 
} 

@Override 
public void onTabReselected(ActionBar.Tab tab, 
     FragmentTransaction fragmentTransaction) { 
} 

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment = new DummySectionFragment(); 
     switch (position) { 
     case 0: 
      return fragment = new FragmentCustBasic(); 
     case 1: 
      return fragment = new FragmentCustAddress(); 
     default: 
      break; 
     } 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return NUM_PAGES; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
     case 0: 
      return "Basic"; 
     case 1: 
      return "Address"; 
     } 
     return null; 
    } 
} 

public static class FragmentCustBasic extends Fragment { 
    public static final String ARG_SECTION_NUMBER = "section_number"; 
    public FragmentCustBasic() { 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(
       R.layout.fragment_modify_cust_basic, container, false); 
       return rootView; 
    } 
} 

public static class FragmentCustAddress extends Fragment { 
    public static final String ARG_SECTION_NUMBER = "section_number"; 
    public FragmentCustAddress() { 
    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(
       R.layout.fragment_modify_cust_address, container, false); 
       return rootView; 
    } 
} 

public static class DummySectionFragment extends Fragment { 

    public static final String ARG_SECTION_NUMBER = "section_number"; 

    public DummySectionFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(
       R.layout.fragment_modify_cust_basic, container, false); 
     return rootView; 
    } 
} 
} 

입니다 : 이것은 내 활동 코드) :

08-01 11:33:02.445: E/AndroidRuntime(10461): FATAL EXCEPTION: main 
08-01 11:33:02.445: E/AndroidRuntime(10461): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapp/com.example.myapp.ModifyCustActivity}: java.lang.NullPointerException 
08-01 11:33:02.445: E/AndroidRuntime(10461): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at android.app.ActivityThread.access$700(ActivityThread.java:140) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at android.os.Looper.loop(Looper.java:137) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at android.app.ActivityThread.main(ActivityThread.java:4921) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at java.lang.reflect.Method.invokeNative(Native Method) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at java.lang.reflect.Method.invoke(Method.java:511) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at dalvik.system.NativeStart.main(Native Method) 
08-01 11:33:02.445: E/AndroidRuntime(10461): Caused by: java.lang.NullPointerException 
08-01 11:33:02.445: E/AndroidRuntime(10461): at com.example.myapp.ModifyCustActivity.setupTitleSpinner(ModifyCustActivity.java:102) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at com.example.myapp.ModifyCustActivity.onCreate(ModifyCustActivity.java:93) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at android.app.Activity.performCreate(Activity.java:5206) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
08-01 11:33:02.445: E/AndroidRuntime(10461): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 
08-01 11:33:02.445: E/AndroidRuntime(10461): ... 11 more 
:

여기
<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:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".ModifyCustActivity$DummySectionFragment" > 

    <EditText 
     android:id="@+id/txtFirstName" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:ems="10" 
     android:hint="@string/fname" 
     android:inputType="textPersonName|textCapWords" 
     android:textColor="#FFFFFF" > 

     <requestFocus /> 
     </EditText> 

    <EditText 
     android:id="@+id/txtLastName" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/txtFirstName" 
     android:ems="10" 
     android:hint="@string/lname" 
     android:inputType="textPersonName|textCapWords" 
     android:textColor="#FFFFFF" > 

    </EditText> 

    <EditText 
     android:id="@+id/txtMobileNumber" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/txtLastName" 
     android:ems="10" 
     android:hint="@string/mobile" 
     android:inputType="phone" 
     android:textColor="#FFFFFF" /> 

    <EditText 
     android:id="@+id/txtDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/txtMobileNumber" 
     android:ems="10" 
     android:hint="@string/dob" 
     android:inputType="date" 
     android:textColor="#FFFFFF" /> 

    <Spinner 
     android:id="@+id/spnTitle" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/txtDate" 
     android:textColor="#FFFFFF" /> 

</RelativeLayout> 

내 로그 캣의 출력

나는 android development를 처음 사용합니다.

+0

102 행의 ModifyCustActivity.java에는 무엇이 있습니까? –

+0

menifest.xml이 FragmentActivity가 등록되어 있는지 확인하십시오. – Pradeep

+0

@MocialovBoris'titleSpinner.setAdapter (adapter); // 예외는 여기에 있습니다 ' –

답변

0

내가 액세스하려고하는보기가 별도의 조각 XML 파일에 포함되어 있기 때문에이 문제가 발생합니다. 이 작업을 수행하는 방법에 대해 별도의 질문을했습니다. here. 귀하의 응답 녀석 주셔서 감사합니다.

0

activity_modify_cust.xml에서 ViewPager보기는 어디에 있습니까? 당신은 XML 파일에없는 viewId를 얻으려고합니다. 아래에 주어진

mViewPager = (ViewPager) findViewById(R.id.pager); 
mViewPager.setAdapter(mSectionsPagerAdapter); 

// 그래서 당신에게 널 포인터 예외

+0

ops 언급 예외는 @ titleSpinner에서 발생합니다.setAdapter (어댑터)'; – Raghunandan

0

을주는이 줄 당신은 decleare한다 회 글로벌 :

그래서

public class ModifyCustActivity extends FragmentActivity implements ActionBar.TabListener { 

    Spinner spinner; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_modify_cust); 
    spinner = (Spinner) findViewById(R.id.spnTitle); 
     ..... 
    setupTitleSpinner(); 

    } 
    private void setupTitleSpinner() {  

    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
     R.array.titles, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); // spinner is now global 
} 
} 

당신이 데이터에 액세스하기 위해 노력하고 있기 때문에 그건 정의되지 않았습니다. 당신이 "setContentView"를 해제했기 때문에 findViewById가 항목을 찾을 수 있기 때문에

+0

제안 해 주신 데 대해 감사드립니다. 전 세계적으로 만들었으며 (다른 사람들도 전 세계를 알게되었습니다), 불행히도 그 문제는 해결되지 않았습니다. 나는 여전히 널 포인터 예외를 얻고 있는데, 이번에는'setupTitleSpinner()'를 호출 할 때 –

+0

@Teifi 당신은 하나의 XML을 setcontentview하지만 다른 XML에있는 스피너를 초기화한다. 그 명백한 당신 NPE – Raghunandan

+0

얻을 @ Raghunandan 아마 당신에게 분명하지만 내가 내 질문에 말했듯이 나는 안드로이드에 새로운입니다. 이 액티비티에서 사용할 XML 파일이 많습니다 .ContentView를 모두 설정해야합니까? –