انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
تا وقتی برنامه ریستارت نشده ، دیتابیس رفرش نمی شود (برنامه نویسی اندروید)

تا وقتی برنامه ریستارت نشده ، دیتابیس رفرش نمی شود (برنامه نویسی اندروید)

#1
سلام ، من داخل فرگمنت دستور اپدیت رو نوشتم ، دستور اپدیت اعمال میشه اما تا زمانی که برنامه رو از نو باز نکنم دیتابیس رفرش نمیشه ، دلیلش هم برمی گرده به اینکه داخل برنامه ام
از فرگمنت و ViewPagerAdapter استفاده شده

کدفرگمنت انتخاب درس

کد:
package com.example.school.app.ViewPagerFragment;


import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.school.app.MainActivity;

import com.example.school.app.R;

/**
 * A simple {@link Fragment} subclass.
 */
public class EntekhabDarsFragment extends Fragment {
    public static SQLiteDatabase database;
    public static final String   DIR_SDCARD   = Environment.getExternalStorageDirectory().getAbsolutePath();
    public static final String   DIR_DATABASE = DIR_SDCARD + "/mysite-com_folder/";

    View v;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


        v = inflater.inflate(R.layout.fragment_entekhab_dars, container, false);



        eventXML();

        return v;
    }

    private void eventXML() {
        database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "mysitedb.sqlite", null);


        v.findViewById(R.id.btn1)
                .setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        database.execSQL("UPDATE statusTb SET btn_click=1;  ");
                        MainActivity.viewPager.setCurrentItem(2);




                    }
                });

        v.findViewById(R.id.btn2)
                .setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        database.execSQL("UPDATE statusTb SET btn_click=2;  ");
                        MainActivity.viewPager.setCurrentItem(2);

                    }
                });
        v.findViewById(R.id.btn3)
                .setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        database.execSQL("UPDATE statusTb SET btn_click=3;  ");
                        MainActivity.viewPager.setCurrentItem(2);


                    }
                });
        v.findViewById(R.id.btn4)
                .setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        database.execSQL("UPDATE statusTb SET btn_click=4;  ");
                        MainActivity.viewPager.setCurrentItem(2);

                    }
                });
        v.findViewById(R.id.btn5)
                .setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        database.execSQL("UPDATE statusTb SET btn_click=5;  ");
                        MainActivity.viewPager.setCurrentItem(2);




                    }
                });


    }

}

کد فرگمنت سوم

کد:
package com.example.school.app.ViewPagerFragment;


import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.text.method.ScrollingMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.school.app.MainActivity;
import com.example.school.app.R;

/**
 * A simple {@link Fragment} subclass.
 */
public class Layout3Fragment extends Fragment {
   public static TextView   main2;
    private TextView one, two, tree,main1;
    private Typeface typeface;
    public static SQLiteDatabase database;
    public static final String   DIR_SDCARD   = Environment.getExternalStorageDirectory().getAbsolutePath();
    public static final String   DIR_DATABASE = DIR_SDCARD + "/mysite-com_folder/";

    public Layout3Fragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_layout3, container, false);
        typeface = Typeface.createFromAsset(getActivity().getAssets(), "IranSans.ttf");
        one = (TextView) view.findViewById(R.id.header_one_text);
        two = (TextView) view.findViewById(R.id.header_two_text);
        tree = (TextView) view.findViewById(R.id.header_tree_text);
        main1 = (TextView) view.findViewById(R.id.page3_text_english);
        main2 = (TextView) view.findViewById(R.id.page3_text_farsi);




        one.setTypeface(typeface);
        two.setTypeface(typeface);
        tree.setTypeface(typeface);
        database = SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE + "mysitedb.sqlite", null);

        int btn_click_code=0;
        Cursor cursor = database.rawQuery("SELECT btn_click FROM statusTb ", null);
        cursor.moveToFirst();
        if (cursor.moveToFirst()) {
            btn_click_code = cursor.getInt(cursor.getColumnIndex("btn_click"));

        }
        cursor.close();
        main1.setText(Integer.toString(btn_click_code));









        return view;
    }


}

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

کد:
package com.example.school.app;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import com.astuetz.PagerSlidingTabStrip;
import com.example.school.app.Adapter.ViewPagerAdapter;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.File;
import java.io.InputStream;


public class MainActivity extends AppCompatActivity {
    private PagerSlidingTabStrip tabLayout;
    public static ViewPager viewPager;
    private Toolbar toolbar;
    private ViewPagerAdapter adapter;
    public static String number_btn="-1";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle("مدرسه");
        viewPager = (ViewPager) findViewById(R.id.pager);
        tabLayout = (PagerSlidingTabStrip) findViewById(R.id.tabs);

        setSupportActionBar(toolbar);
        adapter = new ViewPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(adapter);
        tabLayout.setViewPager(viewPager);
        tabLayout.setTextColor(Color.WHITE);
        viewPager.setOffscreenPageLimit(4);

        File root = android.os.Environment.getExternalStorageDirectory();
        String folderName = "/Ketabsoft-com_folder";
        File dir = new File (root.getAbsolutePath() + folderName);
        if(!dir.exists()) {
            dir.mkdirs(); // build directory
        }

        InputStream in = getResources().openRawResource(R.raw.db);
        String filename = "ketabsoftdb.sqlite";
        File f = new File(root + folderName , filename);
        if(!f.exists()){
            try {
                OutputStream out = new FileOutputStream(f);
                byte buffer = new byte[1024];
                int len;
                while((len = in.read(buffer, 0, buffer.length)) != -1){
                    out.write(buffer, 0, len);
                }
                in.close();
                out.close();
            } catch (FileNotFoundException e) {
                //
            } catch (IOException e) {
                //
            }
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


}

کدهای ViewPagerAdapter

کد:
package com.example.school.app.Adapter;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import com.example.school.app.MainActivity;
import com.example.school.app.ViewPagerFragment.EntekhabDarsFragment;
import com.example.school.app.ViewPagerFragment.GozareshFragment;
import com.example.school.app.ViewPagerFragment.Layout3Fragment;
import com.example.school.app.ViewPagerFragment.RahnemaFragment;

/**
 * Created by mehran on 01/10/2015.
 */
public class ViewPagerAdapter extends FragmentPagerAdapter {
    public static SQLiteDatabase database;

    private String TITLE = {"انتخاب درس", "گزارش", "لی اوت ۳", "راهنما"};


    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }


    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new EntekhabDarsFragment();
            case 1:

                return new GozareshFragment();
            case 2:

                return new Layout3Fragment();
            case 3:

                return new RahnemaFragment();
            default:


                return null;
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return TITLE[position];
    }


    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getCount() {
        return TITLE.length;
    }








}

همونطور که می بنید تو فرگمتی که اسمش لی اوت سوم هست ، یک تکست باکس هست که اسمش main1 هست و مقدار فیلد btn_click از جدول statusTb
رو برمی گردونه ، حالا فرض کنید من روی باتن پنجم از فرگمنت انتخاب درس کلیک کردم و وارد لی اوت سوم شدم ، نتیجه ای که می بینم عدد 5 نیست
مگر اینکه برنامه رو دوباره اجرا کنم { یعنی تا برنامه مجدد اجرا نشده تغییرات دیتابیس رفرش نمیشه } ، چطور باید این مشکل رو برطرف کنم ؟
پاسخ

تا وقتی برنامه ریستارت نشده ، دیتابیس رفرش نمی شود (برنامه نویسی اندروید)

#2
کدهای فراخوانی مقدار در لی اوت 3 رو درون متد onresume()  بنویسید.چون اکتیوتی مادر شما در حالت onresume() قرار گرفته.
پاسخ
 سپاس شده توسط Ayma ، admin

تا وقتی برنامه ریستارت نشده ، دیتابیس رفرش نمی شود (برنامه نویسی اندروید)

#3
متاسفانه این کار هم انجام دادم تاثیری نداشت ، به این صورت نوشتم

کد پی‌اچ‌پی:
public void onResume() {
       
database SQLiteDatabase.openOrCreateDatabase(DIR_DATABASE "mysitedb.sqlite"null);
 
       
int btn_click_code=0;
       
Cursor cursor database.rawQuery("SELECT btn_click FROM statusTb "null);
       
cursor.moveToFirst();
       if (
cursor.moveToFirst()) {
           
btn_click_code cursor.getInt(cursor.getColumnIndex("btn_click"));
           
number_btn=Integer.toString(btn_click_code);
 
       }
       
cursor.close();
       
super.onResume();
   } 

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

****
پ ن : چرا  پست های این سایت قابل ویرایش نیستن ، همه اش میگه باید 300  دقیقه سپری شده باشه در حالی که بیشتر از  300 دقیقه سپری شده ..
چون یه یه مشکلی که کدهای اینجا هست اسم پوشه دیتابیس ها تو کد فرگمنت ها فرق می کنه که در اصل برنامه ام هیچ مشکلی نیست ، فکر کردم بهتره بگم
که مشکل به این مساله ربطی نداره ..
پاسخ

تا وقتی برنامه ریستارت نشده ، دیتابیس رفرش نمی شود (برنامه نویسی اندروید)

#4
خب شما فقط دیتابیس رو درون متد onresume قرار دادید..
دستور زیر هم باید در متد بالا قرار بدید.

کد پی‌اچ‌پی:
main1.setText(Integer.toString(btn_click_code)); 
پاسخ
 سپاس شده توسط admin ، Ayma ، دیب دمینی

تا وقتی برنامه ریستارت نشده ، دیتابیس رفرش نمی شود (برنامه نویسی اندروید)

#5
بابت راهنمایی ممنونم ، اما اون خط هم نوشته بودم اما تاثیری نداشت ..هیچ دستوری نیست که بعد دستور  اپدیت ، دیتابیس رو دوباره لود کنه ؟!
پاسخ

تا وقتی برنامه ریستارت نشده ، دیتابیس رفرش نمی شود (برنامه نویسی اندروید)

#6
میتونید از سایت زیر کمک بگیرید و فرگمنت رو رفرش کنید.
http://stackoverflow.com/questions/20702...-at-reload
پاسخ
 سپاس شده توسط Ayma ، admin ، شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان