2014-03-13 51 views
-1

我传递并显示到另一个活动从一个活动值,并利用这些字符串这样使得文件名:空指针SharedPreferences

AU_20140312_160107_65.jpg 

AU - 简单的前缀

20140312_160107 - yyyyMMdd_HHmmss

- event_id(从LoginActivity.java获取)

- operative_id(从LoginActivity.java获得)

见下面我的代码:

LoginActivity.java:

static SharedPreferences sharedprefs; 

static String event_id, operative_id ; 

sharedprefs = getApplicationContext().getSharedPreferences(
    "com.example.app", Context.MODE_PRIVATE); 


Intent intent = getIntent(); 
event_id = intent.getStringExtra("event_id"); 
sharedprefs.edit().putString("EVENT_ID", event_id).commit(); 
operative_id = intent.getStringExtra("operative_id"); 
sharedprefs.edit().putString("OPERATIVE_ID", operative_id).commit(); 

CameraLauncherActivity.java:

static File getOutputMediaFile() { 


      String event_ID = LoginActivity.sharedprefs.getString("EVENT_ID", null); 
      Log.d("shared >>> eventID : ", event_ID); 
      String operative_ID = LoginActivity.sharedprefs.getString("OPERATIVE_ID", null); 
      Log.d("shared >>> operativeID : ", operative_ID); 

      timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss") 
      .format(new Date());    

      // file name 
       mediaFile = new File(LoginActivity.mediaStorageDir.getPath() + File.separator 
     + "AU_" + timeStamp + "_" + event_ID + operative_ID + ".jpg"); 

      return mediaFile; 
     } 

发动第一次日志说

shared >>> eventID :(29917): 12 
shared >>> operativeID :(29917): 4 

就像你可以在上面看到,一切正常,并获得EVENTID和使用记录以及

,但一旦我operativeID将关闭后再次启动我的应用程序,并caputre图像,然后得到NPE日志

FATAL EXCEPTION: main 
java.lang.NullPointerException: println needs a message 
at android.util.Log.println_native(Native Method) 
at android.util.Log.d(Log.java:155) 
app.mac.Camera.CameraLauncherActivity.getOutputMediaFile(CameraLauncherActivity.java:386) 
at app.mac.Camera.CameraLauncherActivity$2.onPictureTaken(CameraLauncherActivity.java:362) 
at android.hardware.Camera$EventHandler.handleMessage(Camera.java:789) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4921) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1036) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:803) 
at dalvik.system.NativeStart.main(Native Method) 
+0

你需要保存值onPause()并加载旧值在onResume() –

回答

1

而不是直接将值分配给变量event_id和operative_id将它们存储在数据库或首选项中。

而不是像这样直接分配这个: event_id = intent.getStringExtra(“event_id”); operative_id = intent.getStringExtra(“operative_id”);

检查null的intent.getStringExtra(“event_id”)和intent.getStringExtra(“operative_id”)。

如果从存储值中无效获取。 如果不为空,则分配给变量并在下一次用新的值覆盖存储的值。

+0

我的意思是SharedPreferences。参考这个问题来了解如何去做。 http://stackoverflow.com/questions/3624280/how-to-use-sharedpreferences-in-android-to-store-fetch-and-edit-values – AndroidMechanic

+0

更多的类 - [SharedPreferences](http:// developer .android.com/reference/android/content/SharedPreferences.html) – AndroidMechanic

+0

是啊我用SQLite DB来解决我的问题 – Sun

0
//Initialization 
SharedPreferences _mypref = getApplicationContext().getSharedPreferences("mypref", 0); 

//store data in shared preferences 
Editor editor = _mypref.edit(); 

//Storing boolean - true/false;  
editor.putBoolean("key_name", true); 

//Storing string 
editor.putString("key_name", "string value"); 

//Storing integer 
editor.putInt("key_name", "int value");  

//Storing float 
editor.putFloat("key_name", "float value");  

//Storing long 
editor.putLong("key_name", "long value"); 

//commit changes 
editor.commit();  

// retrive data 

//getting String 
_mypref .getString("key_name", null); 

//getting Integer 
_mypref .getInt("key_name", null);   

//getting Float 
_mypref .getFloat("key_name", null); 

//getting Long 
_mypref .getLong("key_name", null);  


//getting boolean 
_mypref.getBoolean("key_name", null);  


//remove Data 
editor.remove("name"); 
editor.commit(); 


//Clear all Data 
editor.clear(); 
editor.commit(); 
+2

@Moon For More你可以参考这个:http://androiddevelopmentworld.blogspot.in/2013/04/shared -preferences-in-android.html :) –