Hi Clay, Thank for your help so much, Now, i can fix my problem.I insist to find way to fix my problem in my code because it will makes my skill better than using someone's code. But next time, i will use UserTask to do that.
Best regard, NPAK On Thu, Mar 5, 2009 at 9:54 AM, Clay <claytan...@gmail.com> wrote: > > you have two threads one you post, the other you start... > > again I wouldnt endorse the way your trying to manage your threading > in this case, and Romain (on the developer team) seems to recommended > doing background updates to activity views using update task so I > think you might benefit by rethinking your approach. > > generally I would post runnable to handlers like this *if you must* > > private void updateProgress(int amount){ > // Update the progress bar > mProgressStatus = amount; > mHandler.post(new Runnable() { > public void run() { > mProgress.setProgress(mProgressStatus); > } > }); > } > > So basically it is possible to hammer that square peg into your round > hole if you wish, I just wont be the one to do it. > > Respectfully, > > Clay > > > > On Mar 3, 11:55 pm, Anh Khoa Nguyen Pham <npak...@gmail.com> wrote: > > UserTask class is useful but in this case, if i want to fix my problem in > my > > code, can you help me to do that? > > I really appreciate your help ! > > Thanks, > > NPAK > > > > On Wed, Mar 4, 2009 at 2:15 PM, Clay <claytan...@gmail.com> wrote: > > > > > so just from the basic use case I dont know that I would use a > > > handler, basically I really like Romain Guy's implementation for > > > background user tasks that do things and then update the screen, its > > > based on his userTask implementation: > > > > >http://code.google.com/p/apps-for-android/source/browse/trunk/Photost. > .. > > > > > so to extend this, it uses generics *very wisely* so you can make any > > > model you want for both the doInBackground params which returns the > > > third arg, and becomes the param for onPostExecute. > > > > > /** > > > * Background task to verify the create user action. When the > > > action comes back > > > * it could inform the client to sync all data if the username and > > > password match > > > * or that there was a validation error like the user already > > > exists, or that > > > * this is a new user and that it successfully created it. > > > * > > > */ > > > private class PostActionTask extends UserTask<Object, Void, > > > ActionResult> { > > > public ActionResult doInBackground(Object... params) { > > > ActionResult result = > > > new ActionResult(); > > > result.setActionStatus("FAILED"); > > > > > Action actionToRun = (Action)params[0]; > > > > > try { > > > result = > > > RpcActionClient.executeAction( > > > actionToRun, > > > > > MomentaryNowApp.getString("app_momentary_now_server"), > > > > > MomentaryNowApp.getInteger("app_momentary_now_server_port"), > > > > > MomentaryNowApp.getString("app_momentary_action_endpoint")) ; > > > > > } catch (IOException e) { > > > Log.e(TAG, "IOException:"+e.getMessage()); > > > } catch (HttpException e) { > > > Log.e(TAG, "HttpException:"+e.getMessage()); > > > } catch (URISyntaxException e) { > > > Log.e(TAG, > "URISyntaxException:"+e.getMessage()); > > > } > > > return result; > > > } > > > > > @Override > > > public void onPostExecute(ActionResult result) { > > > Log.d(TAG, "result:"+result.getActionStatus()); > > > if(result.getActionStatus().equals("SUCCESS")) > > > { > > > //get the progress bar to update > > > ProgressBar progressBar = > > > > > (ProgressBar)findViewById(R.id.create_keyword_send_progress); > > > progressBar.setVisibility(View.GONE); > > > > > ImageView checked = > > > > > (ImageView)findViewById(R.id.create_keyword_send_toggle); > > > checked.setVisibility(View.VISIBLE); > > > > > } > > > } > > > } > > > > > secondly it is my understanding that AlarmManager is the timer > > > infrastructure you would most likely use > > > and that it would then call your background task. > > > > >http://developer.android.com/guide/samples/ApiDemos/src/com/example/a. > .. > > > > > I am sure there are other ways to do this but this would be the way I > > > would try if I was doing what you told me. > > > > > Clay > > > > > On Mar 2, 11:32 pm, "npak...@gmail.com" <npak...@gmail.com> wrote: > > > > Hi all, > > > > My purpose is very simple : each 1second, I want to redraw an object > > > > on different place on background. > > > > I do not know where my error on this code below. Hope that you can > > > > show me or give me an advice to fix this problem > > > > > > Here is my code > > > > > > ********************************************************************************************************************** > > > > public class My_View extends View{ > > > > > > private Bitmap mBackground_img; > > > > private Drawable mMoveObject; > > > > private int mObjectw,mObjecth; > > > > private int Dx,Dy; > > > > > > private Handler myHandler = new Handler(); > > > > private long lasttime; > > > > public My_View(Context context,AttributeSet ats,int ds) > > > > { > > > > super(context,ats,ds); > > > > init(context); > > > > } > > > > public My_View(Context context,AttributeSet ats) > > > > { > > > > super(context,ats); > > > > init(context); > > > > } > > > > public My_View(Context context) > > > > { > > > > super(context); > > > > init(context); > > > > } > > > > > > public void change() > > > > { > > > > invalidate(); > > > > } > > > > private void init(Context context) > > > > { > > > > Resources res = context.getResources(); > > > > mMoveObject = res.getDrawable > > > > (R.drawable.lander_firing); > > > > mBackground_img = BitmapFactory.decodeResource(res, > > > > R.drawable.my_pic); > > > > mObjectw = mMoveObject.getIntrinsicWidth(); > > > > mObjecth = mMoveObject.getIntrinsicHeight(); > > > > Dx = Dy = 0; > > > > > > lasttime = System.currentTimeMillis() + 1000; > > > > Thread mthread = new Thread(null,doBackground,"Background"); > > > > mthread.start(); > > > > } > > > > private Runnable doBackground = new Runnable() > > > > { > > > > public void run() > > > > { > > > > long now = System.currentTimeMillis(); > > > > if(lasttime < now ) > > > > { > > > > Dx = Dx + 10; > > > > Dy = Dy + 10; > > > > lasttime = now + 1000; > > > > myHandler.post(change_view); > > > > } > > > > } > > > > }; > > > > private Runnable change_view = new Runnable() > > > > { > > > > public void run() > > > > { > > > > change(); > > > > } > > > > }; > > > > @Override > > > > public void onDraw(Canvas canvas) > > > > { > > > > canvas.drawBitmap(mBackground_img,0 ,0 , null); > > > > mMoveObject.setBounds(Dx, Dy, Dx+mObjectw, Dy+mObjecth); > > > > mMoveObject.draw(canvas); > > > > }} > > > > > > ********************************************************************************************************************** > > > > Hope to see your reply soon, > > > > Thanks in advance, > > > > NPAK > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---