Java 将49.000字符插入TextView和低速应用程序

Java 将49.000字符插入TextView和低速应用程序,java,android,mysql,sqlite,Java,Android,Mysql,Sqlite,我收集了大约500封信和演讲稿,其中一些非常大(约49000个字符)。我从MySQL中导出了这些信件和演讲,并将它们导入sqlite,以便在Android应用程序中使用它们 应用程序工作正常,对于小写字母来说速度很快。然而,当用户选择其中一个大号字母(大约有49000个字符)时,打开该字母将需要很长时间。我所说的“打开”信件是指使用setText函数将信件内容插入到文本视图中,如下所示: myDbHelper2 = new DataBaseHelpername(this.getApplicati

我收集了大约500封信和演讲稿,其中一些非常大(约49000个字符)。我从MySQL中导出了这些信件和演讲,并将它们导入sqlite,以便在Android应用程序中使用它们

应用程序工作正常,对于小写字母来说速度很快。然而,当用户选择其中一个大号字母(大约有49000个字符)时,打开该字母将需要很长时间。我所说的“打开”信件是指使用
setText
函数将信件内容插入到文本视图中,如下所示:

myDbHelper2 = new DataBaseHelpername(this.getApplicationContext());
    myDbHelper2= new DataBaseHelpername(this);
try {

    myDbHelper2.createDataBase();

}                   

catch (IOException ioe) {
    throw new Error("Unable to create database");
        }
    try {

                myDbHelper2.openDataBase();}        

catch (SQLException sqle) {

    sqle.printStackTrace();

}
    db = myDbHelper2.getReadableDatabase();
    mCursor= db.rawQuery("SELECT field_translation_fa_value,my_id  FROM name WHERE my_id ="+id+" ;",null);
    mCursor.moveToFirst();
    String ff=mCursor.getString(0);
    txtmatnfa.setText(ff);
我可以做些什么来优化这一点


问题出在哪里?从插入(setText)或选择(sqlite)?

尝试从另一个线程读取数据库,可能使用AsyncTask,例如:

 new AsyncTask<Void,Void,String>(){

            @Override
            protected String doInBackground(Void... params) {

                myDbHelper2 = new DataBaseHelpername(YourActivity.this.getApplicationContext());
                myDbHelper2= new DataBaseHelpername(YourActivity.this);
                try {

                    myDbHelper2.createDataBase();

                }

                catch (IOException ioe) {
                    throw new Error("Unable to create database");
                }
                try {

                    myDbHelper2.openDataBase();}

                catch (SQLException sqle) {

                    sqle.printStackTrace();

                }
                db = myDbHelper2.getReadableDatabase();
                mCursor= db.rawQuery("SELECT field_translation_fa_value,my_id  FROM name WHERE my_id ="+id+" ;",null);
                mCursor.moveToFirst();
                String ff=mCursor.getString(0);
                return ff;
            }


            @Override
            protected void onPostExecute(String ff) {
                super.onPostExecute(s);
                txtmatnfa.setText(ff);
            }
        }.execute();
newasynctask(){
@凌驾
受保护字符串doInBackground(无效…参数){
myDbHelper2=新数据库HelperName(YourActivity.this.getApplicationContext());
myDbHelper2=新数据库HelperName(YourActivity.this);
试一试{
myDbHelper2.createDataBase();
}
捕获(ioe异常ioe){
抛出新错误(“无法创建数据库”);
}
试一试{
myDbHelper2.openDataBase();}
捕获(SQLException sqle){
printStackTrace();
}
db=myDbHelper2.getReadableDatabase();
mCursor=db.rawQuery(“从名称中选择字段_translation_fa_value,my_id=“+id+”;”,null);
mCursor.moveToFirst();
字符串ff=mCursor.getString(0);
返回ff;
}
@凌驾
受保护的void onPostExecute(字符串ff){
super.onPostExecute(s);
txtmatnfa.setText(ff);
}
}.execute();

你为什么不把长文本剪成一段一段的呢?创建一个只包含文本视图的简单listview,并在listrow中放置段落。删除分隔符(这样用户就不会注意到它们位于带有分隔段落的列表视图中)。listview将处理可见段落是否具有所需的文本,以及您的操作是否完成


正如他在回答中所建议的,在异步任务中执行(因此不是在主线程中,而是在后台执行)。

49000个字符????ooooooohhhhh mmmmggggg
。你写这个我想…这里没有人能帮你把这么大的数据放到文本视图中…太多了…我想你最好用
Notepad app
。@MD你在开玩笑吗?(无论如何谢谢):)你为什么不引进一种寻呼系统呢?将大的tekst分成小块,让用户像阅读一本书一样阅读(49000个字符甚至是一本小书)