vendredi 2 octobre 2015

Can't import CSV to SQLite database on Android Studio

i am a newbie of android programming. Here i have some error that make me so confuse. I am developing an android app that require a database which is have value on it before user can use the app. Now i have that data on my .csv file and i want when the user first run the app, the data on my .csv file will imported and fill the value of database on SQLite.

I have searching and finding some pattern of code, but all of that doesn't work on my app. I don't know why its getting error "Unhandled Exception java.io.IOException". I don't know what happen, please master help me. Thanks before.

NB. this my code for MainActivity.java

public class MainActivity extends ActionBarActivity {
Button btnKet1, btnKet2, btnKet3, btnKet4, btnNext;
TextView txtKet;
SQLiteDatabase db;
RadioButton rd1, rd2, rd3, rd4;
public static String answer;
Integer[] arr = new Integer[10];
public int a,b,c,d;
String[]jawab=new String[10];
int count = 0;
public String dom;
DatabaseHelper dbH = new DatabaseHelper(this);
public String Id, A, B, C, D, aExplain, bExplain, cExplain, dExplain;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btnKet1 = (Button)findViewById(R.id.btn1);
    btnKet2 = (Button)findViewById(R.id.btn2);
    btnKet3 = (Button)findViewById(R.id.btn3);
    btnKet4 = (Button)findViewById(R.id.btn4);
    btnNext = (Button)findViewById(R.id.btnNext);
    txtKet = (TextView)findViewById(R.id.txtKeterangan);
    rd1 = (RadioButton)findViewById(R.id.rd1);
    rd2 = (RadioButton)findViewById(R.id.rd2);
    rd3 = (RadioButton)findViewById(R.id.rd3);
    rd4 = (RadioButton)findViewById(R.id.rd4);
    onButtonClickListener2();
}

private void onRadioButtonClick(){
    if(rd1.isChecked()){
        answer = "A";
    }else if(rd2.isChecked()){
        answer = "B";
    }else if (rd3.isChecked()){
        answer = "C";
    }else if (rd4.isChecked()){
        answer = "D";
    }else{
        answer = "O";
    }
}

private void showData(){
    db = dbH.getReadableDatabase();
    Cursor cursor = db.rawQuery("select * from table_question", null);

    if (cursor.moveToFirst()) {
        do {
            Id = cursor.getString(0);
            A = cursor.getString(1);
            B = cursor.getString(2);
            C = cursor.getString(3);
            D = cursor.getString(4);
            aExplain = cursor.getString(5);
            bExplain = cursor.getString(6);
            cExplain = cursor.getString(7);
            dExplain = cursor.getString(8);

        } while (cursor.moveToNext());
    }
    cursor.close();
    db.close();
}

private void onButtonClickListener2(){
    btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onRadioButtonClick();
            jawab[count]=answer;
            count++;
            txtKet.setText(String.valueOf(count));
            //nanti disini while id question <40 process stop
        }
    });
    btnKet1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for(int i=0;i<count;i++) {
                Log.d("Array", "On The Array : " + jawab[i]);
            }
        }
    });
    btnKet2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            for (int i = 0; i < count; i++) {
                if (jawab[i] == "A") {
                    a = a + 1;
                } else if (jawab[i] == "B") {
                    b = b + 1;
                } else if (jawab[i] == "C") {
                    c = c + 1;
                } else if (jawab[i] == "D") {
                    d = d + 1;
                } else {
                    Toast.makeText(MainActivity.this, "Anjay error ga milih Rd Buton", Toast.LENGTH_LONG).show();
                }
            }
        }
    });
    btnKet3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
              if(a > b && a > c && a > d) {
                  dom ="A";
              }else if(b>a && b>c && b>d){
                  dom = "B";
              }else if (c>a && c>b && c>d){
                  dom = "C";
              }else if (d>a && d>b && d>c){
                  dom = "D";
              }else{
                  dom="Z";
              }
        }
    });btnKet4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            txtKet.setText(dom);
        }
    });

}



public void loadCSV(){ 

    InputStream is = getAssets().open("myfile.csv");
    BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); //errors come from here
    FileReader file = new FileReader(csv);
    String line = "";
    String tableName ="question_table";
    String columns = "QuestId, a, b, c, d, aExplain, bExplain, cExplain, dExplain, _id";
    String str1 = "INSERT INTO " + tableName + " (" + columns + ") values(";
    String str2 = ");";

    db.beginTransaction();
    while ((line = buffer.readLine()) != null) {
        StringBuilder sb = new StringBuilder(str1);
        String[] str = line.split(",");
        sb.append("'" + str[0] + "',");
        sb.append(str[1] + "',");
        sb.append(str[2] + "',");
        sb.append(str[3] + "'");
        sb.append(str[4] + "'");
        sb.append(str[5] + "'");
        sb.append(str[6] + "'");
        sb.append(str[7] + "'");
        sb.append(str[8] + "'");
        sb.append(str[9] + "'");
        sb.append(str2);
        db.execSQL(sb.toString());
    }
    db.setTransactionSuccessful();
    db.endTransaction();
}




private void onButtonClickListener(){
    btnNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        onRadioButtonClick();
            AsyncTaskRunner runner = new AsyncTaskRunner();
            runner.execute(answer);

        }
    });

    btnKet1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    btnKet2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    btnKet3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    btnKet4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}

private class AsyncTaskRunner extends AsyncTask<String, String, Integer[]>{
    private Integer[] answerpasti = new Integer[40];
    Integer answertemp = Integer.parseInt(answer);
    String respon;

    @Override
    protected Integer[] doInBackground(String... params) {
        publishProgress("Antos Jep Kleng"); // Calls onProgressUpdate()
        try {
            for(int i = 0;i<40;i++){
                answerpasti[i]=answertemp;
            }
        } catch (Exception e) {
            e.printStackTrace();
            respon = e.getMessage();
        }return null;

    }

    @Override
    protected void onPostExecute(Integer[] integers) {

    }
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

}

and this one for DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper {
public static final String MyVillageSoftware = "MyVillageSoftware";
public static final String DATABASE_NAME = "Question.db";
public static final String table_Question = "table_question";

public static final String COL1 = "QuestId";
public static final String COL2 = "A";
public static final String COL3 = "B";
public static final String COL4 = "C";
public static final String COL5 = "D";
public static final String COL6 = "aExplain";
public static final String COL7 = "bExplain";
public static final String COL8 = "cExplain";
public static final String COL9 = "dExplain";
public static final String COL10 = "_id";
//TOL for transaction Coloumn
SQLiteDatabase db;

private static final String TAG = DatabaseHelper.class.getSimpleName();



public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);

}

@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL("Create table " + table_Question +
            " (QuestId Integer PRIMARY KEY, " +
            "A Text," +
            "B Text," +
            "C Text" +
            "D Text," +
            "aExplain Text," +
            "bExplain Text," +
            "cExplain Text," +
            "dExplain Text," +
            "_id Text)");

}



public List<String> getAllCategory() {
    List<String> AllCategoryList = new ArrayList<String>();
    List<String> AllCategIdList = new ArrayList<String>();

    String selectQuery = "SELECT * FROM " + table_Question;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);



    if (cursor.moveToFirst()) {
        do {
            String Id = cursor.getString(0);
            String A = cursor.getString(1);
            String B = cursor.getString(2);
            String C = cursor.getString(3);
            String D = cursor.getString(4);
            String aExplain = cursor.getString(5);
            String bExplain = cursor.getString(6);
            String cExplain = cursor.getString(7);
            String dExplain = cursor.getString(8);

        } while (cursor.moveToNext());
    }
    cursor.close();
    db.close();
    return AllCategoryList;
}


@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + table_Question);
    onCreate(db);

}

}

Aucun commentaire:

Enregistrer un commentaire