2016-12-28 20 views
-2

我可以運行我的應用程序高達Android 5.1.1。但不能進入主頁到Android 6(DB創建和數據可以在這裏插入),應用程序在這裏強行停止工作。我無法在棉花糖運行我的應用程序。我該如何解決這個問題?

以上Android 6 DB沒有創建。任何一個可以提供一個解決方案...

DBHelper類

public class DatabaseHelper extends SQLiteOpenHelper{ 

    private static final String DatabaseName="/mnt/sdcard/Hmeauto1_DB.db"; 
    private static final int DatabaseVersion=1; 
    SQLiteDatabase db; 
    public String c=null; 





     public static final String Query = "CREATE TABLE " + UserConstruct.newUserinfo.TableName + " (" + UserConstruct.newUserinfo.Id + " INTEGER PRIMARY KEY AUTOINCREMENT, " + UserConstruct.newUserinfo.UserName + " TEXT, " + UserConstruct.newUserinfo.Password + " TEXT," + UserConstruct.newUserinfo.FName + " TEXT, " + UserConstruct.newUserinfo.LName + " TEXT," + UserConstruct.newUserinfo.ACode + " TEXT," + UserConstruct.newUserinfo.AEmail + " TEXT, " + UserConstruct.newUserinfo.User_Type + " TEXT);"; 

     public static final String Query1 = "CREATE TABLE " + UserConstruct.add_home.TableName + " (" + UserConstruct.add_home.Home_Id + " INTEGER PRIMARY KEY AUTOINCREMENT, " + UserConstruct.add_home.Home_Name + " TEXT, " + UserConstruct.add_home.Home_Number + " INTEGER, " + UserConstruct.add_home.UserName + " TEXT);"; 

     public static final String Query2 = "CREATE TABLE " + UserConstruct.add_Floors.TableName + " (" + UserConstruct.add_Floors.Flr_Id + " INTEGER PRIMARY KEY AUTOINCREMENT, " + UserConstruct.add_Floors.Home_Id + " INTEGER, " + UserConstruct.add_Floors.Flr_Name + " TEXT, " + UserConstruct.add_Floors.Flr_Number + " INTEGER, " + UserConstruct.add_Floors.UserName + " TEXT ;"; 

     public static final String Query3 = "CREATE TABLE " + UserConstruct.add_Rooms.TableName + " (" + UserConstruct.add_Rooms.Room_Id + " INTEGER PRIMARY KEY AUTOINCREMENT, " + UserConstruct.add_Rooms.Flr_Id + " INTEGER, " + UserConstruct.add_Rooms.Home_Id + " INTEGER, " + UserConstruct.add_Rooms.Room_Name + " TEXT, " + UserConstruct.add_Rooms.Room_Number + " INTEGER, " + UserConstruct.add_Rooms.UserName + " TEXT ;"; 

     // public static final String Floor="CREATE TABLE "+UserConstruct.Floors.TableName+" ("+UserConstruct.Floors.Flr_Id+" INTEGER PRIMARY KEY AUTOINCREMENT, "+UserConstruct.Floors.Flr_Name+" TEXT);"; 
     public static final String Query4 = "CREATE TABLE " + UserConstruct.image_list.TableName + " (" + UserConstruct.image_list.Id + " INTEGER PRIMARY KEY AUTOINCREMENT, " + UserConstruct.image_list.Image_Name_fxd + " TEXT, " + UserConstruct.image_list.Image_Name + " TEXT, " + UserConstruct.image_list.Device_ID + " TEXT, " + UserConstruct.image_list.Home_Id + " INTEGER, " + UserConstruct.image_list.Flr_Id + " INTEGER, " + UserConstruct.image_list.Room_Id + " INTEGER, " + UserConstruct.image_list.UserName + " TEXT);"; 


     public DatabaseHelper(Context context) 
     { 
      super(context, DatabaseName, null, DatabaseVersion); 
      Log.e("Database operation", "created or opened"; 
      // Log.d("path:", String.valueOf(context.getDatabasePath(DatabaseName))); 

     } 


     @Override 
     public void onCreate (SQLiteDatabase db) 
     { 
      try { 
       db.execSQL(Query); 
       Log.e("Created", "User Table Created"; 
       db.execSQL(Query1); 
       Log.e("Created", "Add Home Table Created"; 
       db.execSQL(Query2); 
       Log.e("Created", "Add Floor Table Created"; 
       db.execSQL(Query3); 
       Log.e("Created", "Add Room Table Created"; 
       db.execSQL(Query4); 
       Log.e("Created", "Add Room Table Created"; 
      }catch (RuntimeException e){e.printStackTrace();} 


     } 

     @Override 
     public void onUpgrade (SQLiteDatabase db,int oldVersion, int newVersion) 
     { 
      try { 
       String query = "DROP TABLE IF EXIST" + UserConstruct.newUserinfo.TableName; 
       db.execSQL(query); 
       String query1 = "DROP TABLE IF EXIST" + UserConstruct.add_Rooms.TableName; 
       db.execSQL(query1); 
       String query2 = "DROP TABLE IF EXIST" + UserConstruct.add_Floors.TableName; 
       db.execSQL(query2); 
       String query3 = "DROP TABLE IF EXIST" + UserConstruct.add_home.TableName; 
       db.execSQL(query3); 
       String query4 = "DROP TABLE IF EXIST" + UserConstruct.image_list.TableName; 
       db.execSQL(query4); 
      }catch(RuntimeException e){e.printStackTrace();} 
      // this.db=db; 

     } 

    public void insert(String Fname, String Lname, String Aemail, String Acode, String userName, String Password, String userType, SQLiteDatabase db) { 
     ContentValues contentvalue = new ContentValues(); 
     contentvalue.put(UserConstruct.newUserinfo.FName, Fname); 
     contentvalue.put(UserConstruct.newUserinfo.LName, Lname); 
     contentvalue.put(UserConstruct.newUserinfo.AEmail, Aemail); 
     contentvalue.put(UserConstruct.newUserinfo.ACode, Acode); 
     contentvalue.put(UserConstruct.newUserinfo.UserName, userName); 
     contentvalue.put(UserConstruct.newUserinfo.Password, Password); 
     contentvalue.put(UserConstruct.newUserinfo.User_Type, userType); 

     db.insert(UserConstruct.newUserinfo.TableName, null, contentvalue); 
     Log.e("Insertion", "One row inserted"; 
     db.close(); 


    } 

註冊數據

View.OnClickListener adduserOnClickListener=new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     try { 
     fname=(EditText)findViewById(R.id.editTextFname); 
     sname=(EditText)findViewById(R.id.editTextsname); 
     email=(EditText)findViewById(R.id.editTextEmail); 
     code=(EditText)findViewById(R.id.editTextcode); 
     Uname=(EditText)findViewById(R.id.editTextuser); 
     pwrd=(EditText)findViewById(R.id.editTextpass); 
     //utype=(Spinner)findViewById(R.id.spinnerutype); 

     String fname1 = fname.getText().toString(); 
     String lname1 = sname.getText().toString(); 
     String email1 = email.getText().toString(); 
     String code1 = code.getText().toString(); 
     String uname1 = Uname.getText().toString(); 
     String pswd1 = pwrd.getText().toString(); 
     String utype1 = "admin"; 


     if (fname1.equals("") { 
      Toast.makeText(getBaseContext(), "Enter First Name", Toast.LENGTH_LONG).show(); 

     } else if (lname1.equals("") { 
      Toast.makeText(getBaseContext(), "Enter Second Name", Toast.LENGTH_LONG).show(); 
     } else if (email1.equals("") { 
      Toast.makeText(getBaseContext(), "Enter Email Id ", Toast.LENGTH_LONG).show(); 
     } else if (code1.equals("") { 
      Toast.makeText(getBaseContext(), "Enter Authentication Code ", Toast.LENGTH_LONG).show(); 
     } else if (uname1.equals("") { 
      Toast.makeText(getBaseContext(), "Enter User Name", Toast.LENGTH_LONG).show(); 
     } else if (pswd1.equals("") { 
      Toast.makeText(getBaseContext(), "Enter Password ", Toast.LENGTH_LONG).show(); 
     }else { 
      try { 
       sqlitedatabase = openOrCreateDatabase(DatabaseName, Context.MODE_PRIVATE, null); 
       Cursor allrows19 = sqlitedatabase.rawQuery("SELECT * FROM " + UserConstruct.newUserinfo.TableName + " WHERE " + UserConstruct.newUserinfo.UserName + "=='" + uname1 + "'", null); 
       if (allrows19.getCount() <= 0) { 
        // Toast.makeText(getBaseContext(), "Not exist", Toast.LENGTH_LONG).show(); 
        exist = false; 

       } else if (allrows19.getCount() < 1) { 
        exist = false; 
        // Toast.makeText(getBaseContext(), "Not exist", Toast.LENGTH_LONG).show(); 
       } 

       allrows19.close(); 
       dbhelper.close(); 

      } catch (Exception e) { 
       Toast.makeText(getApplicationContext(), "", 
         Toast.LENGTH_LONG); 
      } 


      if (exist) { 

       Toast.makeText(getBaseContext(), "This User Name not available", Toast.LENGTH_LONG).show(); 

      } 
      else 
      { 
       dbhelper = new DatabaseHelper(context); 
       sqlitedatabase = dbhelper.getWritableDatabase(); 
       dbhelper.insert(fname1, lname1, email1, code1, uname1, pswd1, utype1, sqlitedatabase); 
       Toast.makeText(getBaseContext(), "Data inserted", Toast.LENGTH_LONG).show(); 
       dbhelper.close(); 
       Registration.this.finish(); 
       Intent intent=new Intent(Registration.this,LoginActivity.class); 
       startActivity(intent); 


      } 
     } 

    // } 



     }catch (NullPointerException e){e.printStackTrace();} 


    } 
}; 
+1

把你堆棧垃圾 –

+0

上午在Android ..堆棧垃圾手段? – Sjn

+0

我猜它是因爲權限。你必須請求在數據庫寫入數據庫到運行時的棉花糖的權限 –

回答

0

更改數據庫路徑,您的應用程序專用通道,否則你需要運行change sd card files權限在SD卡上寫數據

PackageManager m = getPackageManager(); 
String s = getPackageName(); 
try { 
     PackageInfo p = m.getPackageInfo(s, 0); 
     s = p.applicationInfo.dataDir; 
} catch (PackageManager.NameNotFoundException e) { 
     Log.w("yourtag", "Error Package name not found ", e); 
} 

所以s變量是專用的應用程序路徑
並提供一定的logcat日誌如果上述解決方案不起作用

+0

我認爲db路徑已經是私有的。 – Sjn

+0

私人Koorosh是不是我的朋友訪問修飾符,他說不提供存儲路徑,提供與您的應用程序相關的路徑,您可以嘗試我的解決方案。 – Mrinmoy

+0

看到編輯的答案,並使用s變量加上你的db文件名來創建你的數據庫,否則要求用戶的外部存儲權限 –

0

你應該檢查,如果用戶通過使用授權外部存儲的權限:

if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { 
    Log.v(TAG,"Permission is granted"); 
    return true; 
} 

如果沒有,你需要問用戶授予您的應用程序權限:

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

當然這些都是棉花糖設備只所以你需要檢查,如果您的應用程序上的棉花糖運行:

if (Build.VERSION.SDK_INT >= 23) { 
     //do your check here 
} 

也確保您的活動實現OnRequestPermissionResult

整個權限如下:

public boolean isStoragePermissionGranted() { 
    if (Build.VERSION.SDK_INT >= 23) { 
     if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
       == PackageManager.PERMISSION_GRANTED) { 
      Log.v(TAG,"Permission is granted"); 
      return true; 
     } else { 

      Log.v(TAG,"Permission is revoked"); 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
      return false; 
     } 
    } 
    else { //permission is automatically granted on sdk<23 upon installation 
     Log.v(TAG,"Permission is granted"); 
     return true; 
    } 
} 

許可結果的回調:

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if(grantResults[0]== PackageManager.PERMISSION_GRANTED){ 
     Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]); 
     //resume tasks needing this permission 
    } 
} 
+0

我可以在Marshmellow中運行我的應用程序如果我設置目標sdk版本22? – Sjn

+0

是的,你可以和更高的版本也 – Mrinmoy

+0

它不工作。 – Sjn