2014-03-03 50 views
0

我的項目一直運行良好,直到我爲我的微調控制器聲明瞭onItemSelctedListener .. 現在我的項目沒有運行..並且日誌貓顯示以下錯誤...Log cat gibbrish ... spinner,onItemSelectedListner

03-03 01:59:08.465: E/AndroidRuntime(1401): 
    FATAL EXCEPTION: main 
    Process: com.example.testqstn, PID: 1401 
    java.lang.RuntimeException: Unable to instantiate activity 
     ComponentInfo{com.example.testqstn/com.example.testqstn.MainActivity}: 
     java.lang.IllegalStateException: System services not available to Activities 
     before onCreate() 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
    at android.app.ActivityThread.access$800(ActivityThread.java:135) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5017) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate() 
    at android.app.Activity.getSystemService(Activity.java:4532) 
    at android.widget.ArrayAdapter.init(ArrayAdapter.java:310) 
    at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153) 
    at com.example.testqstn.MainActivity.<init>(MainActivity.java:39) 
    at java.lang.Class.newInstanceImpl(Native Method) 
    at java.lang.Class.newInstance(Class.java:1208) 
    at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112) 

現在的點要注意的是

1)在所有沒有被實施的主要活動方式..甚至沒有super.onCreate

現在這是我輸入的代碼..但由於它沒有被執行,id odn知道生根粉它relevence ..

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    main(); 
} 

public void main() 
{ 
    TextView textyear,textsubject,textschema; 
    Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/Roboto/Roboto-Light.ttf"); 
    textyear = (TextView)findViewById(R.id.textyear); 
    textsubject = (TextView)findViewById(R.id.textsubject); 
    textschema = (TextView)findViewById(R.id.textscheme); 

    textyear.setTypeface(typeface); 
    textsubject.setTypeface(typeface); 
    textschema.setTypeface(typeface); 

    year = (Spinner)findViewById(R.id.spinyear); 
    subject = (Spinner)findViewById(R.id.spinsub); 
    scheme = (Spinner)findViewById(R.id.spinscheme); 
    schemetxt = scheme.toString(); 
    buttonSound = MediaPlayer.create(MainActivity.this,R.raw.sound); 
    btn=(Button)findViewById(R.id.button); 
    btn.setBackgroundResource(R.drawable.selector); 
    // set dynamic value change 

    scheme.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      // TODO Auto-generated method stub 
      listYear(schemetxt); 

     } 

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

     } 
    }); 
    btn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) 
     { 
      pdfSelection(v); 
     } 
     }); 


} 
@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; 
} 

這是列表視圖功能

myAdapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, listYear); 
    myAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    year.setAdapter(myAdapter1); 

究竟什麼是錯誤?在此先感謝..

這是B4我的OnCreate功能

Button btn; 
Spinner year , subject , scheme; 
String yeartxt = null; 
String subtxt = null; 
String schemetxt = null; 
List<String> listYear; 
ArrayAdapter<String> myAdapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, listYear); 
MediaPlayer buttonSound; 
+0

你有一些代碼的onCreate發佈相同 – Raghunandan

+0

'Gibbrish'之前 - 你的意思是確切的,詳細的說明的運行時錯誤,包括原因? – Simon

+0

well gibbrish給我... :) – Alvin

回答

5

關鍵部分的代碼是在這裏:

Caused by: java.lang.IllegalStateException: System services not available to Activities before onCreate() 

再往下的堆棧跟蹤:

at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153) 
at com.example.testqstn.MainActivity.<init>(MainActivity.java:39) 

所以您正在將ArrayAdapter初始化爲您的MainActivity的成員變量,特別是在行中39的MainActivity.java。你不能那樣做。您可以將其聲明爲成員變量,但在onCreate()或更高版本中將其初始化(使用new)。

從更新的代碼有問題,更換報關+初始化

ArrayAdapter<String> myAdapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, listYear); 

只聲明

ArrayAdapter<String> myAdapter1; 

和地方移動初始化

myAdapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, listYear); 

onCreate()myAdapter1之間用於第一次提姆即

+0

準確和重點。 – Raghunandan

+0

@laalto ..感謝您的及時回覆,但..我已經用我的函數調用中新的初始化它... pls chk修訂版 – Alvin

+0

@Alvin stacktrace否則說。 ''指的是構造函數/成員變量的初始化,並且您已將該部分從您發佈的代碼中刪除。特別是'MainActivity.java'的第39行。 – laalto

2

產生的原因:java.lang.IllegalStateException:系統服務的onCreate之前沒有 爲活動提供()

上下文可用一旦創建活動。

http://developer.android.com/reference/android/content/Context.html

編輯:

ArrayAdapter<String> myAdapter1; 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
// make sure listYear is populated before this 
myAdapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, listYear); 

而且重命名listYear(schemetxt);List<String> listYear將有助於可讀性 -