Created APIRequest class (divided APIRequestTask in two separate files)

This commit is contained in:
Pierre 2017-11-12 17:25:07 +01:00
parent f1a6ff8502
commit 6be4603435
4 changed files with 166 additions and 120 deletions

View File

@ -50,7 +50,7 @@ public class LoginActivity extends AppCompatActivity {
aUtils = new AccountUtils(this); aUtils = new AccountUtils(this);
//Check for connectivity //Check for connectivity
if(!APIRequestTask.isAPIavailable(this)){ if(!APIRequest.isAPIavailable(this)){
Toast.makeText(this, R.string.err_no_internet_connection, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.err_no_internet_connection, Toast.LENGTH_SHORT).show();
} }
@ -93,7 +93,7 @@ public class LoginActivity extends AppCompatActivity {
} }
//Check internet connection //Check internet connection
if(!APIRequestTask.isAPIavailable(this)){ if(!APIRequest.isAPIavailable(this)){
show_form_error(getString(R.string.err_no_internet_connection)); show_form_error(getString(R.string.err_no_internet_connection));
stop = 1; stop = 1;
} }

View File

@ -13,6 +13,7 @@ import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.widget.Toast; import android.widget.Toast;
import org.communiquons.android.comunic.client.api.APIRequest;
import org.communiquons.android.comunic.client.api.APIRequestTask; import org.communiquons.android.comunic.client.api.APIRequestTask;
import org.communiquons.android.comunic.client.data.Account.Account; import org.communiquons.android.comunic.client.data.Account.Account;
import org.communiquons.android.comunic.client.data.Account.AccountUtils; import org.communiquons.android.comunic.client.data.Account.AccountUtils;
@ -40,15 +41,6 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Enable bottom navigation menu
init_bottom_menu();
//Check for connectivity
if(!APIRequestTask.isAPIavailable(this)){
Toast.makeText(this, R.string.err_no_internet_connection, Toast.LENGTH_SHORT).show();
}
//Initialize account objects //Initialize account objects
account = new Account(this); account = new Account(this);
@ -57,6 +49,18 @@ public class MainActivity extends AppCompatActivity {
if(!account.signed_in()){ if(!account.signed_in()){
//Open the login activity //Open the login activity
startActivity(new Intent(this, LoginActivity.class)); startActivity(new Intent(this, LoginActivity.class));
return;
}
//Set the content of the activity
setContentView(R.layout.activity_main);
//Enable bottom navigation menu
init_bottom_menu();
//Check for connectivity
if(!APIRequest.isAPIavailable(this)){
Toast.makeText(this, R.string.err_no_internet_connection, Toast.LENGTH_SHORT).show();
} }
//If it is the first time the application is launched, started the user friends tab //If it is the first time the application is launched, started the user friends tab

View File

@ -0,0 +1,149 @@
package org.communiquons.android.comunic.client.api;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import org.communiquons.android.comunic.client.BuildConfig;
import org.communiquons.android.comunic.client.data.Account.Account;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
/**
* API request file
*
* Perform an API request
*
* @author Pierre HUBERT
* Created by pierre on 11/12/17.
*/
public class APIRequest {
/**
* Public constructor
*/
public APIRequest(){
}
/**
* Perform an API request on the server and return the result as a JSON code
*
* @param parameters The parameters to pass to the server
* @return The result of the request
*/
public APIResponse exec(APIRequestParameters parameters) throws Exception{
//Add login tokens
addLoginTokens(parameters);
APIResponse result = new APIResponse();
InputStream is = null;
try {
//Determine the URL of the request
URL url = new URL(BuildConfig.api_url + parameters.getRequest_uri());
//The request is being performed on an http server
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//Configure the connection
conn.setReadTimeout(3000);
conn.setConnectTimeout(3000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
//Send request parameters
OutputStream out = new BufferedOutputStream(conn.getOutputStream());
BufferedWriter writer = new BufferedWriter (new OutputStreamWriter(out, "UTF-8"));
writer.write(parameters.get_parameters_encoded());
writer.flush();
writer.close();
out.close();
//Connect to the server
conn.connect();
//Get response code
result.setResponse_code(conn.getResponseCode());
is = conn.getInputStream();
String response = readIt(is, 5000);
result.setResponse(response);
conn.disconnect();
} finally {
//Close streams
if(is != null)
is.close();
}
//Return result
return result;
}
// Reads an InputStream and converts it to a String.
private String readIt(InputStream stream, int len) throws IOException {
Reader reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
reader.read(buffer);
return new String(buffer);
}
/**
* Add the login tokens to an API request object
*
* @param params The parameters of the request to update
*/
private void addLoginTokens(APIRequestParameters params){
//Create account object
Account account = new Account(params.getContext());
//Check if user is signed in or not
if(!account.signed_in())
return; //Do nothing
//Get login tokens
ArrayList<String> tokens = account.getLoginTokens();
if(tokens.size() < 2)
return; //Not enough tokens
//Add them to the request
params.addParameter("userToken1", tokens.get(0));
params.addParameter("userToken2", tokens.get(1));
}
/**
* Determine it is possible or not to connect to the API now
*
* @param context The context used to perform the test
* @return True if a network connection is available
*/
public static boolean isAPIavailable(Context context){
ConnectivityManager connMgr = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnected();
}
}

View File

@ -46,8 +46,8 @@ public abstract class APIRequestTask extends AsyncTask<APIRequestParameters, Voi
try { try {
//Perform the API request //Perform the API request
addLoginTokens(params[0]); APIRequest req = new APIRequest();
return downloadUrl(params[0]); return req.exec(params[0]);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return null; return null;
@ -63,111 +63,4 @@ public abstract class APIRequestTask extends AsyncTask<APIRequestParameters, Voi
* @param result The result of the request * @param result The result of the request
*/ */
abstract protected void onPostExecute(APIResponse result); abstract protected void onPostExecute(APIResponse result);
/**
* Peform an API request on the server and return the result as a JSON code
*
* @param parameters The parameters to pass to the server
* @return The result of the request
*/
private APIResponse downloadUrl(APIRequestParameters parameters) throws Exception{
APIResponse result = new APIResponse();
InputStream is = null;
try {
//Determine the URL of the request
URL url = new URL(BuildConfig.api_url + parameters.getRequest_uri());
//The request is being performed on an http server
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//Configure the connection
conn.setReadTimeout(3000);
conn.setConnectTimeout(3000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
//Send request parameters
OutputStream out = new BufferedOutputStream(conn.getOutputStream());
BufferedWriter writer = new BufferedWriter (new OutputStreamWriter(out, "UTF-8"));
writer.write(parameters.get_parameters_encoded());
writer.flush();
writer.close();
out.close();
//Connect to the server
conn.connect();
//Get response code
result.setResponse_code(conn.getResponseCode());
is = conn.getInputStream();
String response = readIt(is, 5000);
result.setResponse(response);
conn.disconnect();
} finally {
//Close streams
if(is != null)
is.close();
}
//Return result
return result;
}
// Reads an InputStream and converts it to a String.
private String readIt(InputStream stream, int len) throws IOException {
Reader reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
reader.read(buffer);
return new String(buffer);
}
/**
* Determine it is possible or not to connect to the API now
*
* @param context The context used to perform the test
* @return True if a network connection is available
*/
public static boolean isAPIavailable(Context context){
ConnectivityManager connMgr = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnected();
}
/**
* Add the login tokens to an API request object
*
* @param params The parameters of the request to update
*/
private void addLoginTokens(APIRequestParameters params){
//Create account object
Account account = new Account(params.getContext());
//Check if user is signed in or not
if(!account.signed_in())
return; //Do nothing
//Get login tokens
ArrayList<String> tokens = account.getLoginTokens();
if(tokens.size() < 2)
return; //Not enough tokens
//Add them to the request
params.addParameter("userToken1", tokens.get(0));
params.addParameter("userToken2", tokens.get(1));
}
} }