Java 我想在AsyncTask执行期间启动一个新片段
在用户通过单击submit按钮提交表单详细信息之后,当if条件[if success==1]为True时,我想切换到一个新片段。我应该如何进行 这是我的密码:Java 我想在AsyncTask执行期间启动一个新片段,java,android,android-fragments,android-asynctask,Java,Android,Android Fragments,Android Asynctask,在用户通过单击submit按钮提交表单详细信息之后,当if条件[if success==1]为True时,我想切换到一个新片段。我应该如何进行 这是我的密码: class CreateNewProduct extends AsyncTask<String, String, String> { @Override protected void onPreExecute() { pDialog = new ProgressDialog(getActivi
class CreateNewProduct extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Generating Coupon. Please Wait... ");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
protected String doInBackground(String... args) {
String fname = inputFname.getText().toString();
String lname = inputLname.getText().toString();
String contact = inputContact.getText().toString();
String email = inputEmail.getText().toString();
String eventname = inputEventname.getText().toString();
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("fname", fname));
params.add(new BasicNameValuePair("lname", lname));
params.add(new BasicNameValuePair("contact", contact));
params.add(new BasicNameValuePair("email", email));
params.add(new BasicNameValuePair("eventname", eventname));
JSONObject json = jsonParser.makeHttpRequest(url_create_product,
"POST", params);
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// START A NEW FRAGMENT
} else {
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
}
}
您不应该在后台线程中执行此操作,请尝试以下操作:
class CreateNewProduct extends AsyncTask<String, String, Integer> {
@Override
protected void onPreExecute() {
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Generating Coupon. Please Wait... ");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
protected String doInBackground(String... args) {
String fname = inputFname.getText().toString();
String lname = inputLname.getText().toString();
String contact = inputContact.getText().toString();
String email = inputEmail.getText().toString();
String eventname = inputEventname.getText().toString();
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("fname", fname));
params.add(new BasicNameValuePair("lname", lname));
params.add(new BasicNameValuePair("contact", contact));
params.add(new BasicNameValuePair("email", email));
params.add(new BasicNameValuePair("eventname", eventname));
JSONObject json = jsonParser.makeHttpRequest(url_create_product,
"POST", params);
try {
int success = json.getInt(TAG_SUCCESS);
return success;
} catch (JSONException e) {
e.printStackTrace();
}
return -1;
}
protected void onPostExecute(Integer success) {
pDialog.dismiss();
if (success == 1) {
// START A NEW FRAGMENT
} else {
}
}
}
正如我刚才注意到的,这个异步任务很可能在片段中,这里有另一种方法:
在您的活动中:
public void addCoupon() {
FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
在AsyncTask onPostExecute中:
protected void onPostExecute(Integer success) {
pDialog.dismiss();
if (success == 1) {
// START A NEW FRAGMENT
((MainActivity)getActivity()).addCoupon();
} else {
}
}
虽然这似乎有违Android的内部工作,但我认为可以使用本地广播,如我在本文中发布的代码:
不过,我们不建议这样做。但是我认为它使您想要的成为可能。您应该定义一个回调接口,其中可能有两个方法onSuccess和onFailure,并让您的调用活动或片段充当交换机并更改UI。这是安卓系统的良好实践之一 你可以从这篇博文中得到一个小提示
快乐编码: 因为CreateNewProduct是一个类,所以我将创建一个构造函数,将调用活动作为参数并另存为实例。在主线程上运行的onPostExecute中,我将调用activity实例中的某个方法并得到一个结果。我知道这似乎是一个丑陋的解决方案,但效果很好。我试着详细说明一下。最简单的解决方案是将AsyncTask作为activity类中的一个类。通过这种方式,您可以直接访问片段管理器。
protected void onPostExecute(Integer success) {
pDialog.dismiss();
if (success == 1) {
// START A NEW FRAGMENT
((MainActivity)getActivity()).addCoupon();
} else {
}
}