2016-09-04 51 views
1

我的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

是的,我已经用示例回调更新了答案 –

相关问题