package de.tablayoutexample;
import java.util.List;
import android.os.AsyncTask;
import android.util.Log;
public class CallWebServiceTask extends AsyncTask<String, String, String> {
private PhotosActivity theActivity;
public CallWebServiceTask(PhotosActivity theActivity){
this.setTheActivity(theActivity);
}
@Override
protected void onPreExecute(){
PhotosActivity.showSpinner();
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
return PhotosActivity.getEventList();
}
@Override
protected void onPostExecute(String result) {
List<SingleEvent> thelist = PhotosActivity.parseJSONResponse(result);
/*for(int i=0;i<thelist.size();i++){
SingleEvent entry = thelist.get(i);
Log.v("Finished", entry.getTitle());
}*/
theActivity.refreshListView(thelist);
PhotosActivity.hideSpinner();
}
public PhotosActivity getTheActivity() {
return theActivity;
}
public void setTheActivity(PhotosActivity theActivity) {
this.theActivity = theActivity;
}
}
Я не совсем уверен, что делаю, но в итоге я написал вышеупомянутый класс, который работает с моим классом PhotosActivity, который содержит все необходимые методы, которые вызываются. Тем не менее, что если я захочу создать асинхронный класс, который можно будет использовать для всех моих действий? Как бы я это сделал? Я попытался изменить все типы PhotosActivity на «Активность», но, похоже, это еще не все.
Мой вопрос: как бы я сделал этот класс по-настоящему динамичным?
EDIT:
Вот мой базовый класс CustomActivity, который включает в себя класс AsyncTask внутри:
package de.tablayoutexample;
import android.app.Activity;
import android.os.AsyncTask;
import android.util.Log;
public class CustomActivity extends Activity{
public String getEventList() {
// TODO Auto-generated method stub
return null;
}
public Object parseJSONResponse(String result) {
// TODO Auto-generated method stub
return null;
}
public void showSpinner() {
// TODO Auto-generated method stub
}
public void refreshListView(Object thelist) {
// TODO Auto-generated method stub
}
public void hideSpinner() {
// TODO Auto-generated method stub
}
public class CallWebServiceTask extends AsyncTask<String, String, String> {
private CustomActivity theActivity;
public CallWebServiceTask(CustomActivity theActivity){
this.setTheActivity(theActivity);
}
@Override
protected void onPreExecute(){
theActivity.showSpinner();
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
Log.i("ADASD","EXECUTED");
return theActivity.getEventList();
}
@Override
protected void onPostExecute(String result) {
Object thelist = theActivity.parseJSONResponse(result);
theActivity.refreshListView(thelist);
theActivity.hideSpinner();
}
public CustomActivity getTheActivity() {
return theActivity;
}
public void setTheActivity(CustomActivity theActivity) {
this.theActivity = theActivity;
}
}
}
Таким образом, все работает правильно, за исключением метода parseJSONResponse, потому что тип возвращаемого значения будет различным для каждого действия, которое использует этот базовый класс:
Например, моя PhotosActivity возвращает список моего объекта SingleEvent, который прекрасно делает для меня gson.
public List<SingleEvent> parseJSONResponse(String jsonResponse) {
//using gson, place all the json into the SingleEvent object and then into a List
Type listType = new TypeToken<List<SingleEvent>>(){}.getType();
List<SingleEvent> events = new Gson().fromJson(jsonResponse, listType);
return events;
}
Проблема в том, что в следующем действии будет использоваться другой объект для хранения моих значений. Я не знаю, как бороться с различными типами объектов.