رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

پست های پیشنهاد شده

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

به یه مشکلی خوردم تو فراخونی دیتابیس،نکته عجیبش اینه که من کدای دیتابیس رو دستکاری نکردم فقط از دیتابیس لوکاس استفاده میکنم یه سری تغییرات تو ستون های هر جدول تو دیتابیسم دادم و جالب تر از اون اینکه حالا که کدارو به حالت نرمالم برمیگردونم بازم ارور میده و میگه دیتابیس کپی نمیشه و نمیتونه باز بشه !!!

این لیست کلاس دیتابیسم:

public class DatabaseManager extends SQLiteOpenHelper {

    private Context context;

    private static String DB_PATH = "data/data/com.wordstutorial.hamidrezak.wordstutorials/databases";
    private static String DB_NAME = " words_db.db ";

    public static String DB_TABLE_WORDS ="words";
    public static String BD_TABLE_PLAY="play";
    public static String DB_TABLE_SETTINGS="settings";

    private static int DB_VERSION = 2;

    private SQLiteDatabase dbase;

    public DatabaseManager(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
        this.context = context;
    }

    public void createDatabase()  {

        boolean dbExist = checkDatabase();

        if (dbExist)
        {
            Log.d("TAG", "Database already Exist");
        } else {

            this.getReadableDatabase();
        }


        try {
            copyDataBase();
        } catch (IOException e) {

            e.printStackTrace();
            throw new Error("Error copying database");
        }

    }

    private boolean checkDatabase() {
        SQLiteDatabase checkDB = null;
        try {
            String myPath = DB_PATH + DB_NAME;
            checkDB.openDatabase(myPath , null, SQLiteDatabase.OPEN_READWRITE);
        } catch (SQLiteException e) {
        }

        if (checkDB != null) {
            checkDB.close();
        }
        return checkDB != null ? true : false;
    }

    private void copyDataBase() throws IOException {

        InputStream myInput = context.getAssets().open(DB_NAME);
        String outFileName = DB_PATH + DB_NAME;
        OutputStream myOutput = new FileOutputStream(outFileName);

        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer)) > 0) {
            myOutput.write(buffer, 0, length);
        }
        myOutput.flush();
        myOutput.close();
        myInput.close();
    }

    public void openDataBase() throws SQLiteException {

        String myPath = DB_PATH + DB_NAME;
        dbase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
    }


    public Cursor queryData(String query) {
        return dbase.rawQuery(query, null);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
       ///DO NOTHING

    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldV, int newV) {
    ///DO NOTHING

    }

    @Override
    public synchronized void close() {
        if (dbase != null)
            dbase.close();
        super.close();
    }

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

public class WordsActivity extends AppCompatActivity {

    private List<Word> words;
    DatabaseManager db;

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

        loadDatabase();

        TextAdapter wordsAdapter = new TextAdapter(this,words);
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new GridLayoutManager(WordsActivity.this, 2, LinearLayoutManager.VERTICAL, false));
        recyclerView.setAdapter(wordsAdapter);

    }

    public void loadDatabase() {

        db=new DatabaseManager(WordsActivity.this);

        db.createDatabase();
        db.openDataBase();

        words=new ArrayList<>();

        Cursor cursor = db.queryData(" SELECT * FROM " + DatabaseManager.DB_TABLE_WORDS);
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                do {
                    Word word = new Word();

                    word.setId(cursor.getInt(0));
                    word.setTitle(cursor.getString(1));
                    word.setImageview(cursor.getString(2));
                    word.setSound(cursor.getString(3));

               words.add(word);
                } while (cursor.moveToNext());
            }
        }
        db.close();
    }

}

 

اینم کلاس اداپترم

public class TextAdapter extends RecyclerView.Adapter<TextAdapter.TestViewHolder> {

    private Context context;
    private List<Word> words;

    public TextAdapter(Context context, List<Word> words) {

        this.context = context;
        this.words = words;
    }


    @Override
    public TestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.tutorial_boxs_layout, parent, false);
        return new TestViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final TestViewHolder holder, int position) {

        final Word word=words.get(position);
        holder.txtTitle.setText(word.getTitle());

        int resID = context.getResources().getIdentifier(word.getImageview(), "mipmap", context.getPackageName());
            holder.imageWord.setImageResource(resID);


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

                Intent intent=new Intent(context, WordActivity.class);

                intent.putExtra("id",word.getId());
                intent.putExtra("word",word.getTitle());
                intent.putExtra("image",word.getImageview());
                intent.putExtra("sound",word.getSound());

                context.startActivity(intent);

            }
        });
    }


    @Override
    public int getItemCount() {
        return words.size();
    }


    public class TestViewHolder extends RecyclerView.ViewHolder {

        private TextView txtTitle;
        private ImageView imageWord;


        public TestViewHolder(View itemView) {
            super(itemView);

            txtTitle = (TextView) itemView.findViewById(R.id.box_title);
            imageWord = (ImageView) itemView.findViewById(R.id.box_image);

        }
    }
}

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

   --------- beginning of crash
01-09 13:30:00.085 4969-4969/com.wordstutorial.hamidrezak.wordstutorials E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                           Process: com.wordstutorial.hamidrezak.wordstutorials, PID: 4969
                                                                                           java.lang.Error: Error copying database
                                                                                               at com.wordstutorial.hamidrezak.wordstutorials.DatabaseManager.createDatabase(DatabaseManager.java:57)
                                                                                               at com.wordstutorial.hamidrezak.wordstutorials.View.Activity.WordsActivity.loadDatabase(WordsActivity.java:41)
                                                                                               at com.wordstutorial.hamidrezak.wordstutorials.View.Activity.WordsActivity.onCreate(WordsActivity.java:28)
                                                                                               at android.app.Activity.performCreate(Activity.java:6662)
                                                                                               at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                                                                                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
                                                                                               at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
                                                                                               at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                               at android.os.Looper.loop(Looper.java:154)
                                                                                               at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                                               at java.lang.reflect.Method.invoke(Native Method)
                                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

 

 

مشکل از کجاست؟؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

  • مطالب مشابه

    • توسط aliazmoodeh
      سلام من یه آپی دارم یه قسمت وجود داره که اطلاعات رو از سرور میگیره و تو ریسایکلرویو نمایش میده من میخوام این اطلاعات رو تو حالت افلاین هم داشته باشم یعنی چی یعنی بتونم اطلاعاتی که از سرور گرفتم قبلا رو وقتی کاربر اینترنت بهش نمایش بدم دقیقن مثله تلگرام میگم ولی نمیدونم باید چیکار کنم اگر اموزشی در این رابط دارید بهم بگید یا سورسی دارید بهم بگید پولی یا رایگان باشه برام فرقی نمیکنه فقط میخوام مشکلمو حل کنه
    • توسط Vahid761
      دوستان سلام . لطفا کمک کنید . راستش من می خواستم یک text view بسازم که وقتی  یک button دستور یک دستور خاصی رو ارسال کنه متن اون text view تغیر کنه که البته تاحدودی هم موفق شدم ولی مشکلی که هست اینه که اون متن جدید   save نمیشه یعنی با یه باز وبسته کردن اپ دورباره برمیگرده به اون متن اولی یعنی می خوام اون متن جدید رو save کنم  دوستان اگه بلدید چطوری حل میشه خواهشا لطفا کمک کنید تا  این مشکل رو حل کنم ....
    • توسط h.a.m.i.d
      سلام دوستان وقت بخیر ، من دارم یه اپلیکشن آماده می کنم که ارتباط با سرور داره
      داخل هاست من یه یه دیتابیس دارم که اینجا تیبل  users مد نظرم هست، داخل این جدول من چهار ستون دارم که عبارتند از ID,username,pass,date
      date زمان عضوت کاربر به صورت خودکار پر میشه
      حالا سوال اینجاست که من یه بخش پروفایل داخل مین اکتیوتیم دارم که میخوام داخلش تاریخ عضویت کاربر نشون داده بشه، روال به اینصورت هست که داخل اپ یوزنیم و پس رو از شیردپرفرینس میگیره میفرسته به سمت سرور و داخل فایل php اطلاعات دریافت میشه و ستون تاریخ متناظر با اون اطلاعات کاربری دوباره ارسال میشه به سمت اندروید و محتوای تکست ویو مورد نظر رو میسازه ، ولی من تو دریافت اطلاعات از php داخل اپلیکیشن و نوشتن کدها به مشکل خوردم اگه ممکنه برنامه و یا کدهای  php رو برام اصلاح کنید ممنونم.
      برنامه سمت اندروید:
      private void ShowProfile(){ profile = new MaterialDialog.Builder(MainActivity.this) .customView(R.layout.alert_aprofile,false) .show(); AsyncHttpPost post = new AsyncHttpPost( "http://****************profile.php" ); post.setTimeout(5000); MultipartFormDataBody body = new MultipartFormDataBody(); body.addStringPart("Username",sp.getString("Username", null)); body.addStringPart("Pass",sp.getString("Pass", null)); post.setBody(body); AsyncHttpClient.getDefaultInstance().executeString(post, new AsyncHttpClient.StringCallback() { @Override public void onCompleted(final Exception e, AsyncHttpResponse source, final String result) { if (e != null) { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { wait.dismiss(); Toast.makeText(MainActivity.this, "no connection", Toast.LENGTH_LONG).show(); e.printStackTrace(); } }); } if (!result.equals("")) { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { items.clone(); try { JSONArray jsonArray = new JSONArray(result); for (int i = 0; i < jsonArray.length(); i++) { JSONObject object = jsonArray.getJSONObject(i); HashMap<String, Object> hash_add = new HashMap<String, Object>(); hash_add.put("Date", object.getString("Date")); hash_all.add(hash_add); items = new String[hash_all.size()]; } } catch (Exception e) { e.printStackTrace(); } } }); } } }); کدهای php :
      function get(){ $connection = connectToDatabase(); $Username = $_REQUEST['Username']; $Pass = $_REQUEST['Pass']; if($Username!="" && $Pass!=""){ $result = mysqli_query($connection,"select Date from users where Username='$Username' and Pass='$Pass'"); $array_finish = array(); while($row = mysqli_fetch_array($result)){ $record = array(); $record['Date'] = $row['Date']; $array_finish[] = $record ; } echo json_encode($array_finish); }else { print "null"; } mysqli_close($connection); } می دونم که سمت اندروید برنامه م کامل نیست پس اگه راهی هست راهنماییم کنید کدهای متناسب با این php رو داخل اندروید بنویسم.
      ممنونم
       
    • توسط takin
      سلام 
      داشتم یه بازی آنلاین چهار نفره میساختم که به مشکل بر خودم 
      داخل بازی ازین قراره که هرکس میتونه به چهار جهت بالا پایین حرکت کنه و شلیک کنه 
      توضیحات بیشتر درمورد بازی
      ما دو آبجکت داریم  (گلوله) (پلیر)
      x و y متغیر محور مکان آبجکت که با کلید ها تغییر میکنه .
      با گزینه اسپیس ابجکت گلوله به وجود میاد با مختصات همون آبجکتی که شلیک کرده 
      مشکل
      مشکلم تو ارسال اطلاعات برای بقیست
      مشکل اصلیم ارسال زمان شلیکه 
      نظر خودم
      به نظرم یه جدول در mysql درست کنم که هر شخص محور های x و y داخل اون بفرسته هر لحضه
      یه جدول دیگه درست کنم که هروقت شلیک کرد سه تا تب به اسم سه بازیکن دیگه بسازه که هرکدوم از سه نفر اطلاعاتشو دریافت کرد اون تبی که با آیدیشه پاک بشه
      به نظرم کار میکنه اما دنبال یه روش درستم 
       
       
    • توسط siaic
      با سلام خدمت اساتید من تازه اندروید استودیو نصب کردم ولی ارور میده (عکس پیوست شده) لطفا راهنمایی کنید. در ضمن من کاملا مبتدی هستم لطفا روان توضیح بدید تشکر.

  • فایل

×
×
  • اضافه کردن...