在数据库中保存我的游戏状态

时间:2018-03-11 12:32:38

标签: java android

在我的项目中,我从json下载了我项目的所有数据。我将标题和描述下载为文本,并下载我的图标和游戏文件。 我可以下载它们并保存在数据库中并轻松地在listview中显示。 我的问题是关于如何保存我的游戏文件是否可以下载? 我有两个按钮。首先是用户点击它时下载按钮,它开始下载文件。下载完成后,我的下载按钮消失,我的播放按钮出现。

我想保存这个,当用户第二次运行应用程序时,我保存例如之前下载的第二个位置。我只有我的播放按钮。

我的数据库:

public class DatabaseHandler extends SQLiteOpenHelper {

    public SQLiteDatabase sqLiteDatabase;
    int tedad;

    public DatabaseHandler(Context context) {
        super(context, "EmployeeDatabase.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String tableEmp = "create table emp(PersianTitle text,Description text,icon text,downloadlink text,dl integer)";
        db.execSQL(tableEmp);

    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

    public void insertData(ArrayList<String> id, ArrayList<String> name, ArrayList<String> salary, ArrayList<String> roms,String
            dl) {

        int size = id.size();
        tedad = size;
        sqLiteDatabase = this.getWritableDatabase();
        try {
            for (int i = 0; i < size; i++) {
                ContentValues values = new ContentValues();
                values.put("PersianTitle", id.get(i));
                values.put("Description", name.get(i));
                values.put("icon", salary.get(i));
                values.put("downloadlink", roms.get(i));
                values.put("dl", "0");
                sqLiteDatabase.insert("emp", null, values);
            }
        } catch (Exception e) {
            Log.e("Problem", e + " ");
        }
    }

    public ArrayList<String> Game_Info (int row, int field) {
        String fetchdata = "select * from emp";
        SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();
        ArrayList<String> stringArrayList = new ArrayList<String>();
        Cursor cu = sqLiteDatabase.rawQuery(fetchdata, null);
        for (int i = 0; i < row + 1; i++) {
            cu.moveToPosition(i);
            String s = cu.getString(field);
            stringArrayList.add(s);
        }
        return stringArrayList;
    }



}

这是我的主要代码:

       public class MainActivity2 extends Activity {



    Boolean done_game = false;
    ProgressDialog progressDialog;
    private boolean _init = false;
    ListView listView;
    DatabaseHandler database;
    BaseAdapter adapter;
    public String path_image;
    JSONObject jsonObject;
    Game_Counter_Store Game_Counter_Store;
    int game_counter_store;
    ArrayList<String> name_array = new ArrayList<String>();
    ArrayList<String> des_array = new ArrayList<String>();
    ArrayList<String> icon_array = new ArrayList<String>();
    ArrayList<String> roms_array = new ArrayList<String>();
    ArrayList<String> fav_array = new ArrayList<String>();




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main2);

        init();
        System.gc();



        File mediaStorageDir = new File(Environment.getExternalStorageDirectory(), "MyDirName");//make a direction
        path_image = mediaStorageDir.getAbsolutePath(); // here is tha path

        listView = (ListView) findViewById(R.id.listView);

        database = new DatabaseHandler(MainActivity2.this);
        database.getWritableDatabase();


        Game_Counter_Store = new Game_Counter_Store("Games_Number", this); // number of game in first run is 0
        game_counter_store = Game_Counter_Store.get_count();



        if (game_counter_store == 0) {

            Log.i("mhs", "game_counter_store is 0");
            DownloadGames();

        } else {

            Log.i("mhs", "there are some games");

            for (int i = 0; i < game_counter_store; i++) {

                name_array = database.Game_Info(i, 0);
                des_array = database.Game_Info(i, 1);
                icon_array = database.Game_Info(i, 2);
                roms_array = database.Game_Info(i, 3);
                fav_array = database.Game_Info(i, 4);

            }

            adapter = new MyBaseAdapter(MainActivity2.this, name_array, des_array, icon_array, roms_array,fav_array);
            listView.setAdapter(adapter);

        }


    }

    public void DownloadGames() {

        //here we download name, des, icon
        MakeDocCallBack makeDocCallBack = new MakeDocCallBack() {
            @Override
            public void onResult(ArrayList<String> res) {

                if (res.size() > 0) {

                    try {
                        Game_Counter_Store counter_store = new Game_Counter_Store("Games_Number", MainActivity2.this); // get numbrr of games
                        counter_store.set_count(res.size()); // store the games number

                        for (int i = 0; i < res.size(); i++) {

                            jsonObject = new JSONObject(res.get(i)); //get all the jsons

                            //get all the data to store in database
                            name_array.add(jsonObject.getString("PersianTitle"));
                            des_array.add(jsonObject.getString("Description"));
                            icon_array.add(jsonObject.getString("icon"));
                            roms_array.add(jsonObject.getString("downloadlink"));



                            GetFile fd = new GetFile(MainActivity2.this, path_image, getFileName(jsonObject.getString("icon")), jsonObject.getString("icon").toString(), null); // download the image

                            GetFileCallBack Image_callback = new GetFileCallBack() {
                                @Override
                                public void onStart() {
//                                Toast.makeText(getApplicationContext(),"start",Toast.LENGTH_LONG).show();

                                }

                                @Override
                                public void onProgress(long l, long l1) {
//                                    Toast.makeText(getApplicationContext(),"onProgress",Toast.LENGTH_LONG).show();

                                }

                                @Override
                                public void onSuccess() {
                             //       Toast.makeText(getApplicationContext(),"YES",Toast.LENGTH_LONG).show();


                                }

                                @Override
                                public void onFailure() {
                                 //   Toast.makeText(getApplicationContext(),"NO",Toast.LENGTH_LONG).show();

                                }
                            };

                            if (!fd.DoesFileExist()) {
                                fd.Start(Image_callback); // get the data


                            }
                            //set data in adapter to show in listview
                            adapter = new MyBaseAdapter(MainActivity2.this, name_array, des_array, icon_array, roms_array,fav_array);
                            listView.setAdapter(adapter);


                        }
                         //store dada in database (name , des , icon , bin file(roms) , state)
                        database.insertData(name_array, des_array, icon_array, roms_array,"0");
                    } catch (Exception ex) {

                    }
                }
            }
        };

        DocMaker doc = new DocMaker();
        doc.set(this, makeDocCallBack);


    }

    public static String getFileName(String url) {
        String temp = url.substring(url.lastIndexOf('/') + 1, url.length());
        if (temp.contains("?"))
            temp = temp.substring(0, temp.indexOf("?"));
        return temp;
    }


    public class MyBaseAdapter extends BaseAdapter {

        private Activity activity;
        private ArrayList title, desc, icon, roms,fav;
        private LayoutInflater inflater = null;

        public MyBaseAdapter(Activity a, ArrayList b, ArrayList c, ArrayList d, ArrayList e, ArrayList f) {
            activity = a;
            this.title = b;
            this.desc = c;
            this.icon = d;
            this.roms = e;
            this.fav=f;
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        }

        public int getCount() {
            return title.size();
        }

        public Object getItem(int position) {
            return position;
        }

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

        public View getView(final int position, View convertView, ViewGroup parent) {
            View vi = convertView;
            if (convertView == null)
                vi = inflater.inflate(R.layout.list_item, null);

            TextView title2 = (TextView) vi.findViewById(R.id.game_name); // title
            String song = title.get(position).toString();
            title2.setText(song);


            TextView title22 = (TextView) vi.findViewById(R.id.game_des); // desc
            String song2 = desc.get(position).toString();
            title22.setText(song2);


            File imageFile = new File("/storage/emulated/0/MyDirName/" + getFileName(icon_array.get(position)));
            ImageView imageView = (ImageView) vi.findViewById(R.id.icon); // icon
            imageView.setImageBitmap(BitmapFactory.decodeFile(imageFile.getAbsolutePath()));


            TextView title222 = (TextView) vi.findViewById(R.id.game_roms); // desc
            String song22 = roms.get(position).toString();
            title222.setText(song22);

            final Button dl_btn = (Button) vi.findViewById(R.id.dl_btn); // desc
            final Button run_btn = (Button) vi.findViewById(R.id.play_btn); // desc

            run_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {



                    Preferences.DEFAULT_GAME_FILENAME = getFileName(roms_array.get(position));
                    Intent myIntent = new Intent(MainActivity2.this, FileChooser.class);
                    myIntent.putExtra(FileChooser.EXTRA_START_DIR, Preferences.getRomDir(MainActivity2.this));
                    Log.i("mhsnnn", Preferences.getTempDir(MainActivity2.this));
                    final int result = Preferences.MENU_ROM_SELECT;
                    startActivityForResult(myIntent, result);
                }
            });
            dl_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {


                        MakeDocCallBack makeDocCallBack = new MakeDocCallBack() {
                            @Override
                            public void onResult(ArrayList<String> res) {

                                if (res.size() > 0) {

                                    try {
                                        jsonObject = new JSONObject(res.get(position));
                                        roms_array.add(jsonObject.getString("downloadlink"));
                                        GetFile fd1 = new GetFile(MainActivity2.this, path_image, getFileName(jsonObject.getString("downloadlink")), jsonObject.getString("downloadlink").toString(),null); //download the bin file

                                        GetFileCallBack roms_callback = new GetFileCallBack() {
                                            @Override
                                            public void onStart() {

                                            }

                                            @Override
                                            public void onProgress(long l, long l1) {
                                                Log.i("nsr", "onProgress");


                                            }

                                            @Override
                                            public void onSuccess() {
                                                Log.i("nsr", "onSuccess");

                                                dl_btn.setVisibility(View.GONE);
                                                run_btn.setVisibility(View.VISIBLE);


                                            }

                                            @Override
                                            public void onFailure() {
                                                Log.i("nsr", "onFailure");
                                            }
                                        };

                                        if (!fd1.DoesFileExist()) {
                                            fd1.Start(roms_callback);
                                        }

                                    } catch (Exception ex) {

                                    }
                                }
                            }
                        };

                        DocMaker doc = new DocMaker();
                        doc.set(MainActivity2.this, makeDocCallBack);
                    }


            });
            return vi;

        }
    }


    @Override
    public void onBackPressed() {

        super.onBackPressed();
    }


    private boolean verifyExternalStorage() {
        // check for sd card first
        boolean mExternalStorageAvailable = false;
        boolean mExternalStorageWriteable = false;
        String state = Environment.getExternalStorageState();

        if (Environment.MEDIA_MOUNTED.equals(state)) {
            // rw access
            mExternalStorageAvailable = mExternalStorageWriteable = true;
        } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
            // r access
            mExternalStorageAvailable = true;
            mExternalStorageWriteable = false;
        } else {
            // no access
            mExternalStorageAvailable = mExternalStorageWriteable = false;
        }

        // if we do not have storage warn user with dialog
        if (!mExternalStorageAvailable || !mExternalStorageWriteable) {
            AlertDialog.Builder dialog = new AlertDialog.Builder(this)
                    .setTitle(getString(R.string.app_name) + " Error")
                    .setMessage("External Storage not mounted, are you in disk mode?")
                    .setPositiveButton("Retry", new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int which) {
                            init();
                        }
                    })
                    .setNeutralButton("Exit", new DialogInterface.OnClickListener() {

                        public void onClick(DialogInterface dialog, int which) {
                            finish();
                        }
                    });

            dialog.show();

            return false;
        }

        return true;
    }


    private void init() {
        if (verifyExternalStorage() && !_init) {
            // always try and make application dirs
            String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
            Log.i("nsrrr1", extStorageDirectory);
//                   /storage/emulated/0
            File myNewFolder = new File(extStorageDirectory + Preferences.DEFAULT_DIR);
            Log.i("nsrrr2", extStorageDirectory + Preferences.DEFAULT_DIR);///storage/emulated/0/sega
            if (!myNewFolder.exists()) {
                myNewFolder.mkdir();
            }

            myNewFolder = new File(extStorageDirectory + Preferences.DEFAULT_DIR_ROMS);
            Log.i("nsrrr3", extStorageDirectory + Preferences.DEFAULT_DIR);///storage/emulated/0/sega
            if (!myNewFolder.exists()) {
                myNewFolder.mkdir();

            }


            AssetManager assetManager = getAssets();
            String[] files = null;


            try {

                files = assetManager.list(Preferences.DEFAULT_DIR_GAME);
                Log.i("nsrrr3", files + "");
            } catch (IOException e) {
                Log.e("tag", "Failed to get asset file list.", e);

            }
            for (String filename : files) {
                InputStream in = null;
                OutputStream out = null;
                try {
                    in = assetManager.open(Preferences.DEFAULT_DIR_GAME + "/" + filename);
                    File outFile = new File(myNewFolder, filename);
                    out = new FileOutputStream(outFile);
                    copyFile(in, out);
                } catch (IOException e) {
                    Log.e("tag", "Failed to copy asset file: " + filename, e);
                }

            }


            // do first run welcome screen
            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            boolean firstRun = preferences.getBoolean(Preferences.PREF_FIRST_RUN, true);
            if (firstRun) {
                // remove first run flag
                Editor edit = preferences.edit();
                edit.putBoolean(Preferences.PREF_FIRST_RUN, false);

                // default input
                edit.putBoolean(Preferences.PREF_USE_DEFAULT_INPUT, true);
                edit.commit();
            }

            // generate APK path for the native side
            ApplicationInfo appInfo = null;
            PackageManager packMgmr = this.getPackageManager();
            try {
                appInfo = packMgmr.getApplicationInfo(getString(R.string.package_name), 0);
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
                throw new RuntimeException("Unable to locate assets, aborting...");
            }
            String _apkPath = appInfo.sourceDir;

            // init the emulator
            Emulator.init(_apkPath);
            Log.i("rrrr", _apkPath);

            // set the paths
            Emulator.setPaths(extStorageDirectory + Preferences.DEFAULT_DIR,
                    extStorageDirectory + Preferences.DEFAULT_DIR_ROMS,
                    "",
                    "",
                    "");

            // load up prefs now, never again unless they change
            //PreferenceFacade.loadPrefs(this, getApplicationContext());

            // load gui
            //   Log.d(LOG_TAG, "Done init()");
            setContentView(R.layout.activity_main2);

            // set title
            super.setTitle(getString(R.string.app_name));

            _init = true;

            //    Log.d(LOG_TAG, "Done onCreate()");

        }
    }


    private void copyFile(InputStream in, OutputStream out) {
        byte[] buffer = new byte[1024];
        int read;
        try {
            while ((read = in.read(buffer)) != -1) {
                out.write(buffer, 0, read);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}

如何在我的数据库中创建方法呢?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您可以添加一个表user_games,例如用户ID,游戏ID和状态,然后您可以在操作完成时更新状态。

例如,下载状态1,已下载或已完成状态2,您甚至可以添加下载失败等状态,以添加重新下载按钮...

你可以做点什么

public void update_status(UserID,GameID) {
    String update = "UPDATE games set status = 1 where id="+Game_ID+" and UserID = " + UserID);
    db.rawQuery(update, null);
}