2017-11-30 14 views
1

SQLite onCreate를 만들고 레코드를 쿼리하는 Android 애플리케이션을 개발 중입니다. 모두 내 안드로이드 에뮬레이터에서 작동하지만 내 안드로이드 장치 (삼성 갤럭시 7 엣지)에 배포/디버깅 할 때 데이터베이스가 비어있는 것처럼 보입니다.SQLite는 실제 장치에서 작동하지 않지만 에뮬레이터에서 작동합니다.

나는 에뮬레이터에서 테스트하여 정상적으로 작동합니다. SQLite가 내 전화에서 생성/쿼리되는 것 같지 않은 이유는 무엇입니까? 내 매니페스트에 추가 권한이 필요합니까?

도와주세요. 다음은 내 코드입니다

package com.example.android.cebuanotagalogtranslator; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class MainActivity extends AppCompatActivity { 

    Button btn_clear; 
    Button btn_translate_to_ceb; 
    Button btn_translate_to_fil; 
    EditText txt_input; 
    EditText txt_output; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     //HABAGAT CONTROLS BEGIN 
     btn_clear = (Button) findViewById(R.id.btn_clear); 
     btn_translate_to_ceb = (Button) findViewById(R.id.btn_trans_to_ceb); 
     btn_translate_to_fil = (Button) findViewById(R.id.btn_trans_to_fil); 

     txt_input = (EditText) findViewById(R.id.input); 
     txt_output = (EditText) findViewById(R.id.output); 

     //HABAGAT : CLEAR BOTH TEXT 
     btn_clear.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       txt_input.setText(""); 
       txt_output.setText(""); 
      } 
     }); 

     //: FILIPINO -> CEBUANO 
     btn_translate_to_ceb.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 


       try { 
        String textinput = txt_input.getText().toString(); 
        textinput = "\""+ textinput +"\""; 
        String filToCebQuery = "SELECT ceb FROM filtoceb WHERE fil = "+ textinput+" "+"COLLATE NOCASE"; 
        SQLiteDatabase DB = openOrCreateDatabase("filtoceb", MODE_PRIVATE, null); 
        //Cursor c = DB.rawQuery("SELECT * FROM filtoceb", null); 
        Cursor c = DB.rawQuery(filToCebQuery, null); 


        if (c!=null) 
        { 
         System.out.println("RESULT FOUND : FIL -> CEB"); 
         try { 
          c.moveToFirst(); 
          while(!c.isAfterLast()){ 
           String result = c.getString(c.getColumnIndex("ceb")); 
           txt_output.setText(result); 
           c.moveToNext(); 
          } 
         } 
         finally 
         { 
          c.close(); 
         } 
        } 


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

      } 
     }); 

     //: CEBUANO -> FILIPINO 
     btn_translate_to_fil.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 


       try { 
        String textinput = txt_input.getText().toString(); 
        textinput = "\""+ textinput +"\""; 
        String filToCebQuery = "SELECT fil FROM filtoceb WHERE ceb = "+ textinput+" "+"COLLATE NOCASE"; 
        SQLiteDatabase DB = openOrCreateDatabase("filtoceb", MODE_PRIVATE, null); 

        Cursor c = DB.rawQuery(filToCebQuery, null); 


        if (c!=null) 
         System.out.println("RESULT FOUND : CEB -> FIL "); 
        { 
         try { 
          c.moveToFirst(); 
          while(!c.isAfterLast()){ 
           String result = c.getString(c.getColumnIndex("fil")); 
           txt_output.setText(result); 
           c.moveToNext(); 
          } 
         } 
         finally 
         { 
          c.close(); 
         } 
        } 


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

      } 
     }); 

     // CREATE DB OPEN IF NOT CREATED YET 
     try { 
      SQLiteDatabase eventsDB = this.openOrCreateDatabase("filtoceb", MODE_PRIVATE, null); 

      //DELETE INITIALIZE SETUP START CLEAN 
      eventsDB.delete("filtoceb", "1", null); 

      eventsDB.execSQL("CREATE TABLE IF NOT EXISTS filtoceb (fil VARCHAR, ceb VARCHAR)"); 
      eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Kumusta ka?','Kumusta ka?')"); 
      eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Maayo, salamat', 'Mabuti naman, salamat')"); 
      eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Unsay imong pangalan?', 'Ano pangalan mo?')"); 
      eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Unsay ngalan mo?', 'ano pangalan mo?')"); 
      eventsDB.execSQL("INSERT INTO filtoceb (CEB, FIL) values ('Maayo nga nagka-ila ta', 'Ikinagagalak kitang makilala')"); 
      eventsDB.execSQL("INSERT INTO filtoceb (CEB, FIL) values ('Palihug','Please')");   

      eventsDB.close(); 

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


    } 


} 

아래에있는 내 매니페스트입니다 : 나는 당신의 문제로 인해 다음 줄의 위치에있을 수 있다고 생각

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

+0

주 당신의 dbhelper 클래스 – Bek

+3

귀하의 질문을 수정하시기 바랍니다과 [mcve] 제공합니다. 여기에는 SQLite와 함께 작동하는 코드와 "데이터베이스가 비어있는 것"을 어떻게 결정하는지 보여주는 사례가 포함됩니다. – CommonsWare

+0

어느 API 레벨은 에뮬레이터에? – Bek

답변

1

가. 이 라인이 존재하지 않을 상정을 실행할 때 데이터베이스가 존재하지 않는 경우

 eventsDB.delete("filtoceb", "1", null); 

은이 시간에 같은 오류가 발생할 것입니다.

용액 테이블을 작성한 후까지 때까지 라인을 이동한다.

그래서 대신 : -

try { 
     SQLiteDatabase eventsDB = this.openOrCreateDatabase("filtoceb", MODE_PRIVATE, null); 

     //DELETE INITIALIZE SETUP START CLEAN 
     eventsDB.delete("filtoceb", "1", null); 

     eventsDB.execSQL("CREATE TABLE IF NOT EXISTS filtoceb (fil VARCHAR, ceb VARCHAR)"); 
     eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Kumusta ka?','Kumusta ka?')"); 
     eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Maayo, salamat', 'Mabuti naman, salamat')"); 
     eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Unsay imong pangalan?', 'Ano pangalan mo?')"); 
     eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Unsay ngalan mo?', 'ano pangalan mo?')"); 
     eventsDB.execSQL("INSERT INTO filtoceb (CEB, FIL) values ('Maayo nga nagka-ila ta', 'Ikinagagalak kitang makilala')"); 
     eventsDB.execSQL("INSERT INTO filtoceb (CEB, FIL) values ('Palihug','Please')");   

     eventsDB.close(); 

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

사용 : -

try { 
     SQLiteDatabase eventsDB = this.openOrCreateDatabase("filtoceb", MODE_PRIVATE, null); 

     eventsDB.execSQL("CREATE TABLE IF NOT EXISTS filtoceb (fil VARCHAR, ceb VARCHAR)"); 
     //DELETE INITIALIZE SETUP START CLEAN 
     eventsDB.delete("filtoceb", "1", null); 
     eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Kumusta ka?','Kumusta ka?')"); 
     eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Maayo, salamat', 'Mabuti naman, salamat')"); 
     eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Unsay imong pangalan?', 'Ano pangalan mo?')"); 
     eventsDB.execSQL("INSERT INTO filtoceb (ceb, fil) VALUES ('Unsay ngalan mo?', 'ano pangalan mo?')"); 
     eventsDB.execSQL("INSERT INTO filtoceb (CEB, FIL) values ('Maayo nga nagka-ila ta', 'Ikinagagalak kitang makilala')"); 
     eventsDB.execSQL("INSERT INTO filtoceb (CEB, FIL) values ('Palihug','Please')");   

     eventsDB.close(); 

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