我有2个布局:MainActivity.xml,MenuActivity.xml。 我想从1-st的AsyncTask加载MenuActivity。 这是更新的代码:
class InternetCheck extends AsyncTask<Activity, Void, Boolean> {
public Activity act=new Activity();
protected Boolean doInBackground(Activity... activities) {
boolean status=false;
act=activities[0];
String rurl=act.getString(R.string.url_test);
try
{
URL url = new URL(rurl);
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1000 * 20); // mTimeout is in seconds
urlc.connect();
if (urlc.getResponseCode() == 200) {
status=true;
}
}
catch (MalformedURLException e1) {
status=false;
}
catch (IOException e) {
status=false;
}
return status;
}
protected void onPostExecute(Boolean result) {
if (result==false) {
MainActivity mActivity = (MainActivity) act;
mActivity.ShowNoConnectionButton();
}
else
{
Intent intent = new Intent(act, MenuActivity.class);
act.startActivity(intent);
//setContentView(R.layout.menu_activity);
};
}
}
如果结果为false,我们会显示来自UI类的按钮,如果是,则必须加载第二个活动。对于startActivity(intent),我得到错误:类型为InternetCheck的方法未定义。 也可以使用Intent参数并从AsyncTask调用UI方法ShowNoConnectionButton吗?很难理解我们必须在Intent参数中添加什么以及如何获取这些参数。
但它会错误地发布APP。
第二个屏幕类:
public class MenuActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu_activity);
}
}
答案 0 :(得分:0)
在AsyncTask类的构造函数中,您应该接受上下文(启动异步任务的活动的实例)作为参数并将其保存在成员变量中,稍后在onPostExecute中将其用作context.startActivity()。
这意味着你应该为AsyncTask定义一个构造函数,而不是使用默认的无参数构造函数。
更新:看到完整的代码后,我建议如下:
您不应该自己构建活动。
class InternetCheck extends AsyncTask<Activity, Void, Boolean> {
private MainActivity act;
public InternetCheck(Activity activity) {
this.act = (MainActivity)activity;
}
...
protected void onPostExecute(Boolean result) {
if (result==false) {
act.ShowNoConnectionButton();
}
else
{
Intent intent = new Intent(act, MenuActivity.class);
act.startActivity(intent);
};
}
...
}