I have an Activity which has a Navigation Drawer
that has many buttons and one of them is leading to a fragment
.
The problem is that I have to make an AsyncTask
to get some information from the server but I can't get to use getSupportFragmentManager()
inside the AsyncTask
.
I tried to use context or activity but I can't get it to work.
I get this error cannot resolve method getSupportFragmentManager()
AsyncTask.java:
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
public class AsyncTask extends AsyncTask<Void, Void, String> {
private Context c;
private String urlAddress;
private String token;
private DatabaseHelper db;
private Activity mainActivity;
public AsyncTask(Context c, DatabaseHelper databaseHelper, String urlAddress, Activity activity) {
this.c = c;
this.db = databaseHelper;
this.urlAddress = urlAddress;
this.mainActivity = activity;
//GET token FROM database
this.token = db.getValueFromColumn(0, DatabaseHelper.getTableUser(), DatabaseHelper.getUserToken());
}
@Override
protected String doInBackground(Void... params) {
return this.send();
}
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
if (response != null) {
//SUCCESS
mainActivity.getSupportFragmentManager().beginTransaction()
.add(R.id.content_frame
, new SessionsFragment())
.addToBackStack("back")
.commit();
} else {
//NO SUCCESS
}
}
private String send() {
//CONNECT
HttpURLConnection connection = Connector.connect(urlAddress);
if (connection == null) {
return null;
}
try {
OutputStream outputStream = connection.getOutputStream();
//WRITE
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
bufferedWriter.write(new DataPackager(token).packData());
bufferedWriter.flush();
//RELEASE RES
bufferedWriter.close();
outputStream.close();
//HAS IT BEEN SUCCESSFUL?
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
//GET EXACT RESPONSE
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
StringBuilder buffer = new StringBuilder();
String line;
//READ LINE BY LINE
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
String finalJson = buffer.toString();
JSONObject parentObject = new JSONObject(finalJson);
JSONObject secondParentObject = parentObject.getJSONObject("data");
//json getter and adder to database
JSONArray array = secondParentObject.getJSONArray("s");
for (int i = 0; i < array.length(); i++) {
JSONObject finalObject = array.getJSONObject(i);
db.SessionsAddJson(finalObject);
//RELEASE RES
reader.close();
}
return "c";
} else {
}
} catch (IOException | JSONException e) {
e.printStackTrace();
} finally {
connection.disconnect();
}
return null;
}
}
I call the task by:
new $AsyncTask(getApplicationContext(), db, URL, MyActivity.this).execute();
Thank you for your help.