private void doPost(MKPoiInfo signpoi2) {
String name = signpoi2.name;
GeoPoint p = signpoi2.pt;
int x = p.getLatitudeE6();
int y = p.getLongitudeE6();
if (mPostTask != null
&& mPostTask.getStatus() == GenericTask.Status.RUNNING) {
return;
} else {
mPostTask = new PostTask();
mPostTask.setListener(mPostTaskListener);
TaskParams params = new TaskParams();
params.put("name", name);
params.put("x", String.valueOf(x));
params.put("y", String.valueOf(y));
mPostTask.execute(params);
}
}
private void onPostBegin() {
// disablePost();
dialog = ProgressDialog.show(this, "", "正在提交,请稍候!", true);
dialog.setCancelable(true);
}
private void onPostSuccess() {
dialog.dismiss();
// updateProgress("");
// shout_poto_imageview.setImageBitmap(null);
Toast.makeText(this, "签到成功!", Toast.LENGTH_SHORT).show();
}
private void onPostFailure(String reason) {
Toast.makeText(this, reason, Toast.LENGTH_SHORT).show();
if (dialog != null) {
dialog.dismiss();
}
// enablePost();
}
private class PostTask extends GenericTask {
private String msg = "发送失败,可能遇到网络故障!";
public String getMsg() {
return msg;
}
@Override
protected TaskResult _doInBackground(TaskParams... params) {
TaskParams param = params[0];
publishProgress("正在提交,请稍候...");
try {
String x = param.getString("x");
String y = param.getString("y");
String name = param.getString("name");
String res = GalaApplication.mApi.post(name, x, y);
} catch (HttpException e) {
Log.e(TAG, e.getMessage(), e);
Throwable cause = e.getCause(); // Maybe null
if (cause == null) {
if (e instanceof HttpRefusedException) {
msg = e.getMessage();
}else if(e instanceof HttpServerException){
msg=e.getMessage();
}
} else if (cause instanceof HttpAuthException) {
// Invalid userName/password
msg = ((HttpRefusedException) cause).getError()
.getMessage();
} else {
msg = getString(R.string.login_status_network_or_connection_error);
}
publishProgress(msg);
return TaskResult.FAILED;
}
return TaskResult.OK;
}
}
private TaskListener mPostTaskListener = new TaskAdapter() {
@Override
public void onPreExecute(GenericTask task) {
onPostBegin();
}
@Override
public void onProgressUpdate(GenericTask task, Object param) {
// updateProgress((String) param);
}
@Override
public void onPostExecute(GenericTask task, TaskResult result) {
if (result == TaskResult.OK) {
onPostSuccess();
} else {
onPostFailure(((PostTask) task).getMsg());
}
}
@Override
public String getName() {
// TODO Auto-generated method stub
return "Login";
}
};
private GenericTask mPostTask;
private ProgressDialog dialog;
分享到:
相关推荐
在Android开发中,多线程下载是一项常见的任务,特别是在处理大文件时,为了提高下载速度和用户体验,通常会采用多线程技术。本资源提供的"android 多线程下载源代码"是一个很好的学习资料,可以帮助开发者理解并...
在Android应用开发中,多线程技术是必不可少的,它能帮助开发者实现高效的代码执行,提升用户体验,并确保应用程序的响应性。本资源包主要聚焦于Android平台上的多线程编程,包括理论概念、最佳实践以及实际应用案例...
在Android开发中,线程是实现多任务并行执行的关键工具。本文将深入解析Android线程启动的方法,并通过源代码示例帮助初学者理解和掌握这一关键技能。 Android系统基于Java,因此其线程机制遵循Java的基本规则,但...
本教程将深入讲解如何在Android环境中实现多线程下载功能,以及涉及的相关知识点。 首先,我们需要理解Android的线程模型。Android系统的主要UI线程(也称为主线程)负责处理用户交互和界面更新。为了不影响用户...
本示例代码旨在帮助开发者深入理解并掌握在Android环境中如何有效地使用多线程。以下将详细介绍这5种不同的线程实现方式及其应用场景。 1. **Thread类**: Android系统基于Java,因此我们可以直接使用Java的`...
本文将深入探讨Android线程的概念、类型以及如何有效地利用线程进行编程,包括各种经典用法,并提供完整的代码示例。 一、Android线程基础 在Android系统中,主线程也称为UI线程,负责处理用户界面的所有交互。由于...
开源代码中可能使用了线程池(ThreadPoolExecutor)来管理下载任务,线程池可以有效地控制运行的线程数量,避免资源浪费,同时能根据需求动态调整线程数量。它允许预先设定最大线程数,超过这个数量的任务将被放入...
在Android开发中,多线程是一项至关重要的技术,特别是在处理耗时操作时,如网络请求、数据解析等,以避免阻塞主线程导致用户界面(UI)无响应。标题"android——多线程"和描述"android——Handler与多线程应用范例...
在Android应用开发中,多线程下载是一项关键技术,它能显著提高大文件下载的效率,尤其是在网络条件不稳定的情况下。断点续传是多线程下载的一个重要特性,允许用户中断下载后,从上次停止的位置继续,提高了用户...
本篇将深入探讨如何在Android中实现多线程下载,基于提供的"android多线程下载代码"进行解析。 首先,我们要理解Android中的线程模型。主线程是负责用户界面更新和事件处理的线程,如果在此线程上执行长时间任务,...
在Android中,多线程是指在一个进程中同时运行多个线程,每个线程执行不同的任务。这样做的主要目的是避免阻塞UI线程(主线程),因为UI线程负责处理与用户界面相关的所有操作,如果它被长时间占用,会导致应用响应...
- 要实现native方法回调Java,可以在本地代码中调用`JNIEnv`指针提供的`CallVoidMethod`, `CallIntMethod`等函数,传入Java对象和方法ID,从而执行Java代码。 4. **线程间的通信和同步**: - 由于本地线程和Java...
在Android开发中,图片动态效果是用户界面设计中不可或缺的一部分,尤其在游戏或者动画应用中。本主题将探讨如何利用线程技术实现图片在屏幕上的水平循环往返移动。线程在Android中扮演着处理后台任务的重要角色,它...
在Android应用开发中,线程间的通信是一个至关重要的概念,特别是在UI更新和后台任务执行时。Handler机制就是Android系统提供的一种高效、灵活的线程间通信方式。本篇将深入探讨如何利用Handler在线程之间传递代码,...
总结起来,`Android Handler 线程 示例代码`通过`Handler`、`Thread`、`Toast`以及`MessageQueue`展示了如何在后台线程执行任务并在主线程更新UI,以实现实时的进度条滚动效果。这样的技术在很多需要动态更新UI的...
线程通常会实现`TThread`类或其子类,并重写`Execute`方法,这是线程执行的主要逻辑部分。 4. **线程同步与通信**: 在多线程编程中,确保数据安全和避免竞态条件至关重要。Delphi提供了一些同步机制,如`TEvent`,...
为了不阻塞主线程,使得用户界面保持流畅,后台任务如文件下载通常会放在其他线程中执行。这就涉及到单线程和多线程的概念。 1. **单线程下载**: 在单线程下载中,所有的下载任务都在一个单独的工作线程中进行。...
Android中可以通过`setPriority()`方法设置线程优先级,但通常不建议这样做,因为Android系统并不保证优先级的执行顺序,且可能导致不公平的资源分配。 五、异步任务的最佳实践 1. 尽量减少主线程的负载,将耗时...
在Android开发中,线程和View的交互是十分常见的需求,因为Android的UI操作必须在主线程中进行,而耗时的操作(如网络请求、大数据处理等)则应该放在子线程中。本实例主要探讨如何在子线程中更新View,通过两种方式...
虽然大部分编程问题可以通过顺序编程解决,但如果能让程序中的多个部分并行执行,则会变得更加方便和必要。线程的优先级决定了线程在就绪队列中的优先级。 #### 六、无效化与重绘 **1. `invalidate()`** 当需要...