1
私は、特定のシステムファイルからCPU周波数(利用可能な周波数、最大および最小周波数)値を読み取り、2スピナーに追加し、選択したものを書き込みますそれらのスピナー)を他のシステムファイルにコピーします。問題は、常に最大周波数(最初のスピナー)の値を最小周波数(2番目のスピナー)ファイル(または同様のもの、正確な問題を考えることができない)に書き込みます。ここでは、コードがあります:このようなコードをコンパイルするAndroid Javaランタイムエラー
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
cmd CMD = new cmd(); //I use a class file to store functions and strings, whose values originate from the mentioned functions.
Spinner spinner = (Spinner) findViewById(R.id.spinner); //maximum frequency.
Spinner spinner2 = (Spinner) findViewById(R.id.spinner2); //minimum frequency.
List<String> categories = new ArrayList<String>();
ArrayAdapter<String> dataAdapterMAX = new ArrayAdapter<String>(this, simple_spinner_item, categories);
ArrayAdapter<String> dataAdapterMIN = new ArrayAdapter<String>(this, simple_spinner_item, categories);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner.setOnItemSelectedListener(this);
spinner2.setOnItemSelectedListener(this);
for (int i = 0; i < CMD.getFreqs.length; i++) //getting frequencies and writing them to a list.
{
categories.add (CMD.getFreqs[i]);
}
dataAdapterMAX.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
dataAdapterMIN.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(dataAdapterMAX);
spinner2.setAdapter(dataAdapterMIN);
int maxFreqPos = dataAdapterMAX.getPosition(CMD.MaxFreq); //selecting default (system provided) frequencies.
int minFreqPos = dataAdapterMIN.getPosition(CMD.MinFreq);
spinner.setSelection(maxFreqPos);
spinner2.setSelection(minFreqPos);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String item = parent.getItemAtPosition(position).toString();
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, item, duration);
toast.show();
switch(parent.getId()) {
case R.id.spinner:
CMD.sudo("echo " + item + " > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq"); //executing a bash command to select the frequency.
break;
case R.id.spinner2:
CMD.sudo("echo " + item + " > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq");
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
は、私はそれを開こうとするたびしかし、アプリがすぐにクラッシュし、エラーを生成しません。 05-03 18:15:29.115 21558から21558/XXX E/AndroidRuntime:致命的な例外:メイン
Process: xxx, PID: 21558
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{xxx/xxx.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2553)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771)
at android.app.ActivityThread.access$900(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1432)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5912)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:120)
at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:155)
at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:31)
at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:55)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:205)
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190)
at xxx.MainActivity.<init>(MainActivity.java:20)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.Class.newInstance(Class.java:1690)
at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2543)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2771)
at android.app.ActivityThread.access$900(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1432)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5912)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
05-03 18:16:19.915 21558-21558/xxx I/Process: Sending signal. PID: 21558 SIG: 9
すべてのヘルプは高く評価され、ここで、デバッグログ(エラーのみ)があります。
AppCompatDelegateImplBaseクラスを初期化するとき、現在の例外が原因 'findViewById(にあるnullpointerexeptionを持っている)は、'あなたのクラスの一番上に持って呼び出します。しかし、それらの 'ArrayAdapter'もインスタンス化することはできません。 'setContentView()'の後に、これらの初期化をすべてonCreate()に移動します。 –