In my Android apk, I am using async task method.
It was working fine from last many years but now it is creating problem.
doinbackground() and postExecute() methods are not working (they are not called)
, only preExecute() method is working.
doinbackground() and postExecute() methods are not working (they are not called)
, only preExecute() method is working.
class MyAsyncTask extends AsyncTask<Void, ConversationModel, Void> {
#Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
runOnUiThread(new Runnable() {
#Override
public void run() {
// TODO Auto-generated method stub
heading.setText("myheading");
}
});
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (ConversationModel model : dataList) {
if (flagStop)
break;
publishProgress(model);
long_time = Long.parseLong(model.sound_time) * 1000 + 500;
try {
Thread.sleep(long_time);
Thread.sleep(long_extraTime);
long_extraTime = 0;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i++;
Log.d("i", i + " -----------------");
}
return null;
}
protected void onProgressUpdate(ConversationModel... model) {
if (i % 2 == 0) {
View v = View.inflate(Conversation1.this, arrInt_resource[0], null);
v.setAnimation(null);
TextView txtV_spn = (TextView) v.findViewById(R.id.textView_spn);
TextView txtV_eng = (TextView) v.findViewById(R.id.textView_eng);
ImageView img_sound = (ImageView) v.findViewById(R.id.imgsound_conv_spn2eng);
RelativeLayout speak_layout = (RelativeLayout) v.findViewById(R.id.speaking_layout);
heading.setText(dataList.get(0).heading);
if (flag != 1) {
txtV_spn.setText(model[0].eng_txt);
txtV_eng.setText(model[0].spn_txt);
}
#Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if (i >= dataList.size()) {
Log.d("i", i + " ------------------");
makingcontinueImageView();
}
}
}
Change .execute() method of asynctask with this one
asynctask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
Related
I have this code, I have 2 AsyncTask I called that by button, and I have one more I want to ask is there any way to call the Asynctask automatic when is open the activity?
I tried to but it with onCreate but it is error
public class SingleCompleteOrder extends ActionBarActivity {
private static final String comp_id = "complete_id";
private static final String comp_table = "complete_table";
private static final String comp_items = "complete_items";
private static final String comp_date = "complete_date";
private TextView oid;
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
#Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_contact);
...
...
...
...
...
}
public void huss() {
Updatsituation task = new Updatsituation ();
task.execute();
}
private class Updatsituation extends AsyncTask<Void,Void,Boolean> {
private ProgressDialog pd;
private Boolean result = false;
#Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pd = new ProgressDialog(SingleCompleteOrder.this);
pd.setMessage("Processing commend,Please wait");
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setCancelable(false);
pd.show();
}
#Override
protected Boolean doInBackground(Void... params) {
// TODO Auto-generated method stub
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(Utils.WS_UPDATE_SITUAT);
List<NameValuePair> mParams = new ArrayList<NameValuePair>();
mParams.add(new BasicNameValuePair("complete_id", oid.getText().toString()));
mParams.add(new BasicNameValuePair("order_situation","showed"));
try {
post.setEntity(new UrlEncodedFormEntity(mParams));
HttpResponse response = client.execute(post);
String res = EntityUtils.toString(response.getEntity());
Log.d("Order Preview", res);
JSONObject jsonObj = new JSONObject(res);
result = jsonObj.getBoolean("Result");
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
#Override
protected void onPostExecute(Boolean res) {
// TODO Auto-generated method stub
super.onPostExecute(res);
if (pd != null)
pd.dismiss();
if (res) {
Toast.makeText(SingleCompleteOrder.this,
"Order Completed Successfully", Toast.LENGTH_SHORT)
.show();
finish();
Intent intent = new Intent(SingleCompleteOrder.this,
CompleteOrdertest.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
} else {
Toast.makeText(SingleCompleteOrder.this,
"Unable to process the command", Toast.LENGTH_SHORT)
.show();
}
}
}
}
If you want to run the Async task for when the Activity is created you can do this in your OnCreate method. or if you want to execute this every time the Activity come to visibility, you can run this in onResume method.
I do not see you are calling your huss() method in any of your OnCreate or OnResume methods.
EDIT: Try this:
#Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_contact);
huss();
...
...
...
...
...
}
If you want to call your AsyncTask, simply do the following within your onCreate() method of the Activity:
#Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// All lines of code
new Updatsituation().execute();
}
This should fire up the task without you having to click any button.
You can put it inside onResume() but then be prepared to have it start everytime your activity resumes.
If you want to call AsyncTask automatically, then you need to call it on OnCreate() method.
#Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
new Updatsituation().execute(); //call your async task
}
I have an app that sends a file through a socket. While doing this I want to show the progress in a ProgressDialog. The app sends the file perfectly but I'm not able to make the dialog appear.
public class ProgressDialogActivity extends Activity {
private ProgressDialog downloadDialog = null;
private String filePath;
#Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
filePath = getIntent().getExtras().getString("filePath");
downloadDialog = new ProgressDialog(this);
Task myTask = new Task();
myTask.execute(0);
}
private void showMessage(final String msg) {
this.runOnUiThread(new Runnable() {
#Override
public void run() {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), msg, `enter code here`Toast.LENGTH_SHORT).show();
}
});
}
private class Task extends AsyncTask<Integer, Integer, Boolean> implements Observer
{
private Thread t;
#Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
downloadDialog.setTitle("SENDING");
downloadDialog.setMessage("................");
downloadDialog.setCancelable(false);
downloadDialog.setIndeterminate(false);
// downloadDialog.setMax(100);
downloadDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
downloadDialog.show();
}
#Override
protected Boolean doInBackground(Integer... params) {
SendFile send = new SendFile(filePath);
downloadDialog.setMax(0);
t = new Thread(send);
send.registerObserver(this);
// try {
// Thread.sleep(10000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
t.start();
return true;
}
#Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
int counter = values[0].intValue();
downloadDialog.setProgress(counter);
if(filePath != null)
{
downloadDialog.setMessage(filePath+"...");
}
}
#Override
public void update(Subject subject) {
// TODO Auto-generated method stub
if(subject instanceof SendFile)
{
SendFile e = (SendFile) subject;
if(e.getException() != null)
{
t.interrupt();
showMessage(e.getException());
} else
{
if(!e.isStarted())
{
initializeProgressBar(e.getNumIter());
} else
{
refreshProgressBar(e.getNumIter());
}
if(e.isSent())
{
t.interrupt();
showMessage("File sent");
}
}
}
}
public void initializeProgressBar(int max){
downloadDialog.setMax(max);
}
public void refreshProgressBar(int amount){
publishProgress(downloadDialog.getMax()-amount);
}
#Override
protected void onPostExecute(Boolean result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if(downloadDialog != null)
{
downloadDialog.dismiss();
}
finish();
}
#Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
t.interrupt();
showMessage("TASK CANCELLED");
}
};
}
SendFile is the class that contains the socket to send the files.
I think the problem is due to I'm calling the thread inside the AssyncTask because when I make Thread.sleep(10000) I can see the ProgressDialog for that time, but I don't know how to fix it.
Also, when I run the debugger I can see that the variable 'counter' is incremented every time I call it, but if I add a watch with 'downloadDialog.getProgress()' the progress is always 0.
You are creating an AsyncTask, which doInBackground() method RUNS IN BACKGROUND. In there, you don't do anything, but start a new thread... Now this thread does the work, but your AsyncTask finishes, because it has nothing to do after starting the other thread... So, your ProgressDialog is shown for some milliseconds, then your AsyncTask finishes and the ProgressDialog is hidden again. But the thread that is doing the work is still running, only your AsyncTask has finished.
Solution : Either use an AsyncTask OR use a thread.
You need to call publishProgress on doinBackground()
Example:
protected String doInBackground(Void... params) {
try {
int i = 0;
Log.i("Thread","1");
Thread.sleep(1000);
publishProgress(i++);
Log.i("Thread","2");
Thread.sleep(1000);
publishProgress(i++);
Log.i("Thread","3");
Thread.sleep(1000);
Log.i("Thread","4");
Thread.sleep(1000);
Log.i("Thread","5");
} catch (InterruptedException e) {
e.printStackTrace();
}
return "done";
}
I have custom adapter list view with two spinner view.
Each spinner has a background process. On initializing, the spinner view.OnItemSelectedListener is recursively called unnecessarily without any external input to the listener
Class file
public class ClientListAdapter extends BaseAdapter implements SpinnerAdapter {
Context context;
int layoutResourceId;
ArrayList<GetClientListDetail> data = null;
ArrayList<GetClientListDetail> temp = null;
String ID, str;
Typeface typeface;
PopupWindow cp;
private ProgressDialog progressDialog;
String[] Status1 = new String[] { "Waiting", "Away","No Show"};
String[] Status2 = new String[] { "In Service",
"Generate Bill", "Completed" };
SpinnerAdapterlist TherapistAdapter = null;
ArrayAdapter<String> StatusAdapter = null;
ArrayList<GetTherapistProperties> TherapistList ;
private LayoutInflater inflater;
RemoveClient RC;
ChangeStatus CS;
ChangeTherapist CT;
ClientListHolder holder ;
int _therapistID;
GetClientListDetail ap;
GetTherapistProperties tp;
boolean networkavailable=false;
public ClientListAdapter(Context context, int textViewResourceId,
ArrayList<GetClientListDetail> gld, ArrayList<GetTherapistProperties> therapislist) {
super();
this.layoutResourceId = textViewResourceId;
this.context = context;
this.data = gld;
this.mGalleryCount1 = gld.size();
this.mGalleryCount2=gld.size();
this.TherapistList=therapislist;
inflater=LayoutInflater.from(context);
Resources res = context.getResources();
TherapistAdapter = new SpinnerAdapterlist(context,
R.layout.spinnerlayout, TherapistList);
StatusAdapter = new ArrayAdapter<String>(context,
android.R.layout.simple_dropdown_item_1line, Status1);
}
#Override
public int getCount() {
return data.size();
}
#Override
public GetClientListDetail getItem(int position) {
return data.get(position);
}
#Override
public long getItemId(int position) {
return 0;
}
#Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
holder = new ClientListHolder();
row = inflater.inflate(layoutResourceId, parent, false);
holder.tv_no = (TextView) row
.findViewById(R.id.tv_clientwaitlayout_no);
holder.tv_name = (TextView) row
.findViewById(R.id.tv_clientwaitlayout_name);
holder.tv_status = (Spinner) row
.findViewById(R.id.tv_clientwaitlayout_status);
holder.tv_therapist = (Spinner) row
.findViewById(R.id.tv_clientwaitlayout_therapist);
holder.iv_edit=(ImageView) row.findViewById(R.id.btn_clientwaitlayout_edit);
holder.iv_action = (ImageView) row
.findViewById(R.id.btn_clientwaitlayout_action);
holder.tv_unchange_therapist=(TextView) row.findViewById(R.id.tv_clientwaitlayout_unchange_name);
holder.tv_unchange_status=(TextView) row.findViewById(R.id.tv_clientwaitlayout_unchange_status);
row.setTag(holder);
} else {
holder = (ClientListHolder) row.getTag();
}
holder.tv_therapist.setAdapter(TherapistAdapter);
holder.tv_status.setAdapter(StatusAdapter);
ap = data.get(position);
tp=TherapistList.get(position);
holder.tv_name.setText(ap.getCLDName());
holder.tv_no.setText(ap.getCLDNo());
if(ap.getCLDStatus().equals("1") ){
Log.d("LOOP","Sub If condition");
holder.tv_therapist.setVisibility(View.VISIBLE);
holder.tv_status.setVisibility(View.VISIBLE);
holder.tv_unchange_therapist.setVisibility(View.GONE);
holder.tv_unchange_status.setVisibility(View.GONE);
holder.iv_action.setVisibility(View.GONE);
holder.iv_edit.setVisibility(View.VISIBLE);
try {
for(int x=0;x<TherapistList.size();x++){
if(ap.getCLDTherapist().equals(TherapistList.get(x).getID())){
holder.tv_therapist.setSelection(x);
}else{
}
}
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
holder.tv_status.setSelection(Integer.parseInt(ap.getCLDStatus()) - 1);
} catch (ArrayIndexOutOfBoundsException e2) {
// TODO Auto-generated catch block
holder.tv_status.setSelection(0);
}
}else if(ap.getCLDStatus().equals("2") | ap.getCLDStatus().equals("6")){
holder.tv_therapist.setVisibility(View.VISIBLE);
holder.tv_status.setVisibility(View.VISIBLE);
holder.tv_unchange_therapist.setVisibility(View.GONE);
holder.tv_unchange_status.setVisibility(View.GONE);
holder.iv_action.setVisibility(View.GONE);
holder.iv_edit.setVisibility(View.GONE);
try {
for(int x=0;x<TherapistList.size();x++){
if(ap.getCLDTherapist().equals(TherapistList.get(x).getID())){
holder.tv_therapist.setSelection(x);
}else{
}
}
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(ap.getCLDStatus().equals("2")){
holder.tv_status.setSelection(1);
}else{
holder.tv_status.setSelection(2);
}
} catch (ArrayIndexOutOfBoundsException e2) {
// TODO Auto-generated catch block
holder.tv_status.setSelection(0);
}
}else{
holder.tv_therapist.setVisibility(View.GONE);
holder.tv_status.setVisibility(View.GONE);
holder.tv_unchange_therapist.setVisibility(View.VISIBLE);
holder.tv_unchange_status.setVisibility(View.VISIBLE);
holder.iv_action.setVisibility(View.VISIBLE);
holder.iv_edit.setVisibility(View.GONE);
for(int y=0;y<TherapistList.size();y++){
if(ap.getCLDTherapist().equals(TherapistList.get(y).getID())){
holder.tv_unchange_therapist.setText(TherapistList.get(y).getName());
break;
}else{
holder.tv_unchange_therapist.setText("Not Available");
}
}
if (ap.getCLDStatus().equals("2")) {
holder.tv_unchange_status.setText(Status1[1]);
} else if (ap.getCLDStatus().equals("3")) {
holder.tv_unchange_status.setText(Status2[0]);
} else if (ap.getCLDStatus().equals("4")) {
holder.tv_unchange_status.setText(Status2[1]);
} else if (ap.getCLDStatus().equals("5")) {
holder.tv_unchange_status.setText(Status2[2]);
} else if (ap.getCLDStatus().equals("6")) {
holder.tv_unchange_status.setText(Status1[2]);
}
}
holder.tv_therapist.setTag(ap.getCLDClientID());
holder.tv_status.setTag(ap.getCLDClientID());
holder.iv_edit.setTag(ap.getCLDClientID());
holder.iv_action.setTag(ap.getCLDClientID());
holder.iv_action.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
ImageView b = (ImageView) v;
String id = b.getTag().toString();
Log.d("ID is", id);
Intent CDV=new Intent(context, TabSample.class);
CDV.putExtra("ID", id);
//CDV.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
//context.startActivity(CDV);
((Activity) context).startActivityForResult(CDV,5);
try {
Log.d("POSITION", "" + position + " "
+ data.get(position).getCLDClientID());
} catch (ArrayIndexOutOfBoundsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
holder.tv_status
.setOnItemSelectedListener(new OnItemSelectedListener() {
#Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
int id=arg2+1;
try {
try {
CS=new ChangeStatus();
CS.setClientID(data.get(position).getCLDClientID());
CS.setSalonID("1");
if(id==3){
CS.setStatus("6");
}else{
CS.setStatus(String.valueOf(id));
}
new LoadChangeStatus().execute();
} catch (ArrayIndexOutOfBoundsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
#Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
holder.tv_therapist
.setOnItemSelectedListener(new OnItemSelectedListener() {
#Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
try {
try {
Spinner sp = (Spinner) arg0;
String str = sp.getTag().toString();
TextView th_id=(TextView)arg1.findViewById(R.id.spnradptno);
CT=new ChangeTherapist();
CT.setClientID(str);
CT.setSalonID("1");
CT.setTherapist(th_id.getText().toString());
new LoadChangeTherapist().execute();
Log.d("SPR TXT", th_id.getText().toString()+" "+position+" "+str);
} catch (ArrayIndexOutOfBoundsException e) {
// TODO Auto-generated catch block
Log.d("Error in spinner",e.toString());
}
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("Error2 in spinner",e.toString());
}
}
#Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
Log.d("Nothing","Selected");
}
});
holder.iv_edit.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
ImageView b = (ImageView) v;
String id = b.getTag().toString();
Log.d("ID is", id);
Intent CDV=new Intent(context, TabSample.class);
CDV.putExtra("ID", id);
((Activity) context).startActivityForResult(CDV,5);
try {
Log.d("POSITION", "" + position + " "
+ data.get(position).getCLDClientID());
} catch (ArrayIndexOutOfBoundsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
return row;
}
static class ClientListHolder {
TextView tv_no;
TextView tv_name;
Spinner tv_therapist;
Spinner tv_status;
ImageView iv_action;
ImageView iv_edit;
TextView tv_unchange_therapist;
TextView tv_unchange_status;
}
public class LoadChangeStatus extends AsyncTask<Integer, Integer, Integer> {
// Before running code in the separate thread
int LoadChangeStatus= 0;
#Override
protected void onPreExecute() {
// Create a new progress dialog
progressDialog = new ProgressDialog(context);
// Set the progress dialog to display a horizontal progress bar
// progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// Set the dialog title to 'Loading...'
progressDialog.setTitle("Loading...");
// Set the dialog message to 'Loading application View, please
// wait...'
progressDialog.setMessage("Loading, please wait...");
// This dialog can't be canceled by pressing the back key
progressDialog.setCancelable(false);
// This dialog isn't indeterminate
progressDialog.setIndeterminate(false);
// The maximum number of items is 100
// Set the current progress to zero
// Display the progress dialog
progressDialog.show();
}
// The code to be executed in a background thread.
#Override
protected Integer doInBackground(Integer... params) {
try {
// temp.clear();
networkavailable=new Network().isNetworkAvailable(context);
if(networkavailable){
temp = CS.Change_Status(CS, context);
LoadChangeStatus=1;
}else{
LoadChangeStatus=2;
}
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("ERROR", "LoadChangeStatus backgroung");
}
return null;
}
// Update the progress
#Override
protected void onProgressUpdate(Integer... values) {
// set the current progress of the progress dialog
}
// after executing the code in the thread
#Override
protected void onPostExecute(Integer result) {
// close the progress dialog
progressDialog.dismiss();
if(LoadChangeStatus==1){
try {
data.clear();
data.addAll(temp);
notifyDataSetChanged();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if(LoadChangeStatus==2){
Toast.makeText(context, "Network Not Available", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, "Changing Status Failed. Please Try Again", Toast.LENGTH_LONG).show();
}
}
}
public class LoadChangeTherapist extends
AsyncTask<Integer, Integer, Integer> {
// Before running code in the separate thread
int LoadChangeTherapist = 0;
#Override
protected void onPreExecute() {
// Create a new progress dialog
progressDialog = new ProgressDialog(context);
// Set the progress dialog to display a horizontal progress bar
// progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// Set the dialog title to 'Loading...'
progressDialog.setTitle("Loading...");
// Set the dialog message to 'Loading application View, please
// wait...'
progressDialog.setMessage("Loading, please wait...");
// This dialog can't be canceled by pressing the back key
progressDialog.setCancelable(false);
// This dialog isn't indeterminate
progressDialog.setIndeterminate(false);
// The maximum number of items is 100
// Set the current progress to zero
// Display the progress dialog
progressDialog.show();
}
// The code to be executed in a background thread.
#Override
protected Integer doInBackground(Integer... params) {
try {
// temp.clear();
networkavailable=new Network().isNetworkAvailable(context);
if(networkavailable){
temp = CT.Get_Change_Therapist(CT, context);
LoadChangeTherapist=1;
}else{
LoadChangeTherapist=2;
}
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("ERROR", "LoadChangeStatus backgroung");
}
return null;
}
// Update the progress
#Override
protected void onProgressUpdate(Integer... values) {
// set the current progress of the progress dialog
}
// after executing the code in the thread
#Override
protected void onPostExecute(Integer result) {
// close the progress dialog
progressDialog.dismiss();
if (LoadChangeTherapist == 1) {
try {
data.clear();
data.addAll(temp);
notifyDataSetChanged();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if (LoadChangeTherapist == 2) {
Toast.makeText(context, "Network Not Available", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, "Removing Client Failed. Please Try Again", Toast.LENGTH_LONG).show();
}
}
}
public class LoadRemoveClient extends AsyncTask<Integer, Integer, Integer> {
// Before running code in the separate thread
int LoadRemoveClient = 0;
#Override
protected void onPreExecute() {
// Create a new progress dialog
progressDialog = new ProgressDialog(context);
// Set the progress dialog to display a horizontal progress bar
// progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// Set the dialog title to 'Loading...'
progressDialog.setTitle("Loading...");
// Set the dialog message to 'Loading application View, please
// wait...'
progressDialog.setMessage("Loading, please wait...");
// This dialog can't be canceled by pressing the back key
progressDialog.setCancelable(false);
// This dialog isn't indeterminate
progressDialog.setIndeterminate(false);
// The maximum number of items is 100
// Set the current progress to zero
// Display the progress dialog
progressDialog.show();
}
// The code to be executed in a background thread.
#Override
protected Integer doInBackground(Integer... params) {
Log.d("ERROR", "LoadRemoveClient backgroung");
try {
networkavailable=new Network().isNetworkAvailable(context);
if(networkavailable){
temp = RC.Get_Client_List_Detail(RC, context);
LoadRemoveClient=1;
}else{
LoadRemoveClient=2;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
// Update the progress
#Override
protected void onProgressUpdate(Integer... values) {
// set the current progress of the progress dialog
}
// after executing the code in the thread
#Override
protected void onPostExecute(Integer result) {
// close the progress dialog
progressDialog.dismiss();
if (LoadRemoveClient == 1) {
try {
data.clear();
data.addAll(temp);
notifyDataSetChanged();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if (LoadRemoveClient == 2) {
Toast.makeText(context, "Network Not Available", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(context, "Removing Client Failed. Please Try Again", Toast.LENGTH_LONG).show();
}
}
}
}
How to avoid unnecessarily calling of view.OnItemSelectedListener of spinner view On initializing custom adapter list view
You can't stop or avoid calling of onItemSelectedListener on initialization. But you can prevent this by declare an integer and set value as 0 and while on calling getview method, check the integer with size of data(Your array list size).if the integer is less than the size than increment the integer value else do your background work. But it's not right way to do because when you scroll the listview the same problem rise again. You do this if you have fixed array list size. It is better to use AutoCompleteTextView instead of SpinnerView.
It gets called for the selection of the first item(Kind of default value).
Try one thing don't set adapter to spinner if row!=null for ex:
if (row == null) {
holder = new ClientListHolder();
row = inflater.inflate(layoutResourceId, parent, false);
holder.tv_no = (TextView) row
.findViewById(R.id.tv_clientwaitlayout_no);
holder.tv_name = (TextView) row
.findViewById(R.id.tv_clientwaitlayout_name);
holder.tv_status = (Spinner) row
.findViewById(R.id.tv_clientwaitlayout_status);
holder.tv_therapist = (Spinner) row
.findViewById(R.id.tv_clientwaitlayout_therapist);
holder.iv_edit=(ImageView) row.findViewById(R.id.btn_clientwaitlayout_edit);
holder.iv_action = (ImageView) row
.findViewById(R.id.btn_clientwaitlayout_action);
holder.tv_unchange_therapist=(TextView) row.findViewById(R.id.tv_clientwaitlayout_unchange_name);
holder.tv_unchange_status=(TextView) row.findViewById(R.id.tv_clientwaitlayout_unchange_status);
holder.tv_therapist.setAdapter(TherapistAdapter);
holder.tv_status.setAdapter(StatusAdapter);
row.setTag(holder);
} else {
holder = (ClientListHolder) row.getTag();
}
I have a Service which runs a thread. This thread runs a timertask, this timertask now has to run another thread.
My Service class looks like this:
Timer pTimer;
int Time = 1;
int samplerate=100;
int sampleSize=((Time*1000)/samplerate);
Accelerometer_Thread Ac_Thread;
#Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
pTimer = new Timer();
Ac_Thread = new Accelerometer_Thread();
}
#Override
public int onStartCommand(Intent intent, int flags, int startId)
{
// TODO Auto-generated method stub
//super.onStart(intent, startId);
Ac_Thread.start();
return START_STICKY;
}
public class Accelerometer_Thread extends Thread{
#Override
public void run() {
// TODO Auto-generated method stub
super.run();
pTimer.scheduleAtFixedRate(task,0, samplerate);
}
}
/* The Timertask which is to be executed at a periodic interval of "samplerate" */
TimerTask task = new TimerTask() {
#Override
public void run() {
// TODO Auto-generated method stub
String Ack = null;
try {
Ack = Post.PostToWebService("Hello");
} catch (Exception e) {
// TODO Auto-generated catch block
}
if (Ack.contentEquals("1")) {
//Do SOmething
}
else
Log.d("Error", "NotSent To Webservice");
} catch (Exception e) {
// TODO: handle exception
}
}
}
}
};
The Post.PostToWebService which starts the Thread looks like this:
public static String ReceivedAcknowledgement=null;
public static String buffer;
public static String PostToWebService(String Payload){
CallPost cp = new CallPost();
buffer = Payload;
ReceivedAcknowledgement="STRT";
try {
cp.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cp.start();
while(ReceivedAcknowledgement=="STRT")
{
try
{
Thread.sleep(10);
}catch(Exception ex)
{
}
}
if(ReceivedAcknowledgement != "STRT")
return ReceivedAcknowledgement;
else
return null;
}
The CallPost looks like this:
public class CallPost extends Thread{
#Override
public void run() {
// TODO Auto-generated method stub
super.run();
Post.ReceivedAcknowledgement = ParseXML(in);
}
private String ParseXML(InputStream i){
//Parse
}
}
I'm getting an error in my Service class at the line Post.PostToWebService("Hello") where the error says:
java.lang.RuntimeException: Can't create handler inside thread that
has not called Looper.prepare()
I've tried understanding about loopers and handlers but I'm not able to get it.
I am developing an android application where I receive eeg signal from bluetooth and display it in real time using achartengine. I use an async task to display the chart and update it. But, I get ConcurrentModificationException everytime. The graph is displayed for sometime and then it gives that error. Below is my code.
mstart.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View arg0)
{
// TODO Auto-generated method stub
// tv.setText("Fetal Heart rate loading..");
// index = 0;
flag = true;
if(fhr_alg!=null)
fhr_alg = null;
fhr_alg = new AddStringTask();
algo_done = false;
/*curr = 5;
counter = 0;*/
//// a1.setFlag(true);
//a1.setMax(0);
Thread tt = new Thread()
{
public void run()
{
try{
sleep(600);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
fhr_alg.execute();
}
}
};tt.start();
if (view_eeg1== null) {
LinearLayout layout_eeg1 = (LinearLayout) findViewById(R.id.layout2);
view_eeg1= ChartFactory.getLineChartView(BluetoothConnect.this, eeg1, renderer_eeg1);
// layout_eeg1.
layout_eeg1.addView(view_eeg1);
} else {
view_eeg1.repaint();}
// w1.loadUrl("javascript:callJS()");
mstart.setEnabled(false);
}
});
class AddStringTask extends android.os.AsyncTask<Void, Integer, Integer> {
#Override
protected void onPostExecute(Integer result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
algo_done=true;
//Toast.makeText(Html.this, "Done Algo !", Toast.LENGTH_SHORT).show();
}
#SuppressLint("UseValueOf")
#Override
protected Integer doInBackground(Void... unused) {
try {
for(int r=0;r<=5000;r++){
//Thread.sleep(300);
series1.add(r,data[r]);
// w2.loadUrl("javascript:count(\""+data[r]+"\")");
if(r<=250){
renderer_eeg1.setXAxisMax(250);
}
else if(r>250){
double maxX = series1.getMaxX();
double minX = maxX - 250;
renderer_eeg1.setXAxisMin(minX);
renderer_eeg1.setXAxisMax(maxX);
}
view_eeg1.repaint();
publishProgress((int)data[r]);
SystemClock.sleep(600);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return (0);
}
#Override
protected void onProgressUpdate(Integer ... value) {
int fhr=value[0];
view_eeg1.repaint();
w2.loadUrl("javascript:count(\""+fhr+"\")");
//a1.setfhr(curr, fhr);
//curr++;
}
}
can anyone tell me why am I getting this error and how to solve it.
Thanks
problem updating the UI into a Thread that is not an UI Thread so u
have to use a doinbackground as below and remove the code that
modifies the UI in doInbackground