我是Android上的新手,正在使用一个大型应用程序,该应用程序已将数据发送到API并将其保存在SQlite上。所有这些过程都在一个类文件中。但这让我犯了一个错误。有时设备挂起。其他情况是数据不完整。我已经读过final abstract class Unit private extends AnyVal {
// Provide a more specific return type for Scaladoc
override def getClass(): Class[Unit] = ???
}
和Intent Service
的内容,并且想了解两者,但是我想知道如何从UI中获取所有数据并将其放在服务上。我可以知道吗?
答案 0 :(得分:2)
这取决于应用程序的性质。如果应用户输入而发生这种情况...您可以使用AsyncTask
。否则,后台服务也可以完成这项工作。
您永远不应该在主UI线程上运行网络操作和/或数据库访问。
服务可以通过意图接收数据。发送这些意图的方式取决于服务的类型(已启动,已绑定或两者)。有很多资源可供您阅读...这是Android文档中的一个...
https://developer.android.com/guide/components/services
下面的示例显示了AsyncTask
的实现,该实现从网络资源中获取用户的详细信息...
public class FetchUserTask extends AsyncTask<String,Void, UserDTO> {
private FetchUserTaskListener listener;
@Override
protected UserDTO doInBackground(String...params){
if(params == null || params.length == 0)
return null;
String userID = params[0];
UserDataProvider provider = new UserDataProvider(userID);
try {
return provider.get(userID);
}
catch(Exception ex){
//log the error
return null;
}
}
@Override
protected void onPostExecute(UserDTO user){
if(listener != null)
listener.onCompleted(user);
}
public void setListener(FetchUserTaskListener listener){
this.listener = listener;
}
public interface FetchUserTaskListener{
void onCompleted(boolean success);
}
}
例如,在Activity
中,您可以按以下方式使用它...
public class UserDetailsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//instantiate activity...
super.onCreate(savedInstanceState);
setContentView(R.layout.whatever_layout);
fetchUser(userId);
}
private void fetchUser(String userID){
FetchUserTask task = new FetchUserTask();
task.setListener(new FetchUserTaskListener<UserDTO>() {
@Override
public void onCompleted(UserDTO user) {
//CAUTION: make sure the activity hasn't been stopped before
//accessing any UI elements and/or context
}
}
task.execute(userID);
}
}
您可以(并且需要)使上面的示例更加复杂。例如,如果发生错误,您可以让FetchUserTaskListener
的{{1}}方法返回一条错误消息。
在访问任何上下文绑定数据之前,您还需要检查活动是否已暂停或停止,否则可能会收到ILlegalStateException。
答案 1 :(得分:0)
使用SQLiteOpenHelper类,通过扩展SQLiteOpenHelper,它具有在您自己的类中重写的方法。根据您在此类中的要求创建Add,Update,Delete,Get方法,并将该类保持为Singleton模式。用户Asynctasks调用这些方法,您就完成了。
希望可以更好地可视化事物。