как использовать строковую переменную в HTML .to HTML ()? - PullRequest
0 голосов
/ 13 января 2020

У меня есть один EditText в моем приложении, который используется для хранения его содержимого как HTML в БД SQLite.

Когда я помещаю апостроф в текст (например, приложение Ajinkya), данные EditText не вставляется в базу данных, потому что он рассматривает первый апостроф как разрыв запроса.

Я пробовал много разных предлагаемых решений, но безуспешно. Например, я заменил «» на «\», но все же код (см. Следующий блок кода) не заменяет этот символ после преобразования в html.

String NotesContent = Html.toHtml(notes_content.getText());
String Notestitle = Html.toHtml(notes_title.getText());

if (Notestitle.contains("'")) {
    Notestitle = Notestitle.replace("'", "\'");
}

if (NotesContent.contains("'")) {
    NotesContent = NotesContent.replace("'", "\'");
}

Поэтому я попытался заменить «» сначала "\" ", когда я сохраняю данные EditText в строковую переменную, чтобы затем преобразовать их в HTML (см. следующий блок кода). Но функция HTML .to HTML () не принимает строковые переменные.

String NotesContent = notes_content.getText().toString();
String Notestitle = notes_title.getText().toString();

if (Notestitle.contains("'")) {
    Notestitle = Notestitle.replace("'", "\'");
}

if (NotesContent.contains("'")) {
    NotesContent = NotesContent.replace("'", "\'");
}

Notestitle = Html.toHtml(Notestitle); // does not accept Strings!

Пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 13 января 2020

Если вы используете insert метод конвекции, это будет исключать строку.

В качестве примера (используя Когда я помещаю апостроф в текст (например, приложение Аджинкьи), данные EditText не вставляются в базу данных, поскольку они обрабатывают первую апострофу как разрыв запроса. (примечание с добавлением некоторого HTML) как данные для хранения и извлечения): -

Database Helper DatabaseHelper. java

public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DBNAME = "mydb";
    public static final int DBVERSION = 1;

    public static final String TABLE = "htmlstore";
    public static final String IDCOLUMN = BaseColumns._ID;
    public static final String HTMLCOLUMN = "html";

    SQLiteDatabase db;

    public DatabaseHelper(Context context) {
        super(context, DBNAME, null, DBVERSION);
        db = this.getWritableDatabase();

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String crt_htmlstore_table = "CREATE TABLE IF NOT EXISTS " + TABLE + "(" +
                IDCOLUMN + " INTEGER PRIMARY KEY," +
                HTMLCOLUMN + " TEXT" +
                ")";
        db.execSQL(crt_htmlstore_table);
    }


    public long insert(String html) {
        ContentValues cv = new ContentValues();
        cv.put(HTMLCOLUMN,html);
        return db.insert(TABLE,null,cv); //<<<< does the escaping for you
    }

    public String getHTML(long id) {
        String rv = "";
        Cursor csr = db.query(TABLE,new String[]{HTMLCOLUMN},IDCOLUMN+"=?",new String[]{String.valueOf(id)},null,null,null);
        if (csr.moveToFirst()) {
            rv = csr.getString(csr.getColumnIndex(HTMLCOLUMN));
        }
        csr.close();
        return rv;
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

Актив, вызывающий MainActivity. java: -

public class MainActivity extends AppCompatActivity {

    TextView NotesTitle;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        NotesTitle = this.findViewById(R.id.notesview);

        DatabaseHelper databaseHelper = new DatabaseHelper(this);
        // Inserts into the database
        databaseHelper.insert(
                "When I put an apostrophe in the text <b>(e.g. Ajinkya's application)</b>, " + //<<<< BOLD ADDED
                        "the EditText data is not getting inserted into the database " +
                        "<i><strong>because it treats the first apostrophe as a query break</strong></>." //<<<< Italic String ADDED
        ); 
        // Extracts from the database and sets the notesview TextView with the extracted text from the HTML (if any)
        NotesTitle.setText(Html.fromHtml(databaseHelper.getHTML(1L)));
    }
}

Результат: -

enter image description here

...