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