java - Parse.com 查询太慢,需要更快

标签 java android parse-platform

我的 Parse.com 查询太慢,下面的代码是 1 个网络调用。因此我想并行执行 3 个查询:

  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) {

                }
            });
    }

一些帮助将不胜感激!

最佳答案

将解析查询包装在带有回调的 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;
  }
} 

关于java - Parse.com 查询太慢,需要更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39316927/

相关文章:

java - 如何开始逆向工程 SpaceNavigator 外围数据流?

java - 找不到符号构造函数ArrayAdapter(android.content.Context,int,java.lang.String[])

android - 如何防止 Android 向我的 HTTP 请求返回缓存响应?

android - 从 Parse.com 获取更新

ios - EXC_BAD_INSTRUCTION(代码=EXC_1386,INVOP,子代码=0x0)错误

javascript - 无法在 Parse.com 中获取属性

java - 在 Android Studio 中禁用后如何启用检查?

java - 如何将 java String 转换为邮寄地址对象?

android - RecyclerView 水平滚动对齐在中心

android - 为android项目创建Jar文件