hackn82

کرش شدن برنامه قبل از گرفتن دسترسی هنگام کپی دیتابیس

1 ارسال در این موضوع قرار دارد

سلام به همه اساتید گرامی . 

من یه برنامه کتاب نوشتم که از دیتابیس خارجی استفاده کردم . و چون از API 26 استفاده کردم باید حتما واسه کپی دیتابیس دسترسی بگیره . الان مشکلم اینجاست که بار اول برنامه به محض اجرا کرش میشه ولی صفحه دسترسی همچنان موجوده و پس از تایید و اجرای برنامه دیگه مشکلی نیست و برنامه به درستی اجرا میشه . کد برنامه رو براتون میفرستم ممنون میشم کمکم کنید . 

 

package farmani.com.essentialwordsforielts.mainPage;

import android.Manifest;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Build;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.design.widget.TabLayout;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import farmani.com.essentialwordsforielts.R;

public class MainActivity extends AppCompatActivity  {

public static Context context;
DrawerLayout drawerLayout;
NavigationView navigationView;
ImageView hamburger;
SQLiteDatabase database;
String destPath;

public static ArrayList<Structure> list = new ArrayList<Structure>();
public static ArrayList<Structure> favorite = new ArrayList<Structure>();

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

    if(Build.VERSION.SDK_INT >= 23){


        if(ContextCompat.checkSelfPermission(MainActivity.this, 
Manifest.permission.READ_EXTERNAL_STORAGE) != 
PackageManager.PERMISSION_GRANTED){

            ActivityCompat.requestPermissions(MainActivity.this
                    , new String[]{Manifest.permission.READ_EXTERNAL_STORAGE
                            ,Manifest.permission.WRITE_EXTERNAL_STORAGE}
                    , 1);

        }else if(ContextCompat.checkSelfPermission(MainActivity.this, 
Manifest.permission.WRITE_EXTERNAL_STORAGE) != 
PackageManager.PERMISSION_GRANTED){

            ActivityCompat.requestPermissions(MainActivity.this
                    , new String[]{Manifest.permission.READ_EXTERNAL_STORAGE
                            ,Manifest.permission.WRITE_EXTERNAL_STORAGE}
                    , 1);

        }else {

            Toast.makeText(MainActivity.this,"You grandet 
earlier",Toast.LENGTH_LONG).show();

        }


    }





    try {
        destPath = 
Environment.getExternalStorageDirectory().getAbsolutePath() + "/ielts/";
        File file = new File(destPath);
        if (!file.exists()) {
            file.mkdirs();
            file.createNewFile();
            CopyDB(getBaseContext().getAssets().open("md_book.db"),
                    new FileOutputStream(destPath + "/md_book.db"));
        }
    } catch (IOException e1) {
        e1.printStackTrace();
    }

    context = getApplicationContext();
    setTabOption();

    drawerLayout = findViewById(R.id.navigation_drawer);
    navigationView = findViewById(R.id.navigation_view);
    hamburger = findViewById(R.id.hamburger);
    hamburger.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            drawerLayout.openDrawer(Gravity.START);
        }
    });




    navigationView.setNavigationItemSelectedListener(new 
NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            int id = item.getItemId();
            if (id == R.id.exit) {
                AlertDialog.Builder alertDialog = new AlertDialog.Builder(
                        MainActivity.this);

                alertDialog.setTitle(R.string.exit);

                alertDialog.setMessage(R.string.exit_ask);
                alertDialog.setCancelable(false);

                alertDialog.setPositiveButton(R.string.yes,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int 
which) {
                                finish();
                            }
                        });

                alertDialog.setNegativeButton(R.string.no,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int 
which) {

                                dialog.cancel();
                            }
                        });

                alertDialog.show();
            }

            return true;
        }
    });

    selectList();
    selectFavorite();


}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] 
permissions, @NonNull int[] grantResults) {

    switch (requestCode) {
        case 1: {

            if (grantResults.length >= 2 && grantResults[0] == 
PackageManager.PERMISSION_GRANTED && grantResults[1] == 
PackageManager.PERMISSION_GRANTED) {

                Toast.makeText(MainActivity.this, "Access granted", 
Toast.LENGTH_LONG).show();

            }

        }
    }
}


@Override
public void onBackPressed() {
    if (drawerLayout.isDrawerOpen(Gravity.START)) {
        drawerLayout.closeDrawer(Gravity.START);
    } else {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(
                MainActivity.this);

        alertDialog.setTitle(R.string.exit);

        alertDialog.setMessage(R.string.exit_ask);
        alertDialog.setCancelable(false);

        alertDialog.setPositiveButton(R.string.yes,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                });

        alertDialog.setNegativeButton(R.string.no,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                        dialog.cancel();
                    }
                });

        alertDialog.show();
    }
}


private void setTabOption() {
    ViewPager viewPager = findViewById(R.id.viewpager);
    viewPager.setAdapter(new AdapterFragment(getSupportFragmentManager(), 
context));
    TabLayout tabStrip = findViewById(R.id.tabs);
    tabStrip.setupWithViewPager(viewPager);
}

private void CopyDB(InputStream inputStream, OutputStream outputStream) 
throws IOException {
    byte[] buffer = new byte[1024];
    int length;
    while ((length = inputStream.read(buffer)) > 0) {
        outputStream.write(buffer, 0, length);
    }
    inputStream.close();
    outputStream.close();
}

private void selectFavorite(){

    database = SQLiteDatabase.openOrCreateDatabase(destPath + "/md_book.db", 
null);
    Cursor cursor = database.rawQuery("SELECT * FROM main WHERE fav = 1", 
null);
    while (cursor.moveToNext()){
        String word = cursor.getString(cursor.getColumnIndex("word"));
        String definition = 
cursor.getString(cursor.getColumnIndex("definition"));
        String trans = cursor.getString(cursor.getColumnIndex("trans"));
        String img = cursor.getString(cursor.getColumnIndex("img"));
        int id = cursor.getInt(cursor.getColumnIndex("id"));

        Structure struct = new Structure(word, definition, trans, img, id);
        struct.setWord(word);
        struct.setDefinition(definition);
        struct.setTrans(trans);
        struct.setImg(img);
        struct.setId(id);
        favorite.add(struct);
    }

}

private void selectList(){

    database = SQLiteDatabase.openOrCreateDatabase(destPath + "/md_book.db", 
null);
    Cursor cursor = database.rawQuery("SELECT * FROM main", null);
    while (cursor.moveToNext()){
        String word = cursor.getString(cursor.getColumnIndex("word"));
        String definition = 
cursor.getString(cursor.getColumnIndex("definition"));
        String trans = cursor.getString(cursor.getColumnIndex("trans"));
        String img = cursor.getString(cursor.getColumnIndex("img"));
        int id = cursor.getInt(cursor.getColumnIndex("id"));

        Structure struct = new Structure(word, definition, trans, img, id);
        struct.setWord(word);
        struct.setDefinition(definition);
        struct.setTrans(trans);
        struct.setImg(img);
        struct.setId(id);
        list.add(struct);
    }

    }

}

 

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


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

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط rasoul.trt
      سلام دوستان امیداورم حالتون خوب باشه من یک کانال آموزش کاتلین رو راه انداختم خواستید کاتلین برای اندروید یاد بگیرید در خدمت هستم
      آدرس کانال
      @kotlin_vs_android
      https://t.me/kotlin_vs_android
      حتما عضو شوید
    • توسط Farzad Sarseifi

      یک محیط برنامه نویسی برای پلتفرم اندروید است. این برنامه در 16 می 2014 توسط مدیران گوگل در کنفرانس گوگل آی/او معرفی شد. از ماه جوئن 2014 نسخه پیش نمایش این برنامه (به صورت رایگان) برای امتحان در دسترس توسعه دهنده‌ها قرار گرفت. این محیط بر اساس نرم‌افزار محبوب جت برینز طراحی شده است، این استودیو بطور اختصاصی برای اندروید طراحی شده. هم اکنون این استودیو برای دانلود بر روی ویندوز، مک و لینوکس در دسترس می‌باشد.
      چندین ویژگی جدید در این نرم‌افزار برای کاربران می‌باشد:
      چیدمان زنده: ویرایشگر WYSIWYG – کدنویسی زنده – رندر هم زمان برنامه کنسول توسعه دهنده: راهنمای بهینه سازی – کمک برای ترجمه – ردیابی ارجاع – طریقه استفاده ارائه نسخه بتا و اجرای صحنه پشتیبانی از ساخت مبتنی بر Gradle رفع و عیب یابی مخصوص اندروید ابزار لینت برای گرفتن عملکرد، قابلیت استفاده، نسخه سازگار با مشکلات دیگر قابلیت Proguard و امضای برنامه مبتنی بر الگوی wizard برای ایجاد طرح اندروید و اجزای مشترک ویرایشگر طرح بندی غنی که به شما اجازه کشیدن و رها کردن UI کامنت‌ها را می‌دهند. گزینه‌ای برای تنظیمات پیش نمایش طرح بندی در صفحه نمایش چندگانه  
       
      با سپاس فراوان
      فرزاد سرسیفی
    • توسط Farzad Sarseifi
      کاربران گرامی انجمن اندروید ایران
      با توجه به نیازی که احساس میشد و برای رضایت بیشتر کاربران گرام انجمن فایل نصبی JDK 1.8 نسخه 64 بیتی برای دانلود روی سرور انجمن قرار گرفته است و میتوانید آن را دانلود نمایید.امید است براحتی بتوانید برنامه های اندروید را راه اندازی نمایید
      کیت توسعه جاوا (Java SE Development Kit – به اختصار JDK) شامل محیط اجرای جاوا (Java Runtime Environment – به اختصار JRE) به همراه ابزارهایی برای توسعه، دیباگ و مانیتورینگ اپلیکیشن‌های جاوا می‌باشد.کیت توسعه جاوا برای توسعه اپلیکیشن‌ها و اپلت‌های جاوا و همچنین اجرای آن‌ها ضروری است.
      ابزارهای JDK به پنج دسته تقسیم می‌شوند:
      ابزارهای پایه‌ای (Basic Tools) ابزارهای فراخوانی متد راه دور (Remote Method Invocation – به اختصار RMI) ابزارهای بین‌المللی سازی (Internationalization) ابزارهای امنیتی ابزارهای Java IDL
      لینک دانلود
       
      https://p30droid.com/Download/java/jdk-8u202-windows-x64.exe
       
      دوستدار شما- فرزاد سرسیفی
       
       
    • توسط shetmobile
      یک Navigation Bottom با طراحی منحصر به فرد و پیاده سازی آسان.
       
      لینک دانلود : https://github.com/shetmobile/MeowBottomNavigation
    • توسط roidket
      در سایت شاپ دروید شما می توانید سورس و پروژه های آماده اندروید(رایگان و پولی) را خریداری کنید و به راحتی از آن ها در اپلیکیشن های خود استفاده کنید. علاوه بر این اگر برنامه نویس هستید و سورس های اندروید آماده دارید در این سایت می توانید آن ها برای فروش بگذارید و از این طریق درآمد کسب کنید.
      اگر تصمیم دارید سورس های خود را در سایت بفروشید روی اینجا کلیک کنید تا مراحل ثبت نام برای شما نمایش داده شود.
      انواع سورس های بازی،  فروشگاهی و شبکه اجتماعی  در این سایت موجود است که چند نمونه را در ادامه برای شما آورده ایم. 
      ۱) سورس تلگرام غیر رسمی ضد فیلتر(موبوگرام)
      این سورس شباهت بسیار زیادی به اپلیکیشن های هاتگرام، تلگرام طلایی و … دارد و از لحاظ کارایی نیز بسیار قدرتمند و کارا می باشد. سورس تلگرام غیر رسمی که اکنون برای شما آماده کرده ایم، علاوه بر داشتن امکانات کم نظیر همانند حالت روح، فوروارد پیشرفته، دسته بندی گفتگوها، آیدی یاب، تم های مختلف و قابلیت  غیره، دارای ظاهری زیبا و کاربر پسند می باشد.
      ویژگی های هیجان انگیز دیگر :
       ۱- سرویس پوش نوتیفیکیشن
       ۲-قابلیت اد اجباری 
      3-قابلیت  ارسال ویو مخفی به پست های کانال
      4- قابلیت عضو کردن خودکار کاربران در کانال به همراه خوردن ویو 10 پست اخر
      5- قابلیت نمایش دیالوگ پاپ اپ

       
      ۲) سایت + اپلیکشن فروشگاهی(نسخه فارسی)
      نرم افزار اندروید و سایت CyiaShop  یک راه حل کامل برای راه اندازی فروشگاه آنلاین،کسب و کار شما است. با کلیک بر روی عکس می توانید نسخه پیش نمایش سایت + اپلیکیشین را مشاهده کنید.
       

       
      ۳) قالب های اماده متریال دیزاین نسخه ۲
      این سورس یک مجموعه ضروری برای هر برنامه نویس اندروید است. دیگر وقت ارزشمند  خود را صرف دیزاین کردن اپلیکشن خود نکنید. 
      دارای دیزاین های اماده زیر :
       25 استایل login & siunUp
       20 استایل Menu
       30 استایل Profile
      20 استایل Wizard / Walkthrough
      30 استایل Activity
      25 استایل Gallery
      30 استایل Ecommerce
      14 استایل Extra design
      14 استایل Music
      7  استایل News
      5 استایل  Content

       
      سورس رایگان DESIGN PATTERN برای اندروید با زبان کاتلین(KOTLIN)
      این سورس در واقع کلاس های دیزاین پترن ها را بصورت جداگانه و با زبان کاتلین در محیط اندروید استودیو برای شما محیا کرده است. 
      این  design pattern ها به شما کمک میکند تا بهتر بتوانید دانسته های برنامه نویسی خود از زبان جاوا را به زبان کاتلین منتقل کنید.

       
      برای دیدن به روزترین سورس های اندروید می توانید به سایت شاپ دروید مراجعه نمایید.
       

  • دوره آموزشی اندروید آموزش ویدئویی اندروید سورس اندروید دوره اندروید آموزش Kotlin آموزش برنامه نویسی ios مهارت های فروش طراحی اپلیکیشن Kurdina Music Android Framework
  • فایل