com.norman0406.slimgress.API.Interface.RequestResult.java Source code

Java tutorial

Introduction

Here is the source code for com.norman0406.slimgress.API.Interface.RequestResult.java

Source

/***********************************************************************
*
* Slimgress: Ingress API for Android
* Copyright (C) 2013 Norman Link <norman.link@gmx.net>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
***********************************************************************/

package com.norman0406.slimgress.API.Interface;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;

public class RequestResult {
    private Handler mResultHandler;
    private Bundle mBundle;
    private Message mMessage;

    public RequestResult(Handler handler) {
        mResultHandler = handler;
        mMessage = new Message();
    }

    private void handleException(String exception) {
        Log.e("RequestResult.Callback", exception);
        mBundle.putString("Exception", exception);
    };

    public void handleError(String error) {
        Log.e("RequestResult.Callback", error);
        mBundle.putString("Error", error);
    };

    public void handleGameBasket(GameBasket gameBasket) {
        // not implemented
    };

    public void handleResult(JSONObject result) {
        // not implemented
    };

    public void handleResult(JSONArray result) {
        // not implemented
    }

    public void handleResult(String result) {
        // not implemented
    }

    public Bundle getData() {
        return mBundle;
    }

    private void finished() {
        mMessage.setData(mBundle);
        mResultHandler.sendMessage(mMessage);
    }

    public static void handleRequest(JSONObject json, RequestResult result) {
        if (result == null)
            throw new RuntimeException("invalid result object");

        try {
            // handle exception string if available
            String excString = json.optString("exception");
            if (excString.length() > 0)
                result.handleException(excString);

            // handle error code if available
            String error = json.optString("error");
            if (error.length() > 0)
                result.handleError(error);
            else if (json.has("error"))
                Log.w("RequestResult", "request contains an unknown error type");

            // handle game basket if available
            JSONObject gameBasket = json.optJSONObject("gameBasket");
            if (gameBasket != null)
                result.handleGameBasket(new GameBasket(gameBasket));

            // handle result if available
            JSONObject resultObj = json.optJSONObject("result");
            JSONArray resultArr = json.optJSONArray("result");
            String resultStr = json.optString("result");
            if (resultObj != null)
                result.handleResult(resultObj);
            else if (resultArr != null)
                result.handleResult(resultArr);
            else if (resultStr != null)
                result.handleResult(resultStr);
            else if (json.has("result"))
                Log.w("RequestResult", "request contains an unknown result type");

            result.finished();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}