在Google App Engine(Java)上运行异步线程的所有方法是什么?我能想到一个 - 但我想知道所有这些/
我使用AsyncTask来更改TextView的文本,如下所示:
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
for (String url : urls) {
response += url;
}
return response;
}
@Override
protected void onPostExecute(String result) {
textView.setText(result);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在OnClick事件中调用它,一切都会好的:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = (TextView) findViewById(R.id.txt);
Button button = (Button)this.findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new LongOperation().execute(new String[]{"Hello"});
}
});
}
Run Code Online (Sandbox Code Playgroud)
但是当我在我的线程中调用它时,该程序被迫关闭
this.closeButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) …
Run Code Online (Sandbox Code Playgroud) 我试图在Android上使用AsyncTask类但我有一个问题.
这是我的代码:
public void CheckIfUserIsLogedIn ()
{
int userPresence = localDatabase.CheckUserPresence();
if (userPresence == 0)
{
setContentView(R.layout.main);
new checkCountryAsync().execute();
}
else
{
setContentView(R.layout.userlogedon);
}
}
class checkCountryAsync extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... aurl) {
int countryPresence = localDatabase.CheckCountryPresence();
if (countryPresence == 0)
{
CountryTable country = new CountryTable() ;
country.EnterCountry();
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道我做错了什么.LocalDatabase类中的方法CheckCountryPresence()仅进行查询并返回结果.
谢谢.
编辑:这是logCat:
02-20 08:41:25.804: W/dalvikvm(26458): threadid=10: thread exiting with uncaught exception (group=0x4001d5a0)
02-20 …
Run Code Online (Sandbox Code Playgroud) 更新2
logcat的:
03-02 19:03:47.616: E/AndroidRuntime(881): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{TheTask}: java.lang.InstantiationException: .TheTask
03-02 19:03:47.616: E/AndroidRuntime(881): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.os.Handler.dispatchMessage(Handler.java:99)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.os.Looper.loop(Looper.java:123)
03-02 19:03:47.616: E/AndroidRuntime(881): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-02 19:03:47.616: E/AndroidRuntime(881): at java.lang.reflect.Method.invokeNative(Native Method)
03-02 19:03:47.616: E/AndroidRuntime(881): at java.lang.reflect.Method.invoke(Method.java:507)
03-02 19:03:47.616: E/AndroidRuntime(881): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-02 19:03:47.616: E/AndroidRuntime(881): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-02 19:03:47.616: E/AndroidRuntime(881): at dalvik.system.NativeStart.main(Native Method)
03-02 19:03:47.616: E/AndroidRuntime(881): Caused by: …
Run Code Online (Sandbox Code Playgroud) 即使我把它扔进AsyncTask的DoInBackground方法,我仍然会得到一个CalledFromWrongThreadException!任何人都可以告诉我为什么以及如何解决它?
/**
* Recognizes key words in responseTexts and runs the appropriate function
* @param responseText
*/
private void responseHandler(String responseText) {
if(responseText.startsWith("Notes", 0)) {
notes.add(responseText);
new DownloadFilesTask().execute("WriteInternal" , null, null);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的AsyncTask类
private class DownloadFilesTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... command) {
if(command[0].equals("WriteInternal") {
//write to internal storage
FileOutputStream fOut = null;
OutputStreamWriter osw = null;
try{
fOut = openFileOutput("notes.txt", Context.MODE_PRIVATE);
osw = new OutputStreamWriter(fOut);
for (int i = 0; i < notes.size(); i++){
osw.write(notes.get(i) …
Run Code Online (Sandbox Code Playgroud) 在我的Android应用程序中,我使用3个不同的异步任务.在活动A中运行2个任务,在活动B中运行第3个任务.当我在操作系统版本2.3的模拟器中运行应用程序时,工作正常.但是,当我在Android 4.0或更高版本中尝试时,只有第一个Asynctask正在运行.
有没有办法在4.0及更高版本中运行所有3个异步任务?
我知道这个问题已被多次询问,但我有一个显然干净的代码,但是没有用,给我没有例外或任何东西.
我有一个简单的一键Activity(MainActivity
).其中的按钮调用AsyncTask
以便在后台发送电子邮件.我试着去做我认为这是很常见的事情:显示ProgressDialog
任务开始的时间并在结束时解除它.为此,我将上述代码放入AsyncTask.onPreExecute()
和AsyncTask.onPostExecute()
.我认为问题出现在Context
提供给对话框构造函数中,但我为我创建了一个简单的构造函数,我AsyncTask
将其传递给应用程序上下文.我添加了一个简单Toast
的调试,但它没有显示...
这是按钮onClick
方法的代码:
public void onClick(View v) {
new Sender(this).execute("args");
}
Run Code Online (Sandbox Code Playgroud)
这是任务的代码:
private class Sender extends AsyncTask<String, Void, Void> {
private ProgressDialog progDialog;
private Context context;
public Sender(Context context) {
this.context = context;
}
@SuppressWarnings("unused")
protected void onPreExecute(Void... params) {
Toast.makeText(this.context, "Sending...", Toast.LENGTH_SHORT).show();
progDialog = ProgressDialog.show(this.context, "Sending", "Picture is being sent...", true);
}
protected Void doInBackground(String... mailSubj) {
// some code that …
Run Code Online (Sandbox Code Playgroud) 我正在尝试从AsyncTask更新ListView.我有这种情况:
如何从Utilities AsyncTask中的onPostExecute()方法调用notifyDataSetChanged?
我对Android中的多线程有点困惑.我知道我们可以实现使用AsyncTask
和Handler
.通常什么时候我们应该通过在Android中扩展Thread Class来实现?任何人都可以举一个例子,我们只需要通过扩展线程类而不是使用AsyncTask
或来做它Handler
.
考虑一个示例应用程序,我们在活动中有一个弹跳球(忘记动画部分),我需要每20分钟更改一次球的颜色,我需要从服务器获取颜色代码并更新球UI.现在我该怎么做到这一点?有人可以解释使用AsyncTask
或Handler
仅使用线程类(没有Asynctask
或Handler
)?
我该如何处理使用服务从服务器下载大型有效负载.
我有一个现有的代码,其中有一个Async Task用于某些请求 - 响应.在post execute方法中,它将解析后的数据设置为某个db.
现在,我需要修改此代码,以便在应用启动时逐个下载数据.即我需要执行任务A,然后完全完成(甚至数据设置)我需要启动任务B等等大约12个任务.
注意:在开始下一个任务之前,我还需要完成"后执行".
我不知道该怎么做.请建议.