Where should I put my AsyncTask class for my app?





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















So I have been trying to make a feature in my app where I can login and then fetch data from my database through the Django REST Framework. My logging in works as it only uses POST, but retrieving items does not work.



For some reason my AsyncTask does not get called for retrieving posts.



I have placed my AsyncTask for both activities, which are login and posts, on a separate java file only for handling Web Server stuff.



I am wondering if this is because I should put AsyncTask on each activities.



login.java



public class Login extends AppCompatActivity {

Button LoginButton;
EditText uUserName, uPassWord;
WSAdapter.SendAPIRequests AuthHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);

//SetupHomeBtn = (ImageButton) findViewById(R.id.SetupHomeBtn);

LoginButton = (Button) findViewById(R.id.LoginButton);

uUserName = (EditText) findViewById(R.id.LoginUserBox);
uPassWord = (EditText) findViewById(R.id.LoginPassBox);

//AuthHelper = new WSAdapter().new SendDeviceDetails();

// Moves user to the main page after validation
LoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// gets the username and password from the EditText
String strUserName = uUserName.getText().toString();
String strPassWord = uPassWord.getText().toString();

// API url duh
String APIUrl = "http://192.168.0.18:8000/token-auth/";

// If the user is authenticated, then transfer to the MainActivity page
if (APIAuthentication(strUserName, strPassWord, APIUrl)){
startActivity(new Intent(Login.this, Posts.class));
}
}
});

}

private boolean APIAuthentication(String un, String pw, String url){
// when it wasn't static -> AuthHelper = new WSAdapter().new SendAPIRequests();
AuthHelper = new WSAdapter.SendAPIRequests();

JSONObject postData = new JSONObject();
try {
// Attempt to input info to the Django API
postData.put("username", un);
postData.put("password", pw);

// Putting the data to be posted in the Django API
AuthHelper.execute(url, postData.toString());

return true;
} catch (JSONException e) {
e.printStackTrace();
}

return false;
}
}


posts.java



public class Posts extends AppCompatActivity {

TextView postsSect;
Button postsDoneBtn;
WSAdapter.SendAPIRequests PostsHelper;
StringBuilder postsBuffer = new StringBuilder();

@Override
protected void onResume(){
super.onResume();
PostsDetails postDetailsHelper = new PostsDetails();
postDetailsHelper.ListPosts();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_posts);

PostsDetails postDetailsHelper = new PostsDetails();

postsDoneBtn = (Button) findViewById(R.id.PostsDoneButton);

postDetailsHelper.callPostDetails("192.168.0.18:8000/api");
postDetailsHelper.ListPosts();
postDetailsHelper.postDetailsCalled('n');

postsDoneBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Posts.this, MainActivity.class));

}
});
}

public class PostsDetails {
//String post_title, post_content;
ArrayList<Integer> post_id = new ArrayList<Integer>();
ArrayList<String> post_title = new ArrayList<String>();
ArrayList<String> post_content = new ArrayList<String>();

boolean isPDCalled;

// sets if Post details are called
boolean postDetailsCalled(char called) {
if (called == 'y'){
return true;
}
return false;
}

// checks if postsDetails functions are called for AsyncTask
boolean getIsPDCalled(){
return isPDCalled;
}

// calls the execute for AsyncTask
private void callPostDetails(String theurl){
PostsHelper = new WSAdapter.SendAPIRequests();
// sets if post details are called
postDetailsCalled('y');
// executes AsyncTask
PostsHelper.execute(theurl);
}

// sets values for the posts arrays
public void setPost(int p_id, String p_title, String p_content) {
post_id.add(p_id);
post_title.add(p_title);
post_content.add(p_content);
}

// Lists the posts from the database
public void ListPosts() {
/////////// add functionality if a post was deleted and was clicked
postsSect = (TextView) findViewById(R.id.PostsSection);
postsSect.setText(post_title.get(post_title.size()) + "n");
for (int i = post_id.size() - 1; i > 0; i--)
{
postsSect.append(post_title.get(i));
}
}
}
}


WSAdapter.java



// I forgot what WS stands for, but this class serves as an adapter for JSON and Online stuff
// I think it stands for With-Server Adapter
public class WSAdapter extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

}

static public class SendAPIRequests extends AsyncTask<String, String, String> {

// Add a pre-execute thing

@Override
protected String doInBackground(String... params) {

Log.e("TAG", params[0]);
Log.e("TAG", params[1]);
String data = "";

HttpURLConnection httpURLConnection = null;
try {

// Sets up connection to the URL (params[0] from .execute in "login")
httpURLConnection = (HttpURLConnection) new URL(params[0]).openConnection();

// Sets the request method for the URL
httpURLConnection.setRequestMethod("POST");

// Tells the URL that I am sending a POST request body
httpURLConnection.setDoOutput(true);

// To write primitive Java data types to an output stream in a portable way
DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream());
// Writes out a byte to the underlying output stream of the data posted from .execute function
wr.writeBytes("postData=" + params[1]);
// Flushes the postData to the output stream
wr.flush();
wr.close();

// Representing the input stream
InputStream in = httpURLConnection.getInputStream();

// Preparing input stream bytes to be decoded to charset
InputStreamReader inputStreamReader = new InputStreamReader(in);
StringBuilder dataBuffer = new StringBuilder();

// Translates input stream bytes to charset
int inputStreamData = inputStreamReader.read();
while (inputStreamData != -1) {
char current = (char) inputStreamData;
inputStreamData = inputStreamReader.read();
// concatenates data characters from input stream
dataBuffer.append(current);
}
data = dataBuffer.toString();
} catch (Exception e) {
e.printStackTrace();
} finally {
// Disconnects socket after using
if (httpURLConnection != null) {
httpURLConnection.disconnect();
}
}

Log.e("TAG", data);
return data;
}

@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// expecting a response code fro my server upon receiving the POST data
Log.e("TAG", result);

Posts.PostsDetails postsHelper = new Posts().new PostsDetails();

// For posts
try {
if (postsHelper.getIsPDCalled()){
JSONObject pJObj = new JSONObject(result);
JSONArray pJObjArray = pJObj.getJSONArray("posts");

for (int i = 0; i < pJObjArray.length(); i++) {
JSONObject pJObj_data = pJObjArray.getJSONObject(i);
postsHelper.setPost(pJObj_data.getInt("id"), "post_title", "post_content");
}
}

} catch (JSONException e) {
//Toast.makeText(JSonActivity.this, e.toString(), Toast.LENGTH_LONG).show();
Log.d("Json","Exception = "+e.toString());
}
}
}
}









share|improve this question





























    0















    So I have been trying to make a feature in my app where I can login and then fetch data from my database through the Django REST Framework. My logging in works as it only uses POST, but retrieving items does not work.



    For some reason my AsyncTask does not get called for retrieving posts.



    I have placed my AsyncTask for both activities, which are login and posts, on a separate java file only for handling Web Server stuff.



    I am wondering if this is because I should put AsyncTask on each activities.



    login.java



    public class Login extends AppCompatActivity {

    Button LoginButton;
    EditText uUserName, uPassWord;
    WSAdapter.SendAPIRequests AuthHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    //SetupHomeBtn = (ImageButton) findViewById(R.id.SetupHomeBtn);

    LoginButton = (Button) findViewById(R.id.LoginButton);

    uUserName = (EditText) findViewById(R.id.LoginUserBox);
    uPassWord = (EditText) findViewById(R.id.LoginPassBox);

    //AuthHelper = new WSAdapter().new SendDeviceDetails();

    // Moves user to the main page after validation
    LoginButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    // gets the username and password from the EditText
    String strUserName = uUserName.getText().toString();
    String strPassWord = uPassWord.getText().toString();

    // API url duh
    String APIUrl = "http://192.168.0.18:8000/token-auth/";

    // If the user is authenticated, then transfer to the MainActivity page
    if (APIAuthentication(strUserName, strPassWord, APIUrl)){
    startActivity(new Intent(Login.this, Posts.class));
    }
    }
    });

    }

    private boolean APIAuthentication(String un, String pw, String url){
    // when it wasn't static -> AuthHelper = new WSAdapter().new SendAPIRequests();
    AuthHelper = new WSAdapter.SendAPIRequests();

    JSONObject postData = new JSONObject();
    try {
    // Attempt to input info to the Django API
    postData.put("username", un);
    postData.put("password", pw);

    // Putting the data to be posted in the Django API
    AuthHelper.execute(url, postData.toString());

    return true;
    } catch (JSONException e) {
    e.printStackTrace();
    }

    return false;
    }
    }


    posts.java



    public class Posts extends AppCompatActivity {

    TextView postsSect;
    Button postsDoneBtn;
    WSAdapter.SendAPIRequests PostsHelper;
    StringBuilder postsBuffer = new StringBuilder();

    @Override
    protected void onResume(){
    super.onResume();
    PostsDetails postDetailsHelper = new PostsDetails();
    postDetailsHelper.ListPosts();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_posts);

    PostsDetails postDetailsHelper = new PostsDetails();

    postsDoneBtn = (Button) findViewById(R.id.PostsDoneButton);

    postDetailsHelper.callPostDetails("192.168.0.18:8000/api");
    postDetailsHelper.ListPosts();
    postDetailsHelper.postDetailsCalled('n');

    postsDoneBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    startActivity(new Intent(Posts.this, MainActivity.class));

    }
    });
    }

    public class PostsDetails {
    //String post_title, post_content;
    ArrayList<Integer> post_id = new ArrayList<Integer>();
    ArrayList<String> post_title = new ArrayList<String>();
    ArrayList<String> post_content = new ArrayList<String>();

    boolean isPDCalled;

    // sets if Post details are called
    boolean postDetailsCalled(char called) {
    if (called == 'y'){
    return true;
    }
    return false;
    }

    // checks if postsDetails functions are called for AsyncTask
    boolean getIsPDCalled(){
    return isPDCalled;
    }

    // calls the execute for AsyncTask
    private void callPostDetails(String theurl){
    PostsHelper = new WSAdapter.SendAPIRequests();
    // sets if post details are called
    postDetailsCalled('y');
    // executes AsyncTask
    PostsHelper.execute(theurl);
    }

    // sets values for the posts arrays
    public void setPost(int p_id, String p_title, String p_content) {
    post_id.add(p_id);
    post_title.add(p_title);
    post_content.add(p_content);
    }

    // Lists the posts from the database
    public void ListPosts() {
    /////////// add functionality if a post was deleted and was clicked
    postsSect = (TextView) findViewById(R.id.PostsSection);
    postsSect.setText(post_title.get(post_title.size()) + "n");
    for (int i = post_id.size() - 1; i > 0; i--)
    {
    postsSect.append(post_title.get(i));
    }
    }
    }
    }


    WSAdapter.java



    // I forgot what WS stands for, but this class serves as an adapter for JSON and Online stuff
    // I think it stands for With-Server Adapter
    public class WSAdapter extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    }

    static public class SendAPIRequests extends AsyncTask<String, String, String> {

    // Add a pre-execute thing

    @Override
    protected String doInBackground(String... params) {

    Log.e("TAG", params[0]);
    Log.e("TAG", params[1]);
    String data = "";

    HttpURLConnection httpURLConnection = null;
    try {

    // Sets up connection to the URL (params[0] from .execute in "login")
    httpURLConnection = (HttpURLConnection) new URL(params[0]).openConnection();

    // Sets the request method for the URL
    httpURLConnection.setRequestMethod("POST");

    // Tells the URL that I am sending a POST request body
    httpURLConnection.setDoOutput(true);

    // To write primitive Java data types to an output stream in a portable way
    DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream());
    // Writes out a byte to the underlying output stream of the data posted from .execute function
    wr.writeBytes("postData=" + params[1]);
    // Flushes the postData to the output stream
    wr.flush();
    wr.close();

    // Representing the input stream
    InputStream in = httpURLConnection.getInputStream();

    // Preparing input stream bytes to be decoded to charset
    InputStreamReader inputStreamReader = new InputStreamReader(in);
    StringBuilder dataBuffer = new StringBuilder();

    // Translates input stream bytes to charset
    int inputStreamData = inputStreamReader.read();
    while (inputStreamData != -1) {
    char current = (char) inputStreamData;
    inputStreamData = inputStreamReader.read();
    // concatenates data characters from input stream
    dataBuffer.append(current);
    }
    data = dataBuffer.toString();
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    // Disconnects socket after using
    if (httpURLConnection != null) {
    httpURLConnection.disconnect();
    }
    }

    Log.e("TAG", data);
    return data;
    }

    @Override
    protected void onPostExecute(String result) {
    super.onPostExecute(result);
    // expecting a response code fro my server upon receiving the POST data
    Log.e("TAG", result);

    Posts.PostsDetails postsHelper = new Posts().new PostsDetails();

    // For posts
    try {
    if (postsHelper.getIsPDCalled()){
    JSONObject pJObj = new JSONObject(result);
    JSONArray pJObjArray = pJObj.getJSONArray("posts");

    for (int i = 0; i < pJObjArray.length(); i++) {
    JSONObject pJObj_data = pJObjArray.getJSONObject(i);
    postsHelper.setPost(pJObj_data.getInt("id"), "post_title", "post_content");
    }
    }

    } catch (JSONException e) {
    //Toast.makeText(JSonActivity.this, e.toString(), Toast.LENGTH_LONG).show();
    Log.d("Json","Exception = "+e.toString());
    }
    }
    }
    }









    share|improve this question

























      0












      0








      0








      So I have been trying to make a feature in my app where I can login and then fetch data from my database through the Django REST Framework. My logging in works as it only uses POST, but retrieving items does not work.



      For some reason my AsyncTask does not get called for retrieving posts.



      I have placed my AsyncTask for both activities, which are login and posts, on a separate java file only for handling Web Server stuff.



      I am wondering if this is because I should put AsyncTask on each activities.



      login.java



      public class Login extends AppCompatActivity {

      Button LoginButton;
      EditText uUserName, uPassWord;
      WSAdapter.SendAPIRequests AuthHelper;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_login);

      //SetupHomeBtn = (ImageButton) findViewById(R.id.SetupHomeBtn);

      LoginButton = (Button) findViewById(R.id.LoginButton);

      uUserName = (EditText) findViewById(R.id.LoginUserBox);
      uPassWord = (EditText) findViewById(R.id.LoginPassBox);

      //AuthHelper = new WSAdapter().new SendDeviceDetails();

      // Moves user to the main page after validation
      LoginButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
      // gets the username and password from the EditText
      String strUserName = uUserName.getText().toString();
      String strPassWord = uPassWord.getText().toString();

      // API url duh
      String APIUrl = "http://192.168.0.18:8000/token-auth/";

      // If the user is authenticated, then transfer to the MainActivity page
      if (APIAuthentication(strUserName, strPassWord, APIUrl)){
      startActivity(new Intent(Login.this, Posts.class));
      }
      }
      });

      }

      private boolean APIAuthentication(String un, String pw, String url){
      // when it wasn't static -> AuthHelper = new WSAdapter().new SendAPIRequests();
      AuthHelper = new WSAdapter.SendAPIRequests();

      JSONObject postData = new JSONObject();
      try {
      // Attempt to input info to the Django API
      postData.put("username", un);
      postData.put("password", pw);

      // Putting the data to be posted in the Django API
      AuthHelper.execute(url, postData.toString());

      return true;
      } catch (JSONException e) {
      e.printStackTrace();
      }

      return false;
      }
      }


      posts.java



      public class Posts extends AppCompatActivity {

      TextView postsSect;
      Button postsDoneBtn;
      WSAdapter.SendAPIRequests PostsHelper;
      StringBuilder postsBuffer = new StringBuilder();

      @Override
      protected void onResume(){
      super.onResume();
      PostsDetails postDetailsHelper = new PostsDetails();
      postDetailsHelper.ListPosts();
      }

      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_posts);

      PostsDetails postDetailsHelper = new PostsDetails();

      postsDoneBtn = (Button) findViewById(R.id.PostsDoneButton);

      postDetailsHelper.callPostDetails("192.168.0.18:8000/api");
      postDetailsHelper.ListPosts();
      postDetailsHelper.postDetailsCalled('n');

      postsDoneBtn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
      startActivity(new Intent(Posts.this, MainActivity.class));

      }
      });
      }

      public class PostsDetails {
      //String post_title, post_content;
      ArrayList<Integer> post_id = new ArrayList<Integer>();
      ArrayList<String> post_title = new ArrayList<String>();
      ArrayList<String> post_content = new ArrayList<String>();

      boolean isPDCalled;

      // sets if Post details are called
      boolean postDetailsCalled(char called) {
      if (called == 'y'){
      return true;
      }
      return false;
      }

      // checks if postsDetails functions are called for AsyncTask
      boolean getIsPDCalled(){
      return isPDCalled;
      }

      // calls the execute for AsyncTask
      private void callPostDetails(String theurl){
      PostsHelper = new WSAdapter.SendAPIRequests();
      // sets if post details are called
      postDetailsCalled('y');
      // executes AsyncTask
      PostsHelper.execute(theurl);
      }

      // sets values for the posts arrays
      public void setPost(int p_id, String p_title, String p_content) {
      post_id.add(p_id);
      post_title.add(p_title);
      post_content.add(p_content);
      }

      // Lists the posts from the database
      public void ListPosts() {
      /////////// add functionality if a post was deleted and was clicked
      postsSect = (TextView) findViewById(R.id.PostsSection);
      postsSect.setText(post_title.get(post_title.size()) + "n");
      for (int i = post_id.size() - 1; i > 0; i--)
      {
      postsSect.append(post_title.get(i));
      }
      }
      }
      }


      WSAdapter.java



      // I forgot what WS stands for, but this class serves as an adapter for JSON and Online stuff
      // I think it stands for With-Server Adapter
      public class WSAdapter extends AppCompatActivity {

      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      }

      static public class SendAPIRequests extends AsyncTask<String, String, String> {

      // Add a pre-execute thing

      @Override
      protected String doInBackground(String... params) {

      Log.e("TAG", params[0]);
      Log.e("TAG", params[1]);
      String data = "";

      HttpURLConnection httpURLConnection = null;
      try {

      // Sets up connection to the URL (params[0] from .execute in "login")
      httpURLConnection = (HttpURLConnection) new URL(params[0]).openConnection();

      // Sets the request method for the URL
      httpURLConnection.setRequestMethod("POST");

      // Tells the URL that I am sending a POST request body
      httpURLConnection.setDoOutput(true);

      // To write primitive Java data types to an output stream in a portable way
      DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream());
      // Writes out a byte to the underlying output stream of the data posted from .execute function
      wr.writeBytes("postData=" + params[1]);
      // Flushes the postData to the output stream
      wr.flush();
      wr.close();

      // Representing the input stream
      InputStream in = httpURLConnection.getInputStream();

      // Preparing input stream bytes to be decoded to charset
      InputStreamReader inputStreamReader = new InputStreamReader(in);
      StringBuilder dataBuffer = new StringBuilder();

      // Translates input stream bytes to charset
      int inputStreamData = inputStreamReader.read();
      while (inputStreamData != -1) {
      char current = (char) inputStreamData;
      inputStreamData = inputStreamReader.read();
      // concatenates data characters from input stream
      dataBuffer.append(current);
      }
      data = dataBuffer.toString();
      } catch (Exception e) {
      e.printStackTrace();
      } finally {
      // Disconnects socket after using
      if (httpURLConnection != null) {
      httpURLConnection.disconnect();
      }
      }

      Log.e("TAG", data);
      return data;
      }

      @Override
      protected void onPostExecute(String result) {
      super.onPostExecute(result);
      // expecting a response code fro my server upon receiving the POST data
      Log.e("TAG", result);

      Posts.PostsDetails postsHelper = new Posts().new PostsDetails();

      // For posts
      try {
      if (postsHelper.getIsPDCalled()){
      JSONObject pJObj = new JSONObject(result);
      JSONArray pJObjArray = pJObj.getJSONArray("posts");

      for (int i = 0; i < pJObjArray.length(); i++) {
      JSONObject pJObj_data = pJObjArray.getJSONObject(i);
      postsHelper.setPost(pJObj_data.getInt("id"), "post_title", "post_content");
      }
      }

      } catch (JSONException e) {
      //Toast.makeText(JSonActivity.this, e.toString(), Toast.LENGTH_LONG).show();
      Log.d("Json","Exception = "+e.toString());
      }
      }
      }
      }









      share|improve this question














      So I have been trying to make a feature in my app where I can login and then fetch data from my database through the Django REST Framework. My logging in works as it only uses POST, but retrieving items does not work.



      For some reason my AsyncTask does not get called for retrieving posts.



      I have placed my AsyncTask for both activities, which are login and posts, on a separate java file only for handling Web Server stuff.



      I am wondering if this is because I should put AsyncTask on each activities.



      login.java



      public class Login extends AppCompatActivity {

      Button LoginButton;
      EditText uUserName, uPassWord;
      WSAdapter.SendAPIRequests AuthHelper;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_login);

      //SetupHomeBtn = (ImageButton) findViewById(R.id.SetupHomeBtn);

      LoginButton = (Button) findViewById(R.id.LoginButton);

      uUserName = (EditText) findViewById(R.id.LoginUserBox);
      uPassWord = (EditText) findViewById(R.id.LoginPassBox);

      //AuthHelper = new WSAdapter().new SendDeviceDetails();

      // Moves user to the main page after validation
      LoginButton.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
      // gets the username and password from the EditText
      String strUserName = uUserName.getText().toString();
      String strPassWord = uPassWord.getText().toString();

      // API url duh
      String APIUrl = "http://192.168.0.18:8000/token-auth/";

      // If the user is authenticated, then transfer to the MainActivity page
      if (APIAuthentication(strUserName, strPassWord, APIUrl)){
      startActivity(new Intent(Login.this, Posts.class));
      }
      }
      });

      }

      private boolean APIAuthentication(String un, String pw, String url){
      // when it wasn't static -> AuthHelper = new WSAdapter().new SendAPIRequests();
      AuthHelper = new WSAdapter.SendAPIRequests();

      JSONObject postData = new JSONObject();
      try {
      // Attempt to input info to the Django API
      postData.put("username", un);
      postData.put("password", pw);

      // Putting the data to be posted in the Django API
      AuthHelper.execute(url, postData.toString());

      return true;
      } catch (JSONException e) {
      e.printStackTrace();
      }

      return false;
      }
      }


      posts.java



      public class Posts extends AppCompatActivity {

      TextView postsSect;
      Button postsDoneBtn;
      WSAdapter.SendAPIRequests PostsHelper;
      StringBuilder postsBuffer = new StringBuilder();

      @Override
      protected void onResume(){
      super.onResume();
      PostsDetails postDetailsHelper = new PostsDetails();
      postDetailsHelper.ListPosts();
      }

      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_posts);

      PostsDetails postDetailsHelper = new PostsDetails();

      postsDoneBtn = (Button) findViewById(R.id.PostsDoneButton);

      postDetailsHelper.callPostDetails("192.168.0.18:8000/api");
      postDetailsHelper.ListPosts();
      postDetailsHelper.postDetailsCalled('n');

      postsDoneBtn.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
      startActivity(new Intent(Posts.this, MainActivity.class));

      }
      });
      }

      public class PostsDetails {
      //String post_title, post_content;
      ArrayList<Integer> post_id = new ArrayList<Integer>();
      ArrayList<String> post_title = new ArrayList<String>();
      ArrayList<String> post_content = new ArrayList<String>();

      boolean isPDCalled;

      // sets if Post details are called
      boolean postDetailsCalled(char called) {
      if (called == 'y'){
      return true;
      }
      return false;
      }

      // checks if postsDetails functions are called for AsyncTask
      boolean getIsPDCalled(){
      return isPDCalled;
      }

      // calls the execute for AsyncTask
      private void callPostDetails(String theurl){
      PostsHelper = new WSAdapter.SendAPIRequests();
      // sets if post details are called
      postDetailsCalled('y');
      // executes AsyncTask
      PostsHelper.execute(theurl);
      }

      // sets values for the posts arrays
      public void setPost(int p_id, String p_title, String p_content) {
      post_id.add(p_id);
      post_title.add(p_title);
      post_content.add(p_content);
      }

      // Lists the posts from the database
      public void ListPosts() {
      /////////// add functionality if a post was deleted and was clicked
      postsSect = (TextView) findViewById(R.id.PostsSection);
      postsSect.setText(post_title.get(post_title.size()) + "n");
      for (int i = post_id.size() - 1; i > 0; i--)
      {
      postsSect.append(post_title.get(i));
      }
      }
      }
      }


      WSAdapter.java



      // I forgot what WS stands for, but this class serves as an adapter for JSON and Online stuff
      // I think it stands for With-Server Adapter
      public class WSAdapter extends AppCompatActivity {

      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      }

      static public class SendAPIRequests extends AsyncTask<String, String, String> {

      // Add a pre-execute thing

      @Override
      protected String doInBackground(String... params) {

      Log.e("TAG", params[0]);
      Log.e("TAG", params[1]);
      String data = "";

      HttpURLConnection httpURLConnection = null;
      try {

      // Sets up connection to the URL (params[0] from .execute in "login")
      httpURLConnection = (HttpURLConnection) new URL(params[0]).openConnection();

      // Sets the request method for the URL
      httpURLConnection.setRequestMethod("POST");

      // Tells the URL that I am sending a POST request body
      httpURLConnection.setDoOutput(true);

      // To write primitive Java data types to an output stream in a portable way
      DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream());
      // Writes out a byte to the underlying output stream of the data posted from .execute function
      wr.writeBytes("postData=" + params[1]);
      // Flushes the postData to the output stream
      wr.flush();
      wr.close();

      // Representing the input stream
      InputStream in = httpURLConnection.getInputStream();

      // Preparing input stream bytes to be decoded to charset
      InputStreamReader inputStreamReader = new InputStreamReader(in);
      StringBuilder dataBuffer = new StringBuilder();

      // Translates input stream bytes to charset
      int inputStreamData = inputStreamReader.read();
      while (inputStreamData != -1) {
      char current = (char) inputStreamData;
      inputStreamData = inputStreamReader.read();
      // concatenates data characters from input stream
      dataBuffer.append(current);
      }
      data = dataBuffer.toString();
      } catch (Exception e) {
      e.printStackTrace();
      } finally {
      // Disconnects socket after using
      if (httpURLConnection != null) {
      httpURLConnection.disconnect();
      }
      }

      Log.e("TAG", data);
      return data;
      }

      @Override
      protected void onPostExecute(String result) {
      super.onPostExecute(result);
      // expecting a response code fro my server upon receiving the POST data
      Log.e("TAG", result);

      Posts.PostsDetails postsHelper = new Posts().new PostsDetails();

      // For posts
      try {
      if (postsHelper.getIsPDCalled()){
      JSONObject pJObj = new JSONObject(result);
      JSONArray pJObjArray = pJObj.getJSONArray("posts");

      for (int i = 0; i < pJObjArray.length(); i++) {
      JSONObject pJObj_data = pJObjArray.getJSONObject(i);
      postsHelper.setPost(pJObj_data.getInt("id"), "post_title", "post_content");
      }
      }

      } catch (JSONException e) {
      //Toast.makeText(JSonActivity.this, e.toString(), Toast.LENGTH_LONG).show();
      Log.d("Json","Exception = "+e.toString());
      }
      }
      }
      }






      java android android-studio






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 4 at 0:19









      Elly RichardsonElly Richardson

      838




      838
























          1 Answer
          1






          active

          oldest

          votes


















          0














          Yes, you can and should put the network calls functions in a separate java file for better readability and test-coverage.



          Apart from that, i would suggest to use Retrofit as your HTTP client. It helps you to manage all the dirty things like headers and converters etc, so you can put all your effort on your logic and implementing your callback actions.






          share|improve this answer
























            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54031603%2fwhere-should-i-put-my-asynctask-class-for-my-app%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            Yes, you can and should put the network calls functions in a separate java file for better readability and test-coverage.



            Apart from that, i would suggest to use Retrofit as your HTTP client. It helps you to manage all the dirty things like headers and converters etc, so you can put all your effort on your logic and implementing your callback actions.






            share|improve this answer




























              0














              Yes, you can and should put the network calls functions in a separate java file for better readability and test-coverage.



              Apart from that, i would suggest to use Retrofit as your HTTP client. It helps you to manage all the dirty things like headers and converters etc, so you can put all your effort on your logic and implementing your callback actions.






              share|improve this answer


























                0












                0








                0







                Yes, you can and should put the network calls functions in a separate java file for better readability and test-coverage.



                Apart from that, i would suggest to use Retrofit as your HTTP client. It helps you to manage all the dirty things like headers and converters etc, so you can put all your effort on your logic and implementing your callback actions.






                share|improve this answer













                Yes, you can and should put the network calls functions in a separate java file for better readability and test-coverage.



                Apart from that, i would suggest to use Retrofit as your HTTP client. It helps you to manage all the dirty things like headers and converters etc, so you can put all your effort on your logic and implementing your callback actions.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 4 at 1:36









                Michael LamMichael Lam

                33628




                33628
































                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54031603%2fwhere-should-i-put-my-asynctask-class-for-my-app%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Monofisismo

                    Angular Downloading a file using contenturl with Basic Authentication

                    Olmecas