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类,它包含所有必需的调用方法。但是,如果我想创建一个可用于我所有活动的asynctask类,该怎么办?我该怎么办?我尝试将所有PhotosActivity类型更改为“Activity”,但这似乎并不是它的全部内容。
我的问题是,我如何才能使这个课程真正充满活力?
编辑:
这是我的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方法之外,一切都正常工作,因为对于使用这个基类的每个Activity,返回类型都是不同的:
例如,我的PhotosActivity返回一个我的SingleEvent对象的List,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;
}
问题是下一个Activity将使用不同的对象来存储我的值。我不知道如何处理不同的对象类型。
答案 0 :(得分:1)
小心这些条款。 “动态”是一个加载的单词。这是基本的OOD。制作PhotosActivity常规方法的静态方法,并创建一个所有活动都扩展的基类。在AsyncTask调用的那些活动中使用“doWork”方法。
有更好的方法来做这种事情,但如果你正在寻找它,那它就会起作用。
答案 1 :(得分:1)
我有两件事要说:
1)考虑使用接口。通过让您的Activities实现特定的接口,您可以互换使用它们。
2)话虽如此,请注意你在AsyncTask中所做的事情......确保你在doInBackground方法中所做的任何操作都不会访问UI线程正在使用的代码。