کلیدستان

نسخه‌ی کامل: shared pref
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
 باسلام مزاحم همیشگی هستم


کد:
switch(checkedId)
{
case R.id.radio1:
    SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = shared.edit();
    editor.putString("fonts", "tahoma.ttf");
    editor.apply();
    finish();
    break;
case R.id.radio2:
    SharedPreferences shared1 = getSharedPreferences("Prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor1 = shared1.edit();
    editor.putString("fonts", "BNazanin.ttf");
    editor.apply();
    finish();
    break;
}

و میخوام که تو صفحه اصلی از این کد استفاده کنم


کد:
SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE);
SharedPreferences.Editor editor = shared.edit();
String string_from_sp = shared.getString("fonts", "BZar.ttf");

و بعد

کد:
Typeface face = Typeface.createFromAsset(getAssets(), "font/"+fonts+"");

الان مشکل کجا هستش؟
سلام دوست عزیز. 
یعنی برنامه force close داده ؟
Typeface رو فعلا بگذارید کنار و ببینید که مشکل از SharedPreferences هست یا نه (کد مربوط به Typeface را حذف کرده و ببینید که باز هم مشکل داره یا نه). شاید  SharedPreferences  را درست تعریف نکرده اید.
در ضمن، همیشه هنگام استفاده از finish محتاط باشید زیرا بر حسب تجربه متوجه شده ام که اگر بلافاصله بعد از برخی از دستورها قرار بگیرد، باعث ایجاد force close می شود. در این مواقع می توان از AsyncTask استفاده کرد. البته فکر نمی کنم در دستورات شما مشکل از این مورد باشد، ولی گفتم این مورد را هم تذکر بدهم (با حذف finish  و یک بار اجرای برنامه اندروید، می توانید متوجه بشوید که مشکل از آن بوده یا نه).
در کل، وقتی کاربران در مورد خظایابی زبان های برنامه نویسی مثل متلب (MATLAB) سوال می پرسند، می توان سریع برنامه را اجرا کرده و مشکل را پیدا کرد، ولی برنامه نویسی اندروید، خطایابی آن زیاد ساده نیست و نمی توان با تنها دیدن کدها، مشکل را پیدا کرد. 
امیدوارم مشکل از همین مواردی باشد که تذکر دادم (تا زودتر حلش کنید).
ممنون ادمین جان از جوابتون

یکی از مشکلاتی که هستش اینه که برای radio  ها هر کدام تو تا متغیر editor , share  تعریف کردم که ارور dublicated item  رو نده
ولی در کلاس بعدیم که میخوام از اطلاعات ذخیره شده استفاده کنم یعنی کد زیر


کد:
String string_from_sp = shared.getString("fonts", "BZar.ttf");

فقط یکی از اون دو تا متغییر )shared1 ,shared ) رو میتونم بنویسم -در صورتی که ممکنه فرد تو صفحه فونت رادیو دومی رو انتخاب کرده باشه که با متغیر shared1  ذخیره شده
اینجا مشکلم هستش
با تشکر پیشاپیش از جوابتون
باید shared و editor (که برای SharedPreferences تعریف کرده اید) را به صورت public تعریف کنید تا این مشکل به وجود نیاید. 
اگر در این زمینه اطلاعاتی ندارید، بگید تا یک مبحث برایتان بنویسم.
معمولا که با توجه به ارور هایی که اکلیپس میده متغیر هام رو public  یا final  میذارم ولی دقیق نه اطلاعاتی ندارم

الان مثلا من تو برنامم دو تا متغییر گذاشتم یکی boolean  و یکی string
boolean خوب کار میکنه ولی string  نه و force close  میده .عکس زیر رو نگاه کنید.درست وقتی وارد این اکتیویتی میشم force close میده حتی متغییر رو public کردم ولی بازم هیجی


ممنون
اولین چیزی که جلب توجه میکنه، کلمه فارسی است که در setText نوشته اید. شما نمی توانید در میان کدهای java ، حروف فارسی به کار ببرید (مگر اینکه صفحه به صورت UTF-8 ذخیره شده باشه که معمولا برنامه eclipse خودش اخطار میده). تنها در فایل های xml است که باید کلمات فارسی را بنویسید و سپس توسط کدهای java ، آنها را فراخوانی کنید.
این مورد را درست کنید و دوباره برنامه را تست نمایید.
اگر درست نشد، تمامی کدهای صفحه را اینجا قرار بدهید.
 
من چند تا اکتیویتی دارم که توشون فارسی نوشتم و مشکلی پیدا نکردم و این کاری هم که گفتین انجام دادم ولی بازم مشکل داشت


و


اینم کدهای اکتیویتی prefs

کد:
package com.example.newdaru;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
public class Prefs extends PreferenceActivity {
    @Override protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
        String fonts = prefs.getString("fonts", "BHOMA.ttf"); 
        Boolean b = prefs.getBoolean("FIRSTRUN", true); 
    } 
}

ممنون
یه سوال!!!

خط کد type face رو نگاه کنید
الان یه سوال! اون جایی که نوشته getAssets()  رو نباید تغییر بدم؟ چون که الان من چیزی رو که get  نمیکنم
این کد رو قبلن گذاشته بودم که اطلاعات رو از یه کلاس دیگه بگیره ولی الان که دارم از shared pref  استفاده میکنم پ احتمالا غلطه

جاش چی باید بذارم؟
متاسفانه در برنامه نویسی اندروید، نمیشه در خطایابی زیاد کمک کرد، چون تنها کسی که کل پروژه رو ساخته، میدونه چی به چیه. 
در ضمن، من همیشه هر بخشی رو که به برنامه اضافه می کنم، سریع برنامه رو اجرا می کنم تا ببینم مشکلی نداشته باشه. حدس می زنم شما دیر به دیر برنامه را اجرا می کنید که باعث می شود به دلیل افزوده شدن بخش های مختلف و همچنین حذف بخش های قدیمی، گیج شوید که مشکل از کجاست.
هر بخشی که به آن مشکوک هستید را حذف کنید و دوباره برنامه را تست نمایید. آنقدر ادامه بدهید تا سرانجام مشکل را پیدا کنید (یا از روش های خطایابی استفاده کنید، البته من خودم، حذف کدها و اجرای سریع برنامه را ترجیح می دهم و با پیدا کردن بخش مربوط به خطا، به سراغ شیوه برنامه نویسی سایر برنامه نویسان برای آن بخش می روم و همین هم باعث یادگیری تعداد زیادی نکته جدید می شود، یعنی یک خطای آزاردهنده می تواند تبدیل به انگیزه ای برای یادگیری نکات جدید شود که بسیار لذت بخش خواهد بود). 
در مورد getassets ، تا به امروز به این شکل از آن استفاده نکرده ام و بنابراین، در این مورد نمی تونم راهنماییتون کنم.
همون خط typeface  رو که پاک کردم برنامه اجرا شدش ولی واقعا نمیدونم چه جوری تغییر فونت رو بذارم تو shared pref

به هر حال ممنون لطف کردید
مشکل از فایل فونت بودش
مثی که اندروید همه فونت ها رو پشتیبانی نمیکنه!!!!