Android Open Source - Scanner-For-Zotero A P I Request






From Project

Back to project page Scanner-For-Zotero.

License

The source code is released under:

GNU General Public License

If you think the Android project Scanner-For-Zotero listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/** 
 * Copyright 2011 John M. Schanck//from w ww.  j a  v a2  s.  c  o m
 * 
 * ScannerForZotero 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.
 * 
 * ScannerForZotero 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 ScannerForZotero.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.ale.scanner.zotero.web;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.StringEntity;

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

public class APIRequest implements Runnable {

    private static final String CLASS_TAG = APIRequest.class.getCanonicalName();
    public static final int GET = 0;
    public static final int POST = 1;
    public static final int PUT = 2;
    public static final int DELETE = 3;

    private static final int BUFFER_SIZE = 512;

    private HttpClient mHttpsClient;

    private APIHandler mHandler;

    private HttpRequestBase mRequest;

    private Bundle mExtra = null;

    public APIRequest(APIHandler handler, HttpClient client){
        mHandler = handler;
        mHttpsClient = client;
    }

    // The Bundle extra is used to identify this request and provide 
    // its handler w/ the information needed to process the result.
    public void setExtra(Bundle extra){
        mExtra = extra;
    }

    public Bundle getExtra(){
        return mExtra;
    }

    public void setHttpMethod(int type){
        switch(type){
            case GET:
                mRequest = new HttpGet();
                break;
            case POST:
                mRequest = new HttpPost();
                break;
        }
    }

    public void setURI(URI uri) {
        mRequest.setURI(uri);
    }

    public void addHeader(String name, String value){
        mRequest.addHeader(name, value);
    }

    public void setContent(String content, String contentType) {
        mRequest.setHeader("Content-Type", contentType);
        //mRequest.setHeader("Content-Length", String.valueOf(content.length()));
        try {
            ((HttpPost)mRequest).setEntity(new StringEntity(content, "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            Log.e(CLASS_TAG, "Problem encoding: "+content);
        }
    }

    public void run() {
        mHandler.sendMessage(
                Message.obtain(mHandler, APIHandler.START, new APIResponse(this, null)));
        HttpResponse response = null;
        try {
            response = mHttpsClient.execute(mRequest);

            StatusLine status = response.getStatusLine();
            mHandler.sendMessage(Message.obtain(mHandler, 
                        APIHandler.STATUSLINE, new APIResponse(this, status)));

            // Check the status code if it's 400 or higher then we don't need to
            // finish reading the response, the APIHandler should know what to do.
            if(status.getStatusCode() <= 399){
                HttpEntity entity = response.getEntity();
                InputStream inputStream = entity.getContent();

                ByteArrayOutputStream content = new ByteArrayOutputStream();

                // Read response into a buffered stream
                int readBytes = 0;
                byte[] sBuffer = new byte[BUFFER_SIZE];
                while ((readBytes = inputStream.read(sBuffer)) != -1) {
                   content.write(sBuffer, 0, readBytes);
                }

                // Return result from buffered stream
                String dataAsString = new String(content.toByteArray());
                mHandler.sendMessage(Message.obtain(mHandler, 
                        APIHandler.SUCCESS, new APIResponse(this, dataAsString)));
            }
        } catch (Exception e) {
            // TODO: list of all exceptions that could occur here
            mHandler.sendMessage(Message.obtain(mHandler,
                        APIHandler.EXCEPTION, new APIResponse(this, e)));
        } finally {
            mHandler.sendMessage(Message.obtain(mHandler, 
                        APIHandler.FINISH, new APIResponse(this, null)));
        }
    }

    public class APIResponse {
        private APIRequest mRequest;
        private Object mData;
        public APIResponse(APIRequest req, Object data){
            mRequest = req;
            mData = data;
        }
        public APIRequest getRequest(){ return mRequest; }
        public Object getData(){ return mData; }
    }
}




Java Source Code List

org.ale.scanner.zotero.BibDetailJSONAdapter.java
org.ale.scanner.zotero.BibItemListAdapter.java
org.ale.scanner.zotero.Dialogs.java
org.ale.scanner.zotero.EditItemActivity.java
org.ale.scanner.zotero.LoginActivity.java
org.ale.scanner.zotero.MainActivity.java
org.ale.scanner.zotero.ManageAccountsActivity.java
org.ale.scanner.zotero.PString.java
org.ale.scanner.zotero.PendingListAdapter.java
org.ale.scanner.zotero.SafeViewFlipper.java
org.ale.scanner.zotero.Util.java
org.ale.scanner.zotero.data.Access.java
org.ale.scanner.zotero.data.Account.java
org.ale.scanner.zotero.data.BibItemDBHandler.java
org.ale.scanner.zotero.data.BibItem.java
org.ale.scanner.zotero.data.Collection.java
org.ale.scanner.zotero.data.CreatorType.java
org.ale.scanner.zotero.data.Database.java
org.ale.scanner.zotero.data.Group.java
org.ale.scanner.zotero.data.ItemField.java
org.ale.scanner.zotero.data.ItemType.java
org.ale.scanner.zotero.web.APIHandler.java
org.ale.scanner.zotero.web.APIRequest.java
org.ale.scanner.zotero.web.HttpsClient.java
org.ale.scanner.zotero.web.RequestQueue.java
org.ale.scanner.zotero.web.googlebooks.GoogleBooksAPIClient.java
org.ale.scanner.zotero.web.googlebooks.GoogleBooksHandler.java
org.ale.scanner.zotero.web.worldcat.WorldCatAPIClient.java
org.ale.scanner.zotero.web.worldcat.WorldCatHandler.java
org.ale.scanner.zotero.web.zotero.ZoteroAPIClient.java
org.ale.scanner.zotero.web.zotero.ZoteroHandler.java