تالار گفتمان nCIS.ir

نسخه‌ی کامل: رفرش نشدن دیتابیس بعد از دستور Update
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام ، من داخل فرگمنت دستور اپدیت رو نوشتم ، دستور اپدیت اعمال میشه اما تا زمانی که برنامه رو از نو باز نکنم دیتابیس رفرش نمیشه ، دلیلش هم برمی گرده به اینکه داخل برنامه ام از فرگمنت و ViewPagerAdapter استفاده شده .. دستور  update هیچ مشکلی نداره و از تاپیک های اموزشی همین سایت استفاده کردم .

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




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 = "/mysite-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 = "mysite.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 نیست
مگر اینکه برنامه رو دوباره اجرا کنم { یعنی تا برنامه مجدد اجرا نشده تغییرات دیتابیس رفرش نمیشه } ، چطور باید این مشکل رو برطرف کنم ؟
توی onResume اکتیویتی اطلاعات رو مجدداً از دیتابیس بخونید ببینید درست میشه؟
ضمناً بهتره متن فارسی رو مستقیماً تو کد ننویسین و توی R.string بگذارین و با getString توی اکتیویتی بخونید.
نمی دونم منظورتون اکتویتی اصلی بود یا فرگمنت  اما من برای هر دو مورد تست کردم جواب نداد ، به  Main Activty
و فرگمنت سوم این کد رو اضافه کردم، تاثیری نداشت درست مثل قبل بعد اجرای مجدد برنامه رفرش میشه

    

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();
   }