嗨,我是Android开发的新手。我正在使用一些像登录这样的网络服务。但我没有得到第一次如何进行webservice调用,然后一次又一次地使用get数据。像第一次配置文件图片加载然后发送时间不需要从Web服务加载。我怎样才能更灵活,更少调用web服务。请帮帮我。
答案 0 :(得分:0)
您可以检查AsyncTask是否已经运行,然后您可以终止下面的请求检查代码
private void doLogin(String id, String pass) {
if (mLoginAsync != null &&
mLoginAsync.getStatus() == AsyncTask.Status.PENDING
|| mLoginAsync.getStatus() == AsyncTask.Status.RUNNING) {
Log.i(getClass().getName(), "Already Running");
return;
}
mLoginAsync = new LoginAsync();
mLoginAsync.execute();
}
public class LoginAsync extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... strings) {
//Write Your api call here
return null;
}
}
答案 1 :(得分:0)
1.为数据生成md5并将其保存在sharedpreferences中(也在服务器中)。 2.首次在本地db或sharedpreferences中保存数据,对于图像使用缓存技术 3.下次调用get data调用webservice以检查md5 i服务器中的更改时,如果已更改,则将数据从服务器更新为app,否则使用您在步骤2中保存的数据。
答案 2 :(得分:0)
将对象写入本地数据库:
步骤1:解析以json或xml形式获得的数据并将其序列化:
formatted_address
第2步:创建一个类并扩展SQLiteOpenHelper。 创建表并使用url添加序列化数据并键入:
public static byte[] serialize(Object O) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(bos);
out.writeObject(O);
out.close();
// Get the bytes of the serialized object
byte[] buf = bos.toByteArray();
return buf;
}
@覆盖 public void onCreate(SQLiteDatabase db){
Class LocalDB extends SQLiteOpenHelper{
public void addQuery(String type,String url,byte [] object){
db.execSQL(DICTIONARY_TABLE_CREATE);
}
}
第3步:再次点击网址反序列化数据
public static Object deserialize(byte [] input,String Type)抛出IOException { if(Type == abc){ MyObj obj =(Myob)in.readObject(); 返回obj; } }
如果我们想在特定时间段内保留此缓存,我们还可以为活动参数添加时间