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

با توجه به تفاوت ساختاری برنامه نویسی اندروید با دیگر زبان ها، استفاده از توابع معمول جاوااسکریپت در اندروید، نیازمند اصلاحاتی است. مثلا باید توجه داشت که در اندروید اندیس ماه ها از صفر شروع می شود.

کد زیر تبدیل تاریخ میلادی به شمسی را به خوبی انجام می دهد، من برای منظور خاصی خروجی تابع را به صورتی که در زیر مشاهده می کنید طراحی کرده‌ام، شما می توانید خروجی های دیگری از تابع برای خود بگیرید:

public String gregorian_to_jalali(Integer ret_val)
    {
        Calendar c = Calendar.getInstance();
        Integer y = c.get(Calendar.YEAR);
        Integer m = c.get(Calendar.MONTH);
        Integer d = c.get(Calendar.DAY_OF_MONTH);
        Integer h = c.get(Calendar.HOUR_OF_DAY);
        Integer min = c.get(Calendar.MINUTE);
        Integer[] g_days_in_month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        Integer[] j_days_in_month = {31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29};

        Integer gy = y - 1600;
        Integer gm = m;
        Integer gd = d - 1;

        Integer g_day_no = 365 * gy + ((gy + 3) / 4) - ((gy+99) / 100)+ ((gy+399) / 400);

        for (Integer i=0; i < gm; ++i)
            g_day_no += g_days_in_month[i];
        if (gm>1 && ((gy%4==0 && gy%100!=0) || (gy%400==0)))
            /* leap and after Feb */
            ++g_day_no;
        g_day_no += gd;

        Integer j_day_no = g_day_no-79;

        Integer j_np = (j_day_no / 12053);
        j_day_no %= 12053;

        Integer  jy = 979+ 33*j_np + 4*(j_day_no / 1461);

        j_day_no %= 1461;

        if (j_day_no >= 366) {
            jy += (j_day_no - 1) / 365;
            j_day_no = (j_day_no - 1) % 365;
        }

        Integer i = 0;
        for (i = 0; i < 11 && j_day_no >= j_days_in_month[i]; ++i) {
            j_day_no -= j_days_in_month[i];
        }
        Integer jm = i + 1;
        Integer jd = j_day_no + 1;

        String ret = "";
        switch (ret_val) {
        case 1: //sal
            ret = jy.toString();
            break;
        case 2: //mah
            ret = jm.toString();
            break;
        case 3: //ruz
            ret = jd.toString();
            break;
        case 4: //saat
            //Integer h = dt1.getHours();
            ret = h.toString();
            break;
        case 5: //daghighe
            //Integer min = dt1.getMinutes();
            ret = min.toString();
            break;
        default:
            break;
        }
        return ret;
    }


تبدیل رشته متنی به عدد در اندروید

Integer.parseInt("123");



Tags:

Converting a string to an integer (Android)

Android: converting String to int

Finalizing a Cursor that has not been deactivated or closed

یک پیغام خطای مسخره دیگه از اندروید، البته این خطا non-fatal است و منجر به خروج غیرمنتظره نمی‌شود.

کد روبرو ممکن است منجر به این خطا شود در حالیکه متغیر db به درستی بسته شده است.

    DBAdapter db = new DBAdapter(this);
    db.open();

    //load all waiting alarm
    mCursor=db.getTitles("state<2");
    setListAdapter(new MyCursorAdapter(this, mCursor));

    db.close(); 

راه حل این مشکل mCursor.close(); نیست، چون ممکن است DBAdapter به درستی کار نکند.

از دستور startManagingCursor() قبل از db.close(); استفاده کنید.

ارسال پارامتر به یک اکتیویتی دیگر

در اکتیویتی اول یک intent می سازیم و اکتیویتی دوم را به ترتیب زیر صدا می زنیم

Intent intent1 = new Intent(this, Class2.class);
intent1.putExtra("foo", 5.0f);
intent1.putExtra("bar", "baz");
startActivity(intent1);

در اکتیویتی دوم، به ترتیب زیر مقادیر فرستاده شده توسط اکتیویتی اول را می خوانیم

Bundle extras = getIntent().getExtras();
if(extras !=null)
{
 float foo = extras.getFloat("foo");
 String bar = extras.getString("bar");
}


به دست آوردن شناسه یکتای IMEI دستگاه

    TelephonyManager tManager =
        (TelephonyManager)this.getSystemService(this.getBaseContext().TELEPHONY_SERVICE);
    String uid = tManager.getDeviceId();

به دست آوردن مک آدرس وای فای Wifi Mac Address

WifiManager wm = (WifiManager)this.getSystemService(Context.WIFI_SERVICE);
String uid = wm.getConnectionInfo().getMacAddress();
Toast.makeText(this, uid, Toast.LENGTH_LONG).show();

مهم: ترکیبی از ListView و SQLite و Button

یک روز تمام حدود 10 ساعت به دنبال راه حل این مسئله گشتم، ولی تلاشم بی ثمر بود.

تا بالاخره با ترکیب چند نمونه کد و کمی هم خلاقیت موفق شدم به نتیجه برسم.

مسئله: یک ListView داریم که توسط یک دیتابیس پر می‌شود، این ListView شامل یک Button است که با توجه به سطری که در آن قرار دارد، کاری را انجام می دهد.

مثلا، لیست دانش آموزان که در جلوی اسم هر کدام یک Button وجود دارد که نام آن دانشجو را توسط Toast نشان دهد.


دانلود نمونه کد


checkbox  در android

if (checkBox.isChecked())  { // برای چک کردن اینکه آیا چک باکس تیک خورده است یا نه
    //Your code here
}


checkBox.setChecked(false); // برای تنظیم چک باکس روی true یا false

تنظیم کردن یک spinner بر روی یک ایندکس خاص

Spinner mySpinner= (Spinner)findViewById(R.id.Spinner1);
int spinnerPosition = 2; //for example

//set the default according to value
mySpinner.setSelection(spinnerPosition);

به دست آوردن ایندکس گزینه انتخاب شده در spinner

Spinner mySpinner = (Spinner)findViewById(R.id.spinner1);

mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView adapterView, View view, int i, long l) {
        // Your code here, " i " is selected index
    }

    public void onNothingSelected(AdapterView? adapterView) {
        return;
    }
});

نوشتن فارسی در toast

صد تا راه رو امتحان کردم تا بالاخره کد زیر جواب داد

خیلی هم ساده بود، اما من سخت گرفته بودم

معما چو حل گشت آسان شود


Toast toast = Toast.makeText(Page1.this, "", 1);
toast.setText(PersianReshape.reshape("سيب"));
toast.show();

کلاس PersianRshape رو از اینجا می تونین دانلود کنید

این کلاس رو باید به فولدر src همون جا که بقیه فایلهای جاوا قرار دارند، اضافه کنید

فقط دقت کنین در متن های فارسی، از "ي" عربی استفاده کنید نه "ی" فارسی

دسترسی به آیتمهای یک دیالوگ

try this code

uetd=(EditText) textEntryView.findViewById(R.id.username_edit);



after following line in your code

final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null);