这是我的堆栈跟踪:
08-16 10:23:40.006 19022-19022/com.world.innov.ebilling E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.world.innov.ebilling, PID: 19022
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.world.innov.ebilling/com.world.innov.ebilling.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.os.Bundle.putString(java.lang.String, java.lang.String)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.os.Bundle.putString(java.lang.String, java.lang.String)' on a null object reference
at com.world.innov.ebilling.MainActivity.onCreate(MainActivity.java:52)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
这是我的 Activity :
import java.util.HashMap;
import com.daimajia.slider.library.SliderLayout;
import com.daimajia.slider.library.SliderTypes.BaseSliderView;
import com.daimajia.slider.library.SliderTypes.BaseSliderView.OnSliderClickListener;
import com.daimajia.slider.library.SliderTypes.DefaultSliderView;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.Button;
public class MainActivity extends Activity implements OnSliderClickListener {
public static final String MY_PREFS_NAME = "MyPrefsFile";
private SliderLayout mDemoSlider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
mDemoSlider = (SliderLayout) findViewById(R.id.slider);
HashMap<String, Integer> file_maps = new HashMap<String, Integer>();
file_maps.put("A", R.drawable.invoicebyhand);
file_maps.put("B", R.drawable.invoicebymobile);
file_maps.put("C", R.drawable.analysis);
for (String name : file_maps.keySet()) {
DefaultSliderView defaultSliderView = new DefaultSliderView(this);
// initialize a SliderLayout
defaultSliderView
.description(name)
.image(file_maps.get(name))
.setScaleType(BaseSliderView.ScaleType.Fit)
.setOnSliderClickListener(this);
//add your extra information
defaultSliderView.getBundle()
.putString("extra", name);
mDemoSlider.addSlider(defaultSliderView);
}
mDemoSlider.setPresetTransformer(SliderLayout.Transformer.RotateUp);
mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
mDemoSlider.stopAutoCycle();
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String pin = prefs.getString("pin", "");
if (pin.equals("")) {
disableLetsGo();
Intent i = new Intent(this, TOCActivity.class);
startActivity(i);
} else {
disableSignUp();
}
}
@Override
public void onSliderClick(BaseSliderView slider) {
// TODO Auto-generated method stub
}
}
我的问题是“有人能明白为什么我在第 52 行遇到空指针异常吗?我猜是 defaultSliderView”?
line 52 is : defaultSliderView.getBundle()
.putString("extra", name);
我正在使用 android studio 和 22.0.1 buildtoolversion。当我在 eclipse 上做这个项目时,我没有遇到这个问题。这是我第一次使用android studio。我成功地完全迁移了项目,并且遇到了运行时异常。我使用的是daimajia 的androidimageslider。
更新:defaultSliderView 返回空包(感谢@HariRam)。我应该如何继续或者有什么可以替换 bundle 吗?
更新2:我删除了第 52 行。它现在可以工作。
最佳答案
defaultSliderView.getBundle()
返回 null,因此您尝试将值放入 null 包中。因此,您的应用程序崩溃了。
defaultSliderView.getBundle() .putString("extra", name);
删除此行不会对您的应用产生任何不良影响,因此您应该将其删除。
关于android - AndroidImageSlider DefaultSliderView 的空指针异常在 Android Studio 中,Build 22.0.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32038155/