1

I am trying to develop a crossword puzzle with parse.com backend to sqlite backed. I have difficulty in converting the code. Following code is the database table i had created.

public class puzzle extends SQLiteOpenHelper {

public static final String db_name = "crossword.db";
public static final String Table1_name = "puz";
public static final String Table2_name = "item";
public static final String Table3_name = "clue";

public puzzle(final Context context){
    super(context, db_name, null, 1);

}



@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE IF NOT EXISTS" + Table1_name + "hash INTEGER, title TEXT,  author TEXT,copyright TEXT,height INTEGER ,width INTEGER");
    db.execSQL("CREATE TABLE IF NOT EXISTS"+ Table2_name + "hash INTEGER, x INTEGER ,y INTEGER, cell position INTEGER , black BOOLEAN , letter TEXT");
    db.execSQL("CREATE TABLE IF NOT EXISTS" + Table3_name + "hash INTEGER,  x INTEGER ,y INTEGER, cellposition INTEGER, cluenumber INTEGER, position INTEGER,clue TEXT");


}

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


}

public boolean insertitem(int hash, int x, int y, int cellposition, boolean black, String letter) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues itemvalues = new ContentValues();
    itemvalues.put("hash", hash);
    itemvalues.put("X", x);
    itemvalues.put("Y", y);
    itemvalues.put("CellPosition", cellposition);
    itemvalues.put("Black", black);
    itemvalues.put("Letter", letter);
    long itemresult = db.insert(Table2_name, null, itemvalues);
    if (itemresult == -1)
        return false;
    else
        return true;

}
public boolean isinsertpuz(int hash,String title,String author,String copyright,int height,int width)
{
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues puzvalues = new ContentValues();
    puzvalues.put("hash",hash);
    puzvalues.put("Title",title);
    puzvalues.put("author",author);
    puzvalues.put("copyright",copyright);
    puzvalues.put("Height",height);
    puzvalues.put("Width",width);
    long puzresult = db.insert(Table1_name, null, puzvalues);
    if (puzresult == -1)
        return false;
    else
        return true;


}
public boolean isinsertclue(int hash,int x,int y,int cellposition,int cluenumber,String clue)
{
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cluevalues = new ContentValues();
    cluevalues.put("hash",hash);
    cluevalues.put("X",x);
    cluevalues.put("Y",y);
    cluevalues.put("Cellposition",cellposition);
    cluevalues.put("Cluenumber",cluenumber);
    cluevalues.put("Clue",clue);
    long clueresult=db.insert(Table3_name,null,cluevalues);
    if(clueresult==-1)
        return false;
    else
        return true;
}
    public Cursor getpuzdata()
    {
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor puzquery=db.rawQuery("select * from" +Table1_name,null);
        return puzquery;
    }}

I want the following code in sqlite: I tried but it's showing some errorr, kindly help me!.

public CustomAdapter(Context context, int screenWidth, final int width,int screenHeight, int height, int hash, TextView clueTextView, TextView titleTextView){
    this.context = context;
    this.width = width;
    this.height = height;
    this.screenHeight = screenHeight;
    this.screenWidth = screenWidth;
    activity = (Activity)context;
    this.hash = hash;
    this.clueTextView = clueTextView;
    this.titleTextView = titleTextView;

    clueNumber = 0;

    //cell count
    count = width*height;

    //to store each cell view
    view = new View[count];

    //contains solution
    letterChar = new char[count];

    clueAcross = new HashMap<>();
    clueDown = new HashMap<>();

    Log.d("parseSize", String.valueOf(letterChar.length));

    //fetch data saved locally
    query = ParseQuery.getQuery("Item").fromLocalDatastore();
    query.whereEqualTo("hash", hash);
    query.orderByAscending("cellPosition");
            query.findInBackground(new FindCallback<ParseObject>() {
                @Override
                public void done(List<ParseObject> objects, ParseException e) {
                    if(e == null)
                        for (ParseObject parseObject : objects) {
                            if(parseObject.getString("letter").equals(""))
                                letterChar[parseObject.getInt("cellPosition")] = ' ';
                            else
                                letterChar[parseObject.getInt("cellPosition")] = parseObject.getString("letter").charAt(0);
                        }
                    ParseQuery.getQuery("Clue").fromLocalDatastore().whereEqualTo("hash", CustomAdapter.this.hash).orderByDescending("clueNumber").getFirstInBackground(new GetCallback<ParseObject>() {
                        @Override
                        public void done(ParseObject object, ParseException e) {
                            if(e == null)
                                clueSize = object.getInt("clueNumber");
                            Log.d("clueNumber", String.valueOf(clueSize));
                        }
                    });
                    ParseQuery.getQuery("Clue").fromLocalDatastore().whereEqualTo("hash", CustomAdapter.this.hash).orderByAscending("cellPosition").findInBackground(new FindCallback<ParseObject>() {
                        @Override
                        public void done(List<ParseObject> objects, ParseException e) {
                            if (e == null)
                                for (ParseObject object : objects) {
                                    //int pos = (object.getInt("y")*width)+object.getInt("x");
                                    if(object.getString("position").equals("Hor"))
                                        clueAcross.put(object.getInt("cellPosition"), object.getString("clue"));
                                    else
                                        clueDown.put(object.getInt("cellPosition"), object.getString("clue"));
                                    Log.d("clue", object.getInt("cellPosition")+" "+object.getString("clue")+" "+object.getString("position"));
                                }

                            //will populate the griview
                            Game.gridView.setAdapter(Game.customAdapter);

                            //to adjust layout on keyboard up
                            activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

                            //dismiss progress dialog on UI thread
                            activity.runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Game.progress.dismiss();
                                }
                            });
                        }
                    });
                }
            });

    //to fix clueNumber change on minimize and restore bug
    if(clueNumber > clueSize)
        clueNumber = 0;
        }

@Override
public int getCount() {
    return count;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    view[position] = convertView;
    if(view[position] == null){
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        view[position] = layoutInflater.inflate(R.layout.grid_cell, null);
        view[position].setLayoutParams(new RelativeLayout.LayoutParams(screenWidth / width, screenHeight / height));
    }

    //to shade black on cells containing no letters
    view[position].setBackgroundResource(R.drawable.shape);

    TextView cellNumberTextView = (TextView)view[position].findViewById(R.id.cellNumber);
    final EditText letter = (EditText)view[position].findViewById(R.id.letter);
    /*letter.setCursorVisible(false);
    letter.setClickable(false);
    letter.setLongClickable(false);
    letter.setFocusable(false);
    letter.setSelected(false);
    letter.setKeyListener(null);
    letter.setBackgroundResource(android.R.color.transparent);*/

    //letter.setText(Character.toString(letterChar[position]));
   // cellNumberTextView.setTextSize(cellNumberTextView.getTextSize() / 1.5f);

    //set clue number on cells
    if(clueAcross.get(position) != null){
        cellNumberTextView.setText(String.valueOf(clueNumber));
        clueNumber++;
        //to fix clueNumber change on minimize and restore bug
        if(clueNumber > clueSize)
            clueNumber = 0;
        Log.d("clueNumber", position+" "+clueNumber+ " "+clueSize);
    }
    else if(clueDown.get(position) != null){
        cellNumberTextView.setText(String.valueOf(clueNumber));
        clueNumber++;

        //to fix clueNumber change on minimize and restore bug
        if(clueNumber > clueSize)
            clueNumber = 0;
        Log.d("clueNumber", position+" "+clueNumber+ " "+clueSize);
    }


    //to disable EditText operations on black cells
    if(letterChar[position] == ' ') {
        view[position].setBackgroundColor(Color.BLACK);
        letter.setClickable(false);
        letter.setLongClickable(false);
        letter.setFocusable(false);
        letter.setSelected(false);
        letter.setKeyListener(null);
    }else
    view[position].setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            //update clues on view click
            clueTextView.setText(getClueDown(position));
            titleTextView.setText(getClueAcross(position));

            //to open keyboard and focus on the letter to edit
            letter.requestFocus();
            letter.setCursorVisible(true);
            ((InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(letter, InputMethodManager.SHOW_IMPLICIT);
        }
    });


    //update clues on letter click
    letter.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus){
                letter.setText("");
                clueTextView.setText(getClueDown(position));
                titleTextView.setText(getClueAcross(position));
            }
        }
    });


    //check value and change color of cell accordingly
    letter.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //letter.setText(s.toString().toUpperCase());
            if(s.toString().isEmpty())
                return;
            Log.d("letter", "input "+s.toString()+"position "+String.valueOf(position)+Character.toString(letterChar[position]));
            if (s.toString().equals(Character.toString(letterChar[position]))) {
                view[position].setBackgroundResource(R.drawable.correct);
                focusNext(position);
            }
            else
                view[position].setBackgroundResource(R.drawable.wrong);
        }

        @Override
        public void afterTextChanged(Editable s) {
               /* if(s.toString().isEmpty())
                    return;*/
            //view[0].setBackgroundResource(R.drawable.correct);
        }
    });

    return view[position];
}

//to focus next cell
public void focusNext(int position) {
    for (int i = position; i < count; i++) {
        if (letterChar[i+1] == ' ')
            continue;
        else {
            EditText editText = (EditText) ((ViewGroup) view[i + 1]).getChildAt(0);
            editText.requestFocus();
            ((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
            return;
        }
    }
}

//get ACROSS clue based on position
public String getClueAcross(int position){
    for(int i=position; i>=0; i--)
        if(clueAcross.get(i) != null)
            return "(across): "+clueAcross.get(i);
    return "";
}

//get DOWN clue based on position
public String getClueDown(int position){
    for(int i=position; i>=0; i-=width)
        if(clueDown.get(i) != null)
            return "(down): "+clueDown.get(i);

    return "";
}

@Override
public Object getItem(int position) {
    return view[position];
}

@Override
public long getItemId(int position) {
    return position;
}

}

The following code is how i tried to change the code from parse.com to sqlite

public class CustomAdapter extends BaseAdapter {


int count, hash;
int width, height, screenWidth, screenHeight;
Activity activity;
Context context;
private static final String SELECTitem_SQL = "SELECT * FROM item";
private static final String SELECTpuz_SQL = "SELECT * FROM puz";
private static final String SELECTclue_SQL = "SELECT * FROM clue";


private SQLiteDatabase db,db1 ;

puzzle ca=new puzzle(context);

char[] letterChar;
HashMap<Integer, String> clueAcross, clueDown;
TextView clueTextView, titleTextView;
int clueNumber, clueSize;
View view[];
public CustomAdapter(Context context, int screenWidth, final int width,int screenHeight, int height, int hash, TextView clueTextView, TextView titleTextView) {
    this.context = context;
    this.width = width;
    this.height = height;
    this.screenHeight = screenHeight;
    this.screenWidth = screenWidth;
    activity = (Activity) context;
    this.hash = hash;
    this.clueTextView = clueTextView;
    this.titleTextView = titleTextView;

    clueNumber = 0;
    letterChar = new char[100];
    //cell count
    count = width * height;

    //to store each cell view
    view = new View[count];

    //contains solution
    letterChar = new char[count];

    clueAcross = new HashMap<>();
    clueDown = new HashMap<>();

    Log.d("parseSize", String.valueOf(letterChar.length));
   Cursor c1=db.rawQuery(SELECTitem_SQL,null);
    Cursor c2=db.rawQuery(SELECTclue_SQL,null);
    c1.moveToFirst();
    c2.moveToFirst();
   db= openOrCreateDatabase("item", null);
    db1=openOrCreateDatabase("clue",null);
    String hashid=c1.getString(0);
    String cluehash=c2.getString(0);
    String cluenum=c2.getString(4);
    String hashpos=c1.getString(3);
    String hashletter=c1.getString(5);
    String hashblack=c1.getString(4);
    int id=hashid.length();
    for(int i=0;i<id;i++)
    {
        if(hashletter== "")
        {
             letterChar[Integer.parseInt(hashpos)]=' ';

        }
        else
        {
            letterChar[Integer.parseInt(hashpos)]=hashletter.charAt(0);
        }
    }
}
@Override
public int getCount() {
    return 0;
}

@Override
public Object getItem(int position) {
    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    return null;
}

} This is my code to convert from parse to sqlite but when i build the project it stays still.

4
  • I think parse.com is going to be shut down. Search that, Commented May 3, 2016 at 4:16
  • yes, and that's why I am changing it to sqlite Commented May 3, 2016 at 4:20
  • what error shown ? Commented May 3, 2016 at 4:30
  • I added the code which I tried for conversion. @USKMobility Commented May 3, 2016 at 4:38

1 Answer 1

1

I'm not sure if this helps you but there is a sql syntax error in your code:

    db.execSQL("CREATE TABLE IF NOT EXISTS " + Table1_name + " (hash INTEGER, title TEXT,  author TEXT,copyright TEXT,height INTEGER ,width INTEGER)");
    db.execSQL("CREATE TABLE IF NOT EXISTS "+ Table2_name + " (hash INTEGER, x INTEGER ,y INTEGER, cell position INTEGER , black BOOLEAN , letter TEXT)");
    db.execSQL("CREATE TABLE IF NOT EXISTS " + Table3_name + " (hash INTEGER,  x INTEGER ,y INTEGER, cellposition INTEGER, cluenumber INTEGER, position INTEGER,clue TEXT)");

you missed "(" before "hash",a space after "EXISTS" and ")" at the end of each statement

Sign up to request clarification or add additional context in comments.

2 Comments

yes, I chanded that still i need sqlite alternate for the parse queries in the custom adapter class
if you want to use adapter with database it is better to use CursorAdapter

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.