2014-07-11 2 views
0

나는 Android가 매우 새로운 기능입니다. 실례합니다. 내 잘못을 찾지 못했습니다. 에뮬레이터에서 응용 프로그램을 여는 동안 NullPointerException에 직면하고 있습니다. 로그에 "구성 요소 정보를 시작할 수 없습니다"가 표시됩니다. 도와주세요.Spinner를 사용하는 동안 구성 요소 정보를 시작할 수 없습니다.

package com.myworks.converter; 

    import android.os.Bundle; 
    import android.support.v4.app.Fragment; 
    import android.support.v7.app.ActionBarActivity; 
    import android.view.LayoutInflater; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.AdapterView; 
    import android.widget.AdapterView.OnItemSelectedListener; 
    import android.widget.ArrayAdapter; 
    import android.widget.Spinner; 

    public class MainActivity extends ActionBarActivity implements OnItemSelectedListener 
    { 

    private Spinner spinner; 
    private static final String items[] = {"Length", "Weight", "Temperature"}; 

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

     spinner = (Spinner)findViewById(R.id.spinner); 

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

     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 
     spinner.setOnItemSelectedListener(this); 

     if (savedInstanceState == null) 
     { 
      getSupportFragmentManager().beginTransaction() 
        .add(R.id.container, new PlaceholderFragment()).commit(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    /** 
    * A placeholder fragment containing a simple view. 
    */ 
    public static class PlaceholderFragment extends Fragment { 

     public PlaceholderFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_main, container, 
        false); 
      return rootView; 
     } 
    } 

    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position,long id) 
    { 
     switch (position) 
     { 
      case 0: 
      // Whatever you want to happen when the first item gets selected 
       break; 
      case 1: 
      // Whatever you want to happen when the second item gets selected 
       break; 
      case 2: 
      // Whatever you want to happen when the thrid item gets selected 
     } 

    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) 
    { 
     // TODO Auto-generated method stub 

    } 

    } 

fragment_main.xml

<LinearLayout 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="com.myworks.converter.MainActivity$PlaceholderFragment" > 

    <Spinner 
     android:id="@+id/spinner" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
    </LinearLayout> 

오류 로그는

07-12 03:14:08.603: D/AndroidRuntime(1862): Shutting down VM 
07-12 03:14:08.603: W/dalvikvm(1862): threadid=1: thread exiting with uncaught exception (group=0xb1d1eb20) 
07-12 03:14:08.713: E/AndroidRuntime(1862): FATAL EXCEPTION: main 
07-12 03:14:08.713: E/AndroidRuntime(1862): Process: com.myworks.converter, PID: 1862 
07-12 03:14:08.713: E/AndroidRuntime(1862): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myworks.converter/com.myworks.converter.MainActivity}: java.lang.NullPointerException 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at android.os.Handler.dispatchMessage(Handler.java:102) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at android.os.Looper.loop(Looper.java:136) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at java.lang.reflect.Method.invoke(Method.java:515) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at dalvik.system.NativeStart.main(Native Method) 
07-12 03:14:08.713: E/AndroidRuntime(1862): Caused by: java.lang.NullPointerException 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at com.myworks.converter.MainActivity.onCreate(MainActivity.java:34) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at android.app.Activity.performCreate(Activity.java:5231) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
07-12 03:14:08.713: E/AndroidRuntime(1862):  ... 11 more 
07-12 03:14:17.303: I/Process(1862): Sending signal. PID: 1862 SIG: 9 
+1

당신의 스피너가 없습니다 활동의 조각입니다. – njzk2

+0

@ njzk2가 정확합니다. 단편이 첨부되기 전에 회 전자에 액세스하려고하므로 null입니다. – erik

답변

0

당신의 충돌의 원인은 여기에 있습니다 :

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    spinner = (Spinner)findViewById(R.id.spinner); // <------------- returns null! 
} 


왜?

조각 뷰 (R.id.spinner가 조각 레이아웃 xml에서 선언 됨)에 액세스하려고 시도했기 때문에 해당 액티비티의 onCreate 내에있는 에서 조각이 완전히 팽창되기 전에 -입니다.


는 조각 자체 내에서 조각 뷰를 참조 할 수 있도록 논리를 변경, 수정하려면 :

class PlaceHolderFragment { 
    ..... 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.event_log, container, false); 
     spinner = (Spinner)findViewById(R.id.spinner); 
     // here spinner != null <------------------------ 
     return view; 
    } 

} 
관련 문제