2016-09-04 5 views
1

My Parse.comのクエリが遅すぎます。コードの下に1つのネットワークコールがあります。したがって、私は、並列に3つのクエリを実行したい:Parse.comのクエリが遅すぎるため、高速にする必要があります

  1. クエリ行0から200
  2. クエリ行201から400
  3. クエリ行401から500

これは現在のコードである。

public static void readBusShelters() { 

      ParseQuery<ParseObject> query = ParseQuery.getQuery(BusShelter.TABLE_NAME); 
      query.setLimit(500); 
      query.findInBackground(new FindCallback<ParseObject>() { 
       @Override 
       public void done(List<ParseObject> list, ParseException e) { 

       } 
      }); 
    } 

いくつかのヘルプをいただければ幸いです。

答えて

1

コールバックを使用してAsyncTaskに解析クエリをラップし、スレッドプール上で実行して、タスクを並行して実行できるようにします。

例:

public class MainActivity extends AppCompatActivity implements OnTaskCompleted { 

    @Override 
    public void onTaskCompleted(List<ParseObject> response) { 

    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 


    new FetchParseQueryTask(MainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new PagingOptions(0, 200)); 
    new FetchParseQueryTask(MainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new PagingOptions(1, 200)); 
    new FetchParseQueryTask(MainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new PagingOptions(2, 200)); 
    } 
} 

コールバック:

public interface OnTaskCompleted { 
    void onTaskCompleted(List<ParseObject> response); 
} 

サンプル実装のFetchParseQueryTaskクラス:

public class FetchParseQueryTask extends AsyncTask<PagingOptions, Void, List<ParseObject>> { 

    private OnTaskCompleted mTaskCompleted; 

    public FetchParseQueryTask(OnTaskCompleted activityContext){ 
    mTaskCompleted = activityContext; 
    } 

    @Override 
    protected List<ParseObject> doInBackground(PagingOptions... params) { 
    PagingOptions pagingOptions = params[0]; 
    ParseQuery<ParseObject> query = ParseQuery.getQuery("TABLE_NAME"); 

    query.setLimit(pagingOptions.getLimit()); 
    query.setSkip(pagingOptions.getPage() * pagingOptions.getLimit()); 

    try { 
     return query.find(); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    return null; 
    } 

    protected void onPostExecute(List<ParseObject> result) { 
    super.onPostExecute(result); 

    if (mTaskCompleted != null) { 
     mTaskCompleted.onTaskCompleted(result); 
    } 
    } 
} 

PagingOptionsクラス:

public class PagingOptions { 

    private int mPage; 

    private int mLimit; 

    public PagingOptions(int page, int limit) 
    { 
    mPage = page; 
    mLimit = limit; 
    } 

    public int getPage() { 
    return mPage; 
    } 

    public void setPage(int mPage) { 
    this.mPage = mPage; 
    } 

    public int getLimit() { 
    return mLimit; 
    } 

    public void setLimit(int mLimit) { 
    this.mLimit = mLimit; 
    } 
} 
+0

親愛なるクライブ、ありがとう。私は結果を得るためにFetchParseQueryTaskにコールバックを持つコンストラクタを追加します。それは正しい、そうですか? –

+0

ええ、私はコールバックの例で答えを更新しました –

関連する問題