PDA

View Full Version : مشکل در SharedPreferences



dc-master
جمعه 02 اسفند 1392, 09:22 صبح
سلام
من با استفاده از SharedPreferences فونت و سایز متن ها رو تنظیم میکنم.
سایز متن ها مشکلی نداره ولی وقتی از برنامه خارج میشم و دوباره وارد میشم فونت برمیگرده به حالت پیشفرض ولی سایز متن ها روی حالتی که کاربر انتخاب کرده می مونه.
کد صفحه تنظیمات:



package com.example.test;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.Spinner;
import android.widget.TextView;

public class sett extends Activity {

boolean chbt;
int size;
String font;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.setting);

final Typeface yekan=Typeface.createFromAsset(getAssets(), "fonts/yekan.TTF");
final Typeface titr=Typeface.createFromAsset(getAssets(), "fonts/titr.TTF");
final Typeface homa=Typeface.createFromAsset(getAssets(), "fonts/homa.ttf");
final Typeface bkoodkbd=Typeface.createFromAsset(getAssets(), "fonts/bkoodkbd.TTF");
final Typeface elham=Typeface.createFromAsset(getAssets(), "fonts/elham.TTF");
final Typeface farnaz=Typeface.createFromAsset(getAssets(), "fonts/farnaz.ttf");
final Typeface homab=Typeface.createFromAsset(getAssets(), "fonts/homab.ttf");
final Typeface dastnevis=Typeface.createFromAsset(getAssets(), "fonts/dastnevis.otf");
final Typeface khodkar=Typeface.createFromAsset(getAssets(), "fonts/khodkar.ttf");
final Typeface mitra=Typeface.createFromAsset(getAssets(), "fonts/mitra.ttf");
TextView txt11=(TextView) findViewById(R.id.textview);
TextView txt12=(TextView) findViewById(R.id.textView3);


final TextView exam =(TextView) findViewById(R.id.exam);
SeekBar skb=(SeekBar) findViewById(R.id.seek1);
Spinner spin=(Spinner) findViewById(R.id.spin1);
Button save=(Button) findViewById(R.id.sumbit);
final SharedPreferences shp = getSharedPreferences("sett", MODE_PRIVATE);

List<String> list = new ArrayList<String>();
list.add("BYekan");
list.add("BTitr");
list.add("BHoma");
list.add("BFarnaz");
list.add("BKoodkBd");
list.add("BMitra");
list.add("BHomaBd");
list.add("BElham");
list.add("Far_DastNevis");
list.add("Far_khodkar");
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layo ut.simple_spinner_dropdown_item);
spin.setAdapter(dataAdapter);

size = shp.getInt("size", 20);
skb.setMax(60);

skb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar arg0) {}
public void onStartTrackingTouch(SeekBar arg0) {}
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
exam.setTextSize(arg1);
size = arg1;
}
});

font = shp.getString("font", "yekan");
spin.setOnItemSelectedListener(new OnItemSelectedListener() {

public void onItemSelected(AdapterView<?> parent, View selectedItemView,
int position, long id) {

switch(position)
{
case 0:
font="yekan";
exam.setTypeface(yekan);
break;
case 1:
font="titr";
exam.setTypeface(titr);
break;
case 2:
font="BHoma";
exam.setTypeface(homa);
break;
case 3:
font="BFarnaz";
exam.setTypeface(farnaz);
break;
case 4:
font="BKoodkBd";
exam.setTypeface(bkoodkbd);
break;
case 5:
font="BMitra";
exam.setTypeface(mitra);
break;
case 6:
font="BHomaBd";
exam.setTypeface(homab);
break;
case 7:
font="BElham";
exam.setTypeface(elham);
break;
case 8:
font="Far_DastNevis";
exam.setTypeface(dastnevis);
break;
case 9:
font="Far_khodkar";
exam.setTypeface(khodkar);
break;
default:
break;
}

}
public void onNothingSelected(AdapterView<?> arg0) {}
});

save.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
SharedPreferences.Editor shpE = shp.edit();
shpE.putString("font", font);
shpE.putInt("size", size);
shpE.commit();
Intent intent = new Intent(getApplicationContext(), Main.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXITt", true);
startActivity(intent);
Intent sp=new Intent(sett.this,splash.class);
startActivity(sp);

}
});


}

}




کد صفحه ای که فونت و سایزش تغییر میکنه


SharedPreferences shp = getSharedPreferences("sett", MODE_PRIVATE);
String font=shp.getString("font", "yekan");
if(font=="yekan"){
txt1.setTypeface(yekan);
}else if(font=="titr"){
txt1.setTypeface(titr);
}
else if(font=="BHoma"){
txt1.setTypeface(homa);
}
else if(font=="BFarnaz"){
txt1.setTypeface(farnaz);
}
else if(font=="BKoodkBd"){
txt1.setTypeface(bkoodkbd);
}
else if(font=="BHomaBd"){
txt1.setTypeface(homab);
}
else if(font=="BElham"){
txt1.setTypeface(elham);
}
else if(font=="Far_DastNevis"){
txt1.setTypeface(dastnevis);
}
else if(font=="Far_khodkar"){
txt1.setTypeface(khodkar);
}
else if(font=="BMitra"){
txt1.setTypeface(mitra);
}
txt1.setTextSize(size);


:افسرده:

smemamian
جمعه 02 اسفند 1392, 10:12 صبح
چرا انقدر if و esle گذاشتی ؟ از switch استفاده کن یک بار تستش کن.

#root#
جمعه 02 اسفند 1392, 10:20 صبح
سلام
همینطوری چشم خورد : تو کد پایینی از == برای بررسی استفاده میکنی که در مورد String کار درستی نیست و بجای اون باید بدین صورت بررسی کنی :
font.equals("BHoma");

یا

font.equalsIgnoreCase("BHoma");

dc-master
جمعه 02 اسفند 1392, 13:20 عصر
چرا انقدر if و esle گذاشتی ؟ از switch استفاده کن یک بار تستش کن.

فایده ای نداشت
مشکل اینجاست که وقتی از برنامه خارج میشه یادش میره فونت رو کاربر عوض کرده

Hadi.Me
جمعه 02 اسفند 1392, 13:33 عصر
فایده ای نداشت
مشکل اینجاست که وقتی از برنامه خارج میشه یادش میره فونت رو کاربر عوض کرده

خب شما که وقتی کاربر فونت رو عوض میکنه اون رو توی SharedPrefrences ذخیرش نمیکنید.

باید یه SharedPrefrencesEditor تعریف کنید برای ذخیره فونت که من تو کدتون ندیدم

dc-master
جمعه 02 اسفند 1392, 13:41 عصر
خب شما که وقتی کاربر فونت رو عوض میکنه اون رو توی SharedPrefrences ذخیرش نمیکنید.

باید یه SharedPrefrencesEditor تعریف کنید برای ذخیره فونت که من تو کدتون ندیدم
همین کار رو کردم
درضمن سایز متن ها مشکلی نداره فقط فونت بعد ازخروج بر میگرده به حالت پیشفرض



save.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
SharedPreferences.Editor shpE = shp.edit();
shpE.putString("font", font);
shpE.putInt("size", size);
shpE.commit();
finish();
}
});

Hadi.Me
جمعه 02 اسفند 1392, 13:50 عصر
همین کار رو کردم
درضمن سایز متن ها مشکلی نداره فقط فونت بعد ازخروج بر میگرده به حالت پیشفرض

اشکالشو یافتم:

شما وقتی کاربر یه فونت دیگه انتخاب میکنه، اون فونت رو set میکنین اما اون string که اسم فونت رو داره تغییر نمیدید و دوباره همون string رو در SharedPrefrences قرار میدین؛ که یعنی همون فونت قبلی دوباره توی shp ذخیره میشه و موقع اجرای دوباره، فونت قبلی set میشه :چشمک:

dc-master
جمعه 02 اسفند 1392, 15:24 عصر
اشکالشو یافتم:

شما وقتی کاربر یه فونت دیگه انتخاب میکنه، اون فونت رو set میکنین اما اون string که اسم فونت رو داره تغییر نمیدید و دوباره همون string رو در SharedPrefrences قرار میدین؛ که یعنی همون فونت قبلی دوباره توی shp ذخیره میشه و موقع اجرای دوباره، فونت قبلی set میشه :چشمک:


case 1:
font="titr";
exam.setTypeface(titr);
break;




SharedPreferences.Editor shpE = shp.edit();
shpE.putString("font", font);

مشکل اینجاست که وقتی برنامه بسته میشه و دوباره باز میشه فونت برمیگرده به حالت پیش فرض

dc-master
جمعه 02 اسفند 1392, 16:46 عصر
مشکل حل شد
نفهمیدم چطوری حل شد ولی حل شد
ممنون از کمک همه

mohsen22
جمعه 02 اسفند 1392, 22:31 عصر
دوست من ممکنه سورستو بزاری معلوماتمون اضافه و اموزشمون تکمیل بشه ؟ مرسی

dc-master
جمعه 02 اسفند 1392, 22:43 عصر
چشم
این کد صفحه تنظیمات:


final TextView exam =(TextView) findViewById(R.id.exam);
SeekBar skb=(SeekBar) findViewById(R.id.seek1);
Spinner spin=(Spinner) findViewById(R.id.spin1);
Button save=(Button) findViewById(R.id.sumbit);
final SharedPreferences shp = getSharedPreferences("sett", MODE_PRIVATE);
List<String> list = new ArrayList<String>();
list.add("BYekan");
list.add("BTitr");
list.add("BHoma");
list.add("BFarnaz");
list.add("BKoodkBd");
list.add("BMitra");
list.add("BHomaBd");
list.add("BElham");
list.add("Far_DastNevis");
list.add("Far_khodkar");
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layo ut.simple_spinner_dropdown_item);
spin.setAdapter(dataAdapter);
size = shp.getInt("size", 20);
skb.setMax(60);

skb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar arg0) {}
public void onStartTrackingTouch(SeekBar arg0) {}
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
exam.setTextSize(arg1);
size = arg1;
}
});
font = shp.getString("font", "0");
spin.setOnItemSelectedListener(new OnItemSelectedListener() {

public void onItemSelected(AdapterView<?> parent, View selectedItemView,
int position, long id) {

switch(position)
{
case 0:
font="0";
exam.setTypeface(yekan);
break;
case 1:
font="1";
exam.setTypeface(titr);
break;
case 2:
font="2";
exam.setTypeface(homa);
break;
case 3:
font="3";
exam.setTypeface(farnaz);
break;
case 4:
font="4";
exam.setTypeface(bkoodkbd);
break;
case 5:
font="5";
exam.setTypeface(mitra);
break;
case 6:
font="6";
exam.setTypeface(homab);
break;
case 7:
font="7";
exam.setTypeface(elham);
break;
case 8:
font="8";
exam.setTypeface(dastnevis);
break;
case 9:
font="9";
exam.setTypeface(khodkar);
break;
default:
break;
}

}
public void onNothingSelected(AdapterView<?> arg0) {}
});

save.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
SharedPreferences.Editor shpE = shp.edit();
shpE.putString("font", font);
shpE.putInt("size", size);
shpE.commit();
finish();

}
});

}


اینم صفحه ای که فونتش قراره تغییر بکنه


SharedPreferences shp = getSharedPreferences("sett", MODE_PRIVATE);
String font=shp.getString("font", "0");
if(font.equals("0"))
{
txt.setTypeface(yekan);
if(font.equals("1"))
{
txt.setTypeface(titr);
}
if(font.equals("2"))
{
txt.setTypeface(homa);
}
if(font.equals("3"))
{
txt.setTypeface(farnaz);
}
if(font.equals("4"))
{
txt.setTypeface(bkoodkbd);
}
if(font.equals("5"))
{
txt.setTypeface(homab);
}
if(font.equals("6"))
{
txt.setTypeface(elham);
}
if(font.equals("7"))
{
txt.setTypeface(dastnevis);
}
if(font.equals("8"))
{
txt.setTypeface(khodkar);
}
if(font.equals("9"))
{
txt.setTypeface(mitra);
}


از switch استفاده کردم ولی جواب نداد برای همین از if استفاده کردم

saeed_g21
جمعه 02 اسفند 1392, 22:52 عصر
دوست عزیزم dc-master
یک چیزی بگم ناراحت نشی :بامزه:

برنامه نویسیت خشنه

یعنی خیلی شلوغ میکنی Enter و فاصله های بیمورد است که بعدا برای خودت سخت میشه کنترل کردنش کمی مرتب و تمیز کنی و با سلیقه کنی راحت تر میشه کنترل کردن هاشون
البته میدونم به من ربطی نداره :لبخند: