2016-11-11 5 views
1

こんにちは、私はAndroid開発の新機能です。私はログインのようないくつかのWebサービスを使用しています。しかし、私はどのようにWebサービスを最初に呼び出し、その後何度も何度もデータを取得する方法を得ていません。最初のプロファイルの画像のような負荷は、Webサービスからロードする必要はありません。どのように私はより柔軟で少ないコールwebserviceのためにこれを行うことができます。私を助けてください。アンドロイドどのように複数の同じ情報ユーティリティのために何度も何度もウェブサービスを呼び出すことを解決するには?

答えて

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; 
    } 
} 
+0

ためにこのキャッシュを保持したい場合我々はまた、PARAMを生きるために時間を追加することができますか? –

0

の下にデータの1.Generate MD5を要求確認コードを終了し、sharedpreferencesでそれを保存することができます実行しているかどうかをチェックすることができます(あまりにもサーバーに。) 2.saveローカルデータベースのデータまたはsharedpreferencesのデータを最初に使用します。画像使用キャッシュテクニック 3.次回にget data call webserviceを呼び出してmd5 iサーバーの変更を確認します。変更された場合は、サーバーからアプリケーションにデータを更新しますそれ以外の場合は、手順2で保存したデータを使用してください。

0

オブジェクトをローカルデータに書き込みますベース:

ステップ1:あなたはJSONまたはXML形式で取得したデータを解析し、それをシリアル化:

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; 
} 

ステップ2:クラスを作成し、SQLiteOpenHelperを拡張します。 テーブルを作成し、URLとタイプの直列化されたデータを追加します。

Class LocalDB extends SQLiteOpenHelper{ 

@Override ます。public voidのonCreate(SQLiteDatabaseデシベル){

db.execSQL(DICTIONARY_TABLE_CREATE); 
} 

公共ボイドaddQuery(文字列型、文字列のURL、バイト[]オブジェクト){

this.getReadableDatabase(); 
    SQLiteDatabase db = null; 

    try { 
     db = ctx.openOrCreateDatabase(
       DB, 
       SQLiteDatabase.OPEN_READWRITE, null); 

     ContentValues values = new ContentValues(); 
     values.put(URL, url); 
     values.put(OBJECT, object); 
     values.put(TYPE, type); 


     // Inserting Row 
     db.insert(CACHE_TABLE_NAME, null, values); 
     db.close(); // Closing database connection 
     this.close(); 

    } catch (Exception e) { 
     e.printstacktrace(); 
     try { 
      db.close(); 
      this.close(); 
     } catch (Exception e) { 
      e.printstacktrace(); 
      this.close(); 
     } 
    } 
} 

}

ステップ3:URLを叩きながら再度データを

パブリック静的オブジェクトデシリアライズ(バイト[]入力、文字列型)をデシリアライズは、IOExceptionが{ をスロー(タイプ== ABC)であれば{ におけるこのmyobj OBJ =(MYOB)。 readObject(); return obj; }}

我々は特定の期間前のデータですBT

関連する問題