我试图从sharedPreferences中删除一个特定的对象,我已经尝试了几次,但我不知道如何正确地做到这一点.
这些是我用来保存和排除SharedPreferences中的Disciplines的两种方法:
public void saveDisciplineData(Discipline discipline){
editor.putString("Discipline" + count, gson.toJson(discipline));
editor.commit();
count++;
}
public void excludeDisciplineData(Discipline discipline){
for (int i = 0; i < count ; i++) {
Discipline d = gson.fromJson(sp.getString("discipline" + i, ""), new TypeToken<Discipline>() {
}.getType());
if (d.equals(discipline)){
editor.remove("discipline" + i);
break;
}
}
editor.commit();
count--;
}
Run Code Online (Sandbox Code Playgroud)
如何删除特定的学科对象?
在图片上,您可以看到布尔变量采用默认值,即使SharedPreferences右键中存在键值对.是什么导致这个?在代码中,这是onCreate方法的结尾.在此之后,该onMapReady方法被调用(from com.google.android.gms.maps.OnMapReadyCallback),其中我检查SAME布尔值,以查看是否我必须在地图上放置一些标记.在该方法中,getBoolean()行为是正确的,默认值被忽略.这对我没有任何意义,任何人都可以帮助我吗?
当我尝试在MainActivity中初始化一个监听器时,我得到一个编译器错误无法解析方法findPreferenceOnSharedPreferencesChanged.根据这里的答案:
应该从实现PreferenceActivity接口的类中调用findPreference()
但我不明白这样做的代码是什么.如何摆脱编译器错误并成功设置侦听器以进行首选项更改?
MainActivity.java
public class MainActivity extends FragmentActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
private SharedPreferences.OnSharedPreferenceChangeListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
//Test preference menu
listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals("pref_wood")) {
Preference woodPref = findPreference(key); //COMPILER ERROR HERE
MainActivity.getGLSurfaceView().setTexture("");
// Set summary to be the user-description for the selected value
woodPref.setSummary(sharedPreferences.getString(key, ""));
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有这个代码从edittext获取SharedPreferences的值,然后将其发送到其他活动,不知何故我不能从其他活动使用它我想念我的代码任何建议,提前谢谢
- 我的第一个活动,从edittext获取SharedPreferences,我想从它发送值到第二个活动
public class NationalId extends Activity {
public static final String MyPREFERENCES = "MyPrefs" ;
public static final String Name = "nameKey";
SharedPreferences sharedpreferences;
final Context context = this;
private Button button;
private TextView result;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_national_id);
// components from main.xml
button = (Button) findViewById(R.id.button1);
result = (TextView) findViewById(R.id.tv1);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
// add button listener
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// get prompts.xml view
LayoutInflater li = …Run Code Online (Sandbox Code Playgroud) 我试着打电话getSharedPreferences申请......
public class App extends Application{
public App() {
SharedPreferences prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
}
}
Run Code Online (Sandbox Code Playgroud)
......但我有一个NullPointerException:
java.lang.NullPointerException: Attempt to invoke virtual method
'android.content.SharedPreferences
android.content.Context.getSharedPreferences(java.lang.String, int)'
on a null object reference
Run Code Online (Sandbox Code Playgroud)
我也试过这个并得到了同样的例外:
Context con = getApplicationContext();
Run Code Online (Sandbox Code Playgroud)
我该怎么打电话getSharedPreferences?
我对 Android 相当陌生,想制作一个允许用户使用 Firebase 存储上传图片的应用程序。在他们登录后,我将他们的 Uid 发送到 SharedPreferences,以便稍后在我的 imageupload 活动中检索它。我需要它,以便当图像被发送到 Firebase 时,它会被放在他们的用户 ID 的文件夹下。
这是我当前检索 Uid 的登录活动:
FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseAuth.AuthStateListener authListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if (firebaseUser != null) {
String userId = firebaseUser.getUid();
sharedPref = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("firebasekey", userId);
editor.commit();
Run Code Online (Sandbox Code Playgroud)
这是我的图片上传活动:
sharedPref = getPreferences(MODE_PRIVATE);
String UserId = sharedPref.getString("firebasekey", "1");
StorageReference storageRef= FirebaseStorage.getInstance().getReference();
StorageReference mountainsRef = storageRef.child("uploads/"+UserId+System.currentTimeMillis());
Run Code Online (Sandbox Code Playgroud)
帮助将不胜感激。
android firebase firebase-authentication firebase-realtime-database android-sharedpreferences
我有一个带有匕首设置的项目,具有以下提供者方法:
@Module(...)
abstract class AppModule {
@Module
companion object {
...
@Provides
@Singleton
@JvmStatic
fun provideSharedPreferences(@AppContext context: Context): SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
}
@Binds
@AppContext
@Singleton
abstract fun provideAppContext(application: Application): Context
}
Run Code Online (Sandbox Code Playgroud)
这是来自应用程序的代码onCreate():
override fun onCreate() {
if (BuildConfig.DEBUG) {
StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyDialog()
.build())
StrictMode.setVmPolicy(StrictMode.VmPolicy.Builder()
.detectAll()
.penaltyLog()
.build())
Timber.plant(Timber.DebugTree())
}
...
super.onCreate()
}
Run Code Online (Sandbox Code Playgroud)
在API 27模拟器上运行项目会导致以下行为:

使用以下日志:
D/StrictMode:StrictMode策略违规; 〜duration = 275 ms:android.os.StrictMode $ StrictModeDiskReadViolation:policy = 196671 violation = 2 at android.os.StrictMode $ AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1440)at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java: 251)在java.io.File.exists(File.java:807)的android.app.ContextImpl.getDataDir(ContextImpl.java:2197)在Android上的android.app.ContextImpl.getPreferencesDir(ContextImpl.java:517).在Android.pretent.PreferenceManager.getDefaultSharedPreferences的android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:167)的android.app.ContextImpl.getSharedPreferences(ContextImpl.java:368)上的app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:714) (PreferenceManager.java:526)com.some.package.di.module.AppModule $ Companion.provideSharedPreferences(AppModule.kt:112)...
这意味着,是 …
android disk-io kotlin android-sharedpreferences android-strictmode
我正在尝试从SharedPreference读取Integer数据
public Integer readIntData(String key,int defaultValue){
mSharedPref = context.getApplicationContext().getSharedPreferences(context.getString(R.string.shared_pref_app),Context.MODE_PRIVATE);
return mSharedPref.getInt(key,defaultValue);
}
Run Code Online (Sandbox Code Playgroud)
当我打电话 int value = readIntData("key",1000);
总是抛出异常
java.lang.Boolean不能强制转换为java.lang.Integer
编辑:提供的“重复”不能解决我的问题,因为它没有完全回答我的问题。(关于第二个参数的信息丢失)。
这个问题旨在为新的Android开发人员清除信息,而不是解决我自己的问题。请重新考虑否决票。
所以,这是方法:
getSharedPreferences(string, Context.MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)
我真的无法理解第一个参数的作用。它有什么作用?如果我们保存东西时SharedPreferences使用密钥,为什么会有第一个参数?
我想使用EasyPreferences库:https://github.com/Pixplicity/EasyPreferences
但是出现了这个错误:请在Application类onCreate中调用Builder.setContext().build()
PrefsApplication.java
package ir.korandco.irkhoone_co_app.utility;
import android.app.Application;
import android.content.ContextWrapper;
import com.pixplicity.easyprefs.library.Prefs;
public class PrefsApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Initialize the Prefs class
new Prefs.Builder()
.setContext(this)
.setMode(ContextWrapper.MODE_PRIVATE)
.setPrefsName(getPackageName())
.setUseDefaultSharedPreference(true)
.build();
}
}
Run Code Online (Sandbox Code Playgroud)
MainActivity.java
package ir.korandco.irkhoone_co_app.activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;
import com.daimajia.slider.library.Animations.DescriptionAnimation;
import com.daimajia.slider.library.Indicators.PagerIndicator;
import com.daimajia.slider.library.SliderLayout;
import com.daimajia.slider.library.SliderTypes.BaseSliderView;
import com.daimajia.slider.library.SliderTypes.TextSliderView;
import com.daimajia.slider.library.Tricks.ViewPagerEx;
import com.pixplicity.easyprefs.library.Prefs;
import …Run Code Online (Sandbox Code Playgroud) 我想计算 List 中物品的价格并将值存储在sharedpreference. 每个项目都有一个采用双精度形式的价格。问题是当我使用我的方法时,它只考虑列表中的一个项目并计算该值。我正在使用 aNumberPicker来更改项目的数量。
这是我的适配器,用于处理将显示在 上的项目列表RecyclerView:
public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> {
private List<SingleItem> items;
private SessionManager sessionManager;
private Context context;
private int pos;
public CartAdapter() {
}
public CartAdapter(Context context, List<SingleItem> items) {
this.items = items;
this.context = context;
sessionManager = new SessionManager(context);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cartitem, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) { …Run Code Online (Sandbox Code Playgroud) android for-loop android-recyclerview android-sharedpreferences