parse.com 安卓中的服务器响应超时功能



我正在开发 parse.com 安卓应用程序。就像在正常的http请求中一样,如果我们在一定时间内没有从服务器获得响应,那么它将显示超时功能。例如,我的以下代码适用于 http 请求超时:

            HttpsURLConnection connection = null;
            connection = (HttpsURLConnection) serverAddress.openConnection();
            connection.setRequestMethod("GET");
            connection.setDoOutput(true);
            connection.setHostnameVerifier(DO_NOT_VERIFY);         
            connection.setReadTimeout(3*1000);

现在我想要 parse.com 相同的功能,如果我由于互联网连接问题等任何原因无法从解析服务器获得响应,那么它会给我超时。

提前谢谢。

Parse.com SDK

没有您在问题中描述的功能。

但是你可以做一些技巧,例如,在ParseQuery存在的方法cancel((。因此,如果您希望超时小于标准超时,则可以在后台运行查询并等待或查询回调将交付它的结果,或者超时的实现将取消查询运行。

更新:

public class TimeoutQuery<T extends ParseObject> {
    private ParseQuery<T> mQuery;
    private final long mTimeout;
    private FindCallback<T> mCallback;
    private final Object mLock = new Object();
    private final Thread mThread;

    public TimeoutQuery(ParseQuery<T> query, long timeout) {
        mQuery = query;
        mTimeout = timeout;
        mThread = new Thread() {
            @Override
            public void run() {
                if (isInterrupted()) return;
                try {
                    Thread.sleep(mTimeout);
                } catch (InterruptedException e) {
                    return;
                }
                cancelQuery();
            }
        };
    }
    private void cancelQuery() {
        synchronized (mLock) {
            if (null == mQuery) return; // it's already canceled
            mQuery.cancel();
            new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    mCallback.done(Collections.<T>emptyList(), new ParseException(ParseException.TIMEOUT, ""));
                }
            });
        }
    }
    public void findInBackground(final FindCallback<T> callback) {
        synchronized (mLock) {
            mCallback = callback;
            mQuery.findInBackground(new FindCallback<T>() {
                @Override
                public void done(List<T> ts, ParseException e) {
                    synchronized (mLock) {
                        mThread.interrupt();
                        mQuery = null;
                        mCallback.done(ts, e);
                    }
                }
            });
            mThread.start();
        }
    }
}

用法:

 ParseQuery<ParseObject> query = ParseQuery.getQuery("Test");
 new TimeoutQuery<>(query, 1000).findInBackground(new FindCallback<ParseObject>() {
    ...
    });

最新更新