有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java解析。com查询太慢,需要更快

我的语法分析。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) {

                }
            });
    }

非常感谢您的帮助


共 (1) 个答案

  1. # 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;
      }
    }