I want to know the difference between Android loader and AsyncTask , here the demo on Loader:
package com.android.loaderdemo;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.AsyncTaskLoader;
import android.content.Context;
import android.content.Loader;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
import com.android.webprocessor.Http_GetServices;
public class MainActivity extends Activity implements LoaderCallbacks<String> {
TextView txt_username, txt_userEmail, txt_password, txt_role, txt_secretQuestion, txt_answer, txt_zipcode;
private static String url = "http://dotstg1.xyz.com/loud/webservcies/GetUserProfile.svc/GetUserProfile/124";
static String response;
static String name, email, Pasword, Answer, RoleId, SecretQuestion, Zip;
static String useResult = null;
static JSONArray userParams = null;
private static final int THE_LOADER = 0x01;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("onCreate", "onCreate");
// getSuLoaderManager().initLoader(THE_LOADER, null, this).forceLoad();
getLoaderManager().initLoader(THE_LOADER, null, this).forceLoad();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
Log.e("onCreateOptionsMenu", "onCreateOptionsMenu");
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public Loader<String> onCreateLoader(int arg0, Bundle arg1) {
Log.e("onCreateLoader", "onCreateLoader");
SampleLoader loader = new SampleLoader(this);
return loader;
}
@Override
public void onLoadFinished(Loader<String> arg0, String arg1) {
txt_username = (TextView) findViewById(R.id.name);
txt_userEmail = (TextView) findViewById(R.id.email);
txt_password = (TextView) findViewById(R.id.password);
txt_role = (TextView) findViewById(R.id.role);
txt_secretQuestion = (TextView) findViewById(R.id.secretquestion);
txt_zipcode = (TextView) findViewById(R.id.zipcode);
txt_answer = (TextView) findViewById(R.id.answer);
txt_username.setText(name);
txt_userEmail.setText(email);
txt_password.setText(Pasword);
txt_role.setText(RoleId);
txt_secretQuestion.setText(SecretQuestion);
txt_answer.setText(Answer);
txt_zipcode.setText(Zip);
Log.e("onLoadFinished", "onLoadFinished");
}
@Override
public void onLoaderReset(Loader<String> arg0) {
Log.e("onLoaderReset", "onLoaderReset");
}
private static class SampleLoader extends AsyncTaskLoader<String> {
@Override
public Context getContext() {
Log.e("getContext", "getContext");
return super.getContext();
}
@Override
public int getId() {
Log.e("getId", "getId");
return super.getId();
}
public SampleLoader(Context context) {
super(context);
Log.e("SampleLoader", "SampleLoader");
}
@Override
public String loadInBackground() {
Log.e("loadInBackground", "loadInBackground");
try {
response = Http_GetServices.connect(url);
JSONObject jsonObject = new JSONObject(response);
JSONObject json2 = jsonObject.getJSONObject("GetUserPrfResult");
String test = (String) json2.get("Descritption");
JSONObject json3 = json2.getJSONObject("GetUserPrfParams");
name = (String) json3.get("Name");
email = (String) json3.get("Email");
Pasword = (String) json3.get("Pasword");
RoleId = String.valueOf(json3.getInt("RoleId"));
SecretQuestion = String.valueOf(json3.get("SecretQuestion"));
Answer = (String) json3.get("Answer");
Zip = String.valueOf(json3.get("Zip"));
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
}
From here:
One subclass of Loaders is the AsyncTaskLoader. This class performs the same function as the AsyncTask, but a bit better. It can handle Activity configuration changes more easily, and it behaves within the life cycles of Fragments and Activities. The nice thing is that the AsyncTaskLoader can be used in any situation that the AsyncTask is being used. Anytime data needs to be loaded into memory for the Activity/Fragment to handle, The AsyncTaskLoader can do the job better.