com.mercandalli.android.apps.files.common.net.TaskGet.java Source code

Java tutorial

Introduction

Here is the source code for com.mercandalli.android.apps.files.common.net.TaskGet.java

Source

/**
 * This file is part of FileSpace for Android, an app for managing your server (files, talks...).
 * <p>
 * Copyright (c) 2014-2015 FileSpace for Android contributors (http://mercandalli.com)
 * <p>
 * LICENSE:
 * <p>
 * FileSpace for Android 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 2 of the License, or (at your option) any
 * later version.
 * <p>
 * FileSpace for Android 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.
 *
 * @author Jonathan Mercandalli
 * @license http://www.gnu.org/licenses/gpl.html
 * @copyright 2014-2015 FileSpace for Android contributors (http://mercandalli.com)
 */
package com.mercandalli.android.apps.files.common.net;

import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;

import com.mercandalli.android.apps.files.common.listener.IPostExecuteListener;
import com.mercandalli.android.apps.files.common.util.StringPair;
import com.mercandalli.android.apps.files.main.Config;
import com.mercandalli.android.apps.files.main.network.NetUtils;
import com.mercandalli.android.library.base.java.StringUtils;

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

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;

/**
 * Global behavior : http Get
 *
 * @author Jonathan
 */
public class TaskGet extends AsyncTask<Void, Void, String> {

    String url;
    IPostExecuteListener listener;
    List<StringPair> parameters;
    Context mContext;
    boolean isAuthentication = true;

    public TaskGet(Context context, String url, IPostExecuteListener listener) {
        this(context, url, listener, null, true);
    }

    public TaskGet(Context context, String url, IPostExecuteListener listener, List<StringPair> parameters) {
        this(context, url, listener, parameters, true);
    }

    public TaskGet(Context context, String url, IPostExecuteListener listener, List<StringPair> parameters,
            boolean isAuthentication) {
        mContext = context;
        this.url = url;
        this.listener = listener;
        this.parameters = parameters;
        this.isAuthentication = isAuthentication;
    }

    @Override
    protected String doInBackground(Void... urls) {
        try {
            if (this.parameters != null) {
                if (!StringUtils.isNullOrEmpty(Config.getNotificationId())) {
                    parameters.add(new StringPair("android_id", "" + Config.getNotificationId()));
                }
                url = NetUtils.addUrlParameters(url, parameters);
            }

            Log.d("TaskGet", "url = " + url);

            URL tmp_url = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) tmp_url.openConnection();
            conn.setReadTimeout(10_000);
            conn.setConnectTimeout(15_000);
            conn.setRequestMethod("GET");
            if (isAuthentication) {
                conn.setRequestProperty("Authorization", "Basic " + Config.getUserToken());
            }
            conn.setUseCaches(false);
            conn.setDoInput(true);

            conn.connect(); // Starts the query
            int responseCode = conn.getResponseCode();
            InputStream inputStream = new BufferedInputStream(conn.getInputStream());

            // convert inputstream to string
            String resultString = convertInputStreamToString(inputStream);

            //int responseCode = response.getStatusLine().getStatusCode();
            if (responseCode >= 300) {
                resultString = "Status Code " + responseCode + ". " + resultString;
            }

            conn.disconnect();

            return resultString;
        } catch (IOException e) {
            Log.e(getClass().getName(), "IOException", e);
        }
        return null;
    }

    /**
     * Get http response to String
     *
     * @param inputStream
     * @return
     * @throws IOException
     */
    private String convertInputStreamToString(final InputStream inputStream) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String line;
        final StringBuilder result = new StringBuilder();
        while ((line = bufferedReader.readLine()) != null) {
            result.append(line);
        }

        inputStream.close();
        return result.toString();
    }

    @Override
    protected void onPostExecute(String response) {
        Log.d("onPostExecute", "" + response);
        if (response == null && this.listener != null) {
            this.listener.onPostExecute(null, null);
        } else {
            try {
                JSONObject json = new JSONObject(response);
                if (this.listener != null) {
                    this.listener.onPostExecute(json, response);
                }
                if (json.has("toast") && !json.getString("toast").equals("")) {
                    Toast.makeText(mContext, json.getString("toast"), Toast.LENGTH_SHORT).show();
                }
            } catch (JSONException e) {
                Log.e(getClass().getName(), "Failed to convert Json", e);
                if (this.listener != null) {
                    this.listener.onPostExecute(null, response);
                }
            }
        }
    }
}