如何使用一个AsyncTask类在Android中应用不同的活动
我有一个AsyncTask类,它连接到web服务以获取某些内容,然后打印到屏幕上。如何使用一个AsyncTask类在Android中应用不同的活动,android,Android,我有一个AsyncTask类,它连接到web服务以获取某些内容,然后打印到屏幕上。 这是我的密码: public class GetCreditAsyncTask extends AsyncTask<Object, Boolean, String>{ private MainActivity callerActivity; private String credit; public GetCreditAsyncTask(Context context){
这是我的密码:
public class GetCreditAsyncTask extends AsyncTask<Object, Boolean, String>{
private MainActivity callerActivity;
private String credit;
public GetCreditAsyncTask(Context context){
callerActivity = (MainActivity )context;
}
@Override
protected String doInBackground(Object... params) {
.....//do something and get the credit
}
@Override
protected void onPostExecute(String response) {
callerActivity.txtView.setText(credit);
}
}
公共类GetCreditAsyncTask扩展了AsyncTask{
私人的主要活动是实用性;
私人信用;
公共GetCreditAsyncTask(上下文){
callerActivity=(MainActivity)上下文;
}
@凌驾
受保护字符串doInBackground(对象…参数){
……做点什么,获得荣誉
}
@凌驾
受保护的void onPostExecute(字符串响应){
callerActivity.txtView.setText(贷方);
}
}
它工作得很好,但现在,我还有一个活动ProfileActivity
还希望使用
GetCreditAsyncTask
获取信用并将其打印到txtView
,但是在
GetCreditAsyncTask
的开始,我将callerActivity
转换为MainActivity
问题是如何只使用一个AsyncTask类,这样我就可以调用它并获得积分 您可以定义两个活动都实现的接口。您必须强制转换到此接口,而不是强制转换到MainActivity
public interface ActivityListener {
public void setText(String text);
}
public class MainActivity extends Activity implements ActivityListener {
...
public void setText(String text) {
TextView tv = findViewById(R.id.main_text);
tv.setText(text);
}
}
public class SecondActivity extends Activity implements ActivityListener {
...
public void setText(String text) {
TextView tv = findViewById(R.id.secondary_text);
tv.setText(text);
}
}
public class GetCreditAsyncTask extends AsyncTask<Object, Boolean, String>{
private ActivityListener callerActivity;
private String credit;
public GetCreditAsyncTask(Context context){
callerActivity = (ActivityListener) context;
}
@Override
protected String doInBackground(Object... params) {
.....//do something and get the credit
}
@Override
protected void onPostExecute(String response) {
callerActivity.setText(credit);
}
}
公共接口活动侦听器{
公共void setText(字符串文本);
}
公共类MainActivity扩展活动实现ActivityListener{
...
公共void setText(字符串文本){
TextView tv=findviewbyd(R.id.main\u text);
tv.setText(文本);
}
}
公共类SecondActivity扩展活动实现ActivityListener{
...
公共void setText(字符串文本){
TextView tv=findviewbyd(R.id.secondary_text);
tv.setText(文本);
}
}
公共类GetCreditAsyncTask扩展了AsyncTask{
私人活动;实用性;
私人信用;
公共GetCreditAsyncTask(上下文){
callerActivity=(ActivityListener)上下文;
}
@凌驾
受保护字符串doInBackground(对象…参数){
……做点什么,获得荣誉
}
@凌驾
受保护的void onPostExecute(字符串响应){
callerActivity.setText(信贷);
}
}
作为@FlávioFaria建议的接口解决方案的替代方案,您还可以将GetCreditAsyncTask
作为一个抽象类,它只包含doInBackGround(…)的共享逻辑。
。然后,在您的活动中,您可以扩展此任务,并为特定于该活动的onPreExecute(…
和onPostExecute(…)
提供实现。