以序列方式执行两个AsyncTask。在调试其工作正常。但是在运行应用程序时,第二个AysncTask没有执行。尝试THREAD_POOL_EXECUTOR没有帮助。下面是我的代码。我对这个问题一无所知。我是完整的代码。运行headerList.size()tgrowing为零。如果AsyncTask正确执行,则大小为2。
public class MainmenuActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainmenu);
networkCheck(context,rl);
}
private void loadPage(){
// new GetMenu().execute();
GetMenu getMenuTask = new GetMenu();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
getMenuTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
getMenuTask.execute();
}
}
private void setupViewPager(ViewPager viewPager) {
adapter = new ViewPagerAdapter(getSupportFragmentManager());
Menu menu = navigationView.getMenu();
System.out.println("List Size "+ headerList.size());
for(int i=0;i<headerList.size();i++)
{
String title = headerList.get(i).getMenuName().toString();
GlobalClass.menuId = headerList.get(i).getLangID().toString();
adapter.addFragment(new OneFragment(), title);
menu.add(title);
//viewPager.setAdapter(adapter);
}
viewPager.setAdapter(adapter);
}
private void networkCheck(Context context,LinearLayout rl) {
boolean isConnected = NetworkCheck.isNetworkAvailable(context);
if (isConnected) {
if(GlobalClass.languagueSelection.toString().equals("")){
LanguageSelectionDialog languagueDialog =new LanguageSelectionDialog(MainmenuActivity.this);
languagueDialog.show();
}else{
loadPage();
}
} else {
Snackbar snackbar = Snackbar
.make(rl, "No Internet Connection", Snackbar.LENGTH_LONG)
.setDuration(Snackbar.LENGTH_LONG)
.setAction("Retry", new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(MainmenuActivity.this, MainmenuActivity.class);
startActivity(i);
finish();
}
});
}
}
private class GetMenu extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(MainmenuActivity.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(menuURL);
Log.e(TAG, "Response from MenuURL: " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
JSONArray lanList = jsonObj.getJSONArray("menu");
for (int i = 0; i < lanList.length(); i++) {
JSONObject jsonObject1 = lanList.getJSONObject(i);
String langID = jsonObject1.optString("id");
String menuID = jsonObject1.optString("menu");
headerList.add(new Language(langID,menuID));
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainmenuActivity.this, "Json parsing error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
} else {
Log.e(TAG, "Couldn't get json from server.");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainmenuActivity.this,
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG)
.show();
}
});
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
}
}
public class LanguageSelectionDialog extends Dialog {
public LanguageSelectionDialog(Activity a) {
super(a);
// TODO Auto-generated constructor stub
this.languagueSelection = a;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.languague_selection_dialog);
getLanguagues = new GetLanguagues();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
getLanguagues.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
getLanguagues.execute();
} }
private class GetLanguagues extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(getContext());
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(languagueURL);
Log.e(TAG, "Response from url: " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
JSONArray lanList = jsonObj.getJSONArray("language");
for (int i = 0; i < lanList.length(); i++) {
JSONObject jsonObject1 = lanList.getJSONObject(i);
String id = jsonObject1.optString("id");
String langId = jsonObject1.optString("language");
dashBoardList.add(new LanguagueSelection(id,langId));
lanlist.add(langId);
GlobalClass.langId=id;
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getContext(), "Json parsing error: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
} else {
Log.e(TAG, "Couldn't get json from server.");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getContext(),
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG)
.show();
}
});
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
spnLanguagueSelection.setAdapter(new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, lanlist));
getLanguagues.cancel(true);
}
}
}
}
运行时的StackTrace:
12-28 07:13:05.294 17448-17468/com.appathon.siva.news E/ContentValues: Response from url: {"language":[{"id":"21","language":"Hindi"},{"id":"20","language":"English"},{"id":"19","language":"Tamil"}]}
12-28 07:13:10.175 17448-17448/com.appathon.siva.news I/Choreographer: Skipped 297 frames! The application may be doing too much work on its main thread.
12-28 07:13:11.616 17448-17448/com.appathon.siva.news I/System.out: List Size 0
12-28 07:13:11.662 17448-17463/com.appathon.siva.news W/EGL_emulation: eglSurfaceAttrib not implemented
12-28 07:13:11.662 17448-17463/com.appathon.siva.news W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xf3fcd200, error=EGL_SUCCESS
12-28 07:13:11.682 17448-17472/com.appathon.siva.news E/ContentValues: Response from MenuURL: {"menu":[{"id":"14","menu":"Latest News"},{"id":"13","menu":"Top News"}]}
调试时的StackTrace
12-28 07:27:17.155 17557-17579/com.appathon.siva.news E/ContentValues: Response from url: {"language":[{"id":"21","language":"Hindi"},{"id":"20","language":"English"},{"id":"19","language":"Tamil"}]}
12-28 07:27:17.166 17557-17573/com.appathon.siva.news W/EGL_emulation: eglSurfaceAttrib not implemented
12-28 07:27:17.166 17557-17573/com.appathon.siva.news W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xe3873d40, error=EGL_SUCCESS
12-28 07:27:30.429 17557-17583/com.appathon.siva.news E/ContentValues: Response from MenuURL: {"menu":[{"id":"14","menu":"Latest News"},{"id":"13","menu":"Top News"}]}
12-28 07:27:33.836 17557-17557/com.appathon.siva.news I/System.out: List Size 2
列表大小在不同场景下打印。