我在我的应用程序中添加了一个微调器,应用程序崩溃了,并且没有建立起来。微调器显示存储中的.mp3文件名项。有人能说出崩溃的原因;我的代码出了什么问题? 如果您需要更多代码,请告诉我。
以下是MainActivity的一部分
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
//import android.view.Window;
public class MainActivity extends AppCompatActivity implements
AdapterView.OnItemSelectedListener {
private Integer images[]={R.drawable.pic1, R.drawable.pic21,
R.drawable.pic3, R.drawable.pic2, R.drawable.pic4,
R.drawable.pic5, R.drawable.pic6, R.drawable.pic30,
R.drawable.pic31, R.drawable.pic26, R.drawable.pic7, R.drawable.pic25,
R.drawable.pic8, R.drawable.pic9,
R.drawable.pic10, R.drawable.pic27, R.drawable.pic28,
R.drawable.pic29, R.drawable.pic11, R.drawable.pic22, R.drawable.pic23,
R.drawable.pic13, R.drawable.pic14,
R.drawable.pic15, R.drawable.pic16, R.drawable.pic24,
R.drawable.pic17, R.drawable.pic18, R.drawable.pic19
, R.drawable.pic20, R.drawable.pic12};
.........
.........
// for spinner
class Mp3Filter implements FilenameFilter {
public boolean accept (File dir, String name){
return (name.endsWith(".mp3"));
}
}
// spinner
public final String SD_PATH =new String("/sdcard/music/");
public List<String> songs = new ArrayList<String>();
Spinner mySpinner = (Spinner)findViewById(R.id.spinner1);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
.....
.....
mp = MediaPlayer.create(this, R.raw.shlomoimagine);
mp.start();
// currImage = 0;
setContentView(R.layout.activity_main);
//initializing the loop at the beginning of the app run
initializeImageSwitcher();
setImageRotateListener();
// handler.post(runnable);
updatePlayList();
...
...
private void updatePlayList() {
File home=new File(SD_PATH);
File[] files = home.listFiles(new Mp3Filter());
if(files.length>0){
for(File file:files){
songs.add(file.getName());
}
ArrayAdapter<String> songList = new ArrayAdapter<String>
(this,R.layout.song_item,songs);
mySpinner.setAdapter(songList);
mySpinner.setOnItemSelectedListener(this);
}
}
这些是Manifest的部分
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.nati_1.ImageGallerySwitching_v8_2">
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.NoActionBar">
song_item.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView android:id="@+id/text1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="20dp"
android:textStyle="bold"
/>
和来自logcat
12-20 00:22:48.014 12887-12887/com.nati_1.ImageGallerySwitching_v6
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.nati_1.ImageGallerySwitching_v6, PID: 12887
java.lang.RuntimeException: Unable to instantiate activity
ComponentInfo{com.nati_1.ImageGallerySwitching_v6/com.nati_1.ImageGallerySwitching_v8_2.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:2614)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2787)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1504)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6247)
at java.lang.reflect.Method.invoke(Native Method)
at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
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:116)
at android.support.v7.app.AppCompatDelegateImplV9.<init>
(AppCompatDelegateImplV9.java:147)
at android.support.v7.app.AppCompatDelegateImplV11.<init>
(AppCompatDelegateImplV11.java:27)
at android.support.v7.app.AppCompatDelegateImplV14.<init>
(AppCompatDelegateImplV14.java:50)
at android.support.v7.app.AppCompatDelegateImplV23.<init>
(AppCompatDelegateImplV23.java:29)
at android.support.v7.app.AppCompatDelegateImplN.<init>
(AppCompatDelegateImplN.java:29)
at
android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:197)
at
android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:181)
at
android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:521)
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190)
at com.nati_1.ImageGallerySwitching_v8_2.MainActivity.<init>(MainActivity.java:225)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newActivity(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2604)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2787)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1504)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6247)
at java.lang.reflect.Method.invoke(Native Method)
答案 0 :(得分:1)
问题定义为:
java.lang.NullPointerException: Attempt to invoke virtual method
'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference
问题是您正在为Spinner
创建一个变量并同时获取它们的参考:
Spinner mySpinner = (Spinner)findViewById(R.id.spinner1);
但这是不正确的,您必须在onCreate()
方法中获取引用,有些像这样:
Spinner mySpinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mySpinner = (Spinner)findViewById(R.id.spinner1);
...
...
}