When working on my assignment in course named Mobile Application. I had a
problem that my program has two tables, both of them belong to a single
database.
In my program, I used SQLiteHelper, the program has two diffirential classes
which handle database working process.
publicclassTaskDaoImplextendsSQLiteOpenHelperimplementsTaskDao{//singletonprivatestaticTaskDaoImplinstance=null;privateContextcontext;privateArrayList<Task>tasks;privatestaticfinalintDATABASE_VERSION=1;privatestaticfinalStringDATABASE_NAME="TaskManager";privatestaticfinalStringTABLE_TASK="task";//TABLE INFORMATIONprivatestaticfinalStringtaskId="ID";privatestaticfinalStringtaskTitle="TITLE";privatestaticfinalStringtaskNote="NOTE";privatestaticfinalStringtaskDueDate="DATE";privatestaticfinalStringtaskPriorityLevel="PRIORITY";privatestaticfinalStringtaskCollaborators="COLLABORATOR";privatestaticfinalStringtaskStatus="STATUS";privatestaticfinalStringtaskGroupId="GROUPID";privateSQLiteDatabasemydatabase;privateTaskDaoImpl(Contextcontext){super(context,DATABASE_NAME,null,DATABASE_VERSION);this.context=context;}publicstaticTaskDaoImplgetInstance(Contextctx){if(instance==null){instance=newTaskDaoImpl(ctx);instance.tasks=newArrayList<Task>();instance.createTableIfNotExist();Log.v("TaskDaoImpl: ","getInstance() active");}returninstance;}@OverridepublicvoidonCreate(SQLiteDatabasesqLiteDatabase){Stringcreate_db="CREATE TABLE "+TABLE_TASK+"("+taskId+" INTEGER PRIMARY KEY, "+taskTitle+" TEXT, "+taskNote+" TEXT, "+taskDueDate+" INTEGER, "+taskPriorityLevel+" INTEGER, "+taskCollaborators+" TEXT, "+taskStatus+" INTEGER, "+taskGroupId+" INTEGER"+")";sqLiteDatabase.execSQL(create_db);Log.v("TaskDaoImpl","Did create table "+TABLE_TASK);}@OverridepublicvoidonUpgrade(SQLiteDatabasesqLiteDatabase,inti,inti2){onCreate(sqLiteDatabase);}publicvoidcreateTableIfNotExist(){mydatabase=this.getWritableDatabase();Stringcreate_db="CREATE TABLE IF NOT EXISTS "+TABLE_TASK+"("+taskId+" INTEGER PRIMARY KEY, "+taskTitle+" TEXT, "+taskNote+" TEXT, "+taskDueDate+" INTEGER, "+taskPriorityLevel+" INTEGER, "+taskCollaborators+" TEXT, "+taskStatus+" INTEGER, "+taskGroupId+" INTEGER"+")";mydatabase.execSQL(create_db);}@OverridepublicArrayList<Task>getAllTasks(){returntasks;}@OverridepublicintcreateTask(Tasktask){intmaxID;if(tasks.isEmpty()==true){maxID=0;}else{intid=tasks.get(tasks.size()-1).getId();maxID=id+1;}task.setId(maxID);tasks.add(task);SQLiteDatabasedb=this.getWritableDatabase();ContentValuesvalues=newContentValues();values.put(taskId,task.getId());values.put(taskTitle,task.getTitle());values.put(taskNote,task.getNote());values.put(taskDueDate,task.getDueDate().getTime()/1000);values.put(taskPriorityLevel,task.getPriorityLevel());//collaborator from arraylist to StringStringBuilderstringB=newStringBuilder();for(inti=0;i<task.getCollaborator().size();i++){stringB.append(task.getCollaborator().get(i));if(i<task.getCollaborator().size()-1){stringB.append(",");}}values.put(taskCollaborators,stringB.toString());values.put(taskStatus,task.isCompletionStatus());values.put(taskGroupId,task.getGroupID());db.insert(TABLE_TASK,null,values);db.close();return1;}@OverridepublicTaskgetTaskByID(intid){for(inti=0;i<tasks.size();i++){if(tasks.get(i).getId()==id){returntasks.get(i);}}returnnull;}publicArrayList<Task>getTaskByGroupID(intid){ArrayList<Task>filteredList=newArrayList<Task>();for(inti=0;i<tasks.size();i++){if(tasks.get(i).getGroupID()==id){filteredList.add(tasks.get(i));}}returnfilteredList;}publicvoiddeleteTaskByGroupID(intgroupID){for(intx=0;x<tasks.size();x++){if(tasks.get(x).getGroupID()==groupID){deleteTask(tasks.get(x));x--;}}}@OverridepublicintupdateTask(Tasktask){for(inti=0;i<tasks.size();i++){if(tasks.get(i).getId()==task.getId()){tasks.get(i).setCollaborator(task.getCollaborator());tasks.get(i).setCompletionStatus(task.isCompletionStatus());tasks.get(i).setDueDate(task.getDueDate());tasks.get(i).setPriorityLevel(task.getPriorityLevel());tasks.get(i).setTitle(task.getTitle());tasks.get(i).setNote(task.getNote());return1;}}return0;}@OverridepublicintdeleteTask(Tasktask){SQLiteDatabasedb=this.getWritableDatabase();db.beginTransaction();db.delete(TABLE_TASK,taskId+" = ?",newString[]{String.valueOf(task.getId())});db.setTransactionSuccessful();db.endTransaction();Log.v("TaskDaoImpl: ",task.getId()+"-"+task.getTitle());tasks.remove(task);db.close();return0;}publicvoidinit(){tasks.removeAll(tasks);Log.v("TaskDaoImpl: ","init method");SQLiteDatabasedb=this.getReadableDatabase();Stringquery="SELECT * FROM "+TABLE_TASK;Cursorcursor=db.rawQuery(query,null);if(cursor.moveToFirst()){do{Tasktask=newTask();task.setId(Integer.parseInt(cursor.getString(0)));task.setTitle(cursor.getString(1));task.setNote(cursor.getString(2));Datedatetime=newDate(Long.parseLong(cursor.getString(3))*1000);Log.v("datetime ",datetime.toString());task.setDueDate(datetime);task.setPriorityLevel(Integer.parseInt(cursor.getString(4)));//get collaboratorsStringcollaboratorsS=cursor.getString(5);ArrayList<String>colaList=newArrayList<String>(Arrays.asList(collaboratorsS.split(",")));task.setCollaborator(colaList);//get statusif(Integer.parseInt(cursor.getString(6))==0){task.setCompletionStatus(false);}else{task.setCompletionStatus(true);}//set group idtask.setGroupID(Integer.parseInt(cursor.getString(7)));task.print();//add to array list - liststasks.add(task);}while(cursor.moveToNext());}}}
#ISSULE AND PROBLEM
In general, in order to use SQLiteHelper to make new table and database.
function named onCreate(SQLiteDatabase db) will be invoked to do that. In my
program, TaskGroupImpl instance is initialized before TaskDaoImpl, bug happend
here, when I make a new instance of TaskDaoImpl - ofcourse after TaskGroupImpl,
table named task would not be created or function named onCreate(SQLiteDatabase
db) is not invoked.
#Solution
I make an extra function to make new table manually. This function named
createTableIfNotExist(), it belong to TaskDaoImpl class - because it has a new
table which I want to make but not create automatically by SQLiteHelper.
When make call a instance of TaskDaoImpl, I also check to make a new table
name task. If it is exist, make no new table, if not, make a new table.
Main Class: cosc2010.assignment1.controller.ProgramLaucher
next line here(compulsory)
#2. Making file .class
This file is a compiled file of file.java. In order to make this file. Use the
following command on the terminal.
In this case, my output is a file named ProgramLaucher.class
#3.Setting up folder for compile
In order to compile java source code, you need to add file manifest.txt and
compiled file file.class. For example in the case above, after make a new
directory, our directory should be
I am now introducing a simple way to download video from Youtube by conkeror and an extra terminal program name cclive. This program take role to catch the link of youtube video and download it to assigned directory. In addition, you can choose type of video to download, of course, it also depends on the source.However, I am not going to further to that point.
What you need is: cclive, conkeror-spawn-helper
Firstly, you need to install cclive. if you are using Fedora, you can install it by this simple command on the terminal.
Then, you open your conkeror file init.js, and append it with the following lines
You can active these functions by M-x download-video-2-download, M-x download-video-2-music or assign these function to hot keys, for example:
By default, conkeror users may not use backspace to delete previous characters when they do simple task in google document, perharp also for other google product. The solution is that you have to enable quote mode in conkeror
In the daily work, I may have to type sudo your_command and your password many times, it costs your time, in my case, it makes me feel crazy. The solution is that, you will add command which you mostly type into a list, then, when you want to type it with prefix sudo it wont ask you for password.
You have to modify file sudoers in /etc/sudoers. For example, you want to
run command such as “yum”, “apachectl” without passwor
#1. Find the path of those commands by using command which
in this case, those commands locates in /usr/sbin/apachectl and /usr/bin/yum.
#2. Modify file sudoers
Now, you can run those command without password, REMEMBER, You still need prefix sudo
Command Alias, this feature will help you save your time if you want to assign group of command, for example, you have 2,3 user or group, it should be not convenient to type similar commands many times. Now, what you have to do is group them all, then use the command alias instead!
Description: After writing javascript code, There is an error, when users click
on the hyperlink, javascript does not run. However, if users refresh the
web page, javascript run automatically.My project using Jquery.
I write this program to transfer files between Window and Linux computer.I knew that there are a software which already solved this issue. However,I believe that It could be an extra solution for you guy.
By using this software (required available LAN network), you can save time when transfer file to another computer.
1: Window vs Window, Microsoft support file sharing, It is absolutely good. However, setting FileTransfer as a plan B is a good practice
2: Window vs Linux, Linux vs Linux. Firstly, I write this software because I am a full-time Linux user. During using time you could face a case that you want to share file, it should be wasteful if you choose to upload your file to google drive, attached in gmail or any remote repository. Using this software saves your time and increases your performance.
Currently, this software allows users to sends file by once, if you want to send again, press send again after sending completely, or open two program. Anyway, I will enhance this feature soon, and it depend on the demand of users or only me. If you are interest in my FileTransfer, You can clone it with the branch “master” I also attach a jar file. FileTransfer.jar. It is an executable jar file.
Known issue: The speed of FileTransfer is low, approximately 0.5MB/s. The reason is that I did not cut file into multiple parts and transfer it concurently, this software send file in only one connection.