我的Android应用程序连接到我的网站以检索和上传信息,因此我使用AsyncTask线程.
在一个实例中,我需要我的线程将true或false值返回给我的主线程.
有没有办法从AsyncTask执行函数获取此返回值?
当我执行以下操作时:
Toast.makeText(Locate.this, "Testing : "+locationUpdate.execute(location), Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)
我只是得到了很多胡言乱语.
我认为我需要的是暂停主线程直到第二个线程完成的方法.第二个线程调用主线程中的函数来设置我的返回值.所以当第二个线程完成时,主线程可以取消暂停并访问第二个线程设置的返回值. 如果这个逻辑是合理的,请提供建议......谢谢!
好的,现在我有Class A一些包含一些微调器,这些值将由Class B扩展填充,AsnycTask从Web服务中获取微调器值.在B类中,我设法检索值,在Toast中显示.现在的问题是如何将这些微调器值传递回A类?
我试过了
AsyncTask RETURN值中的OnPostExcecute方法可以吗?
通过传递Class A到Class B并存储该值在公共变量Class A象下面
@Override
protected void onPostExecute(String result)
{
classA.classAvariable = result;
}
Run Code Online (Sandbox Code Playgroud)
然而,每当我尝试阅读时,classAvariable我总会得到一个NullPointer Exception.似乎变量从未分配过结果.出于可读性目的,我需要分开Class B而不是用作内联类.
我的Java程序员是什么想法?
如何从AsyncTask获取数据?我的MainActivity正在调用触发AsyncTask的DataCall.getJSON函数,但我不确定如何将数据恢复到原始Activity.
调用DataCall的MainActivity应返回一个字符串并将其保存 state_data
String state_data = DataCall.getJSON(spinnerURL,spinnerContentType);
Run Code Online (Sandbox Code Playgroud)
DataCall:
public class DataCall extends Activity {
private static final String TAG = "MyApp";
private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... urls) {
String response = "";
for (String url : urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();
BufferedReader buffer = new BufferedReader(
new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != …Run Code Online (Sandbox Code Playgroud) 这是一个我不知道如何去做的.基本上我有一个ASyncTask类,它在后台照常开展业务.完成后我想做些什么.现在,在你跳到前面说"只使用onPostExecute()"之前,这是一个问题.我需要运行的方法是在activity而不是Task类.
我看到它的方式,我有两个选择.
CustomTask task = new CustomTask();
task.execute(passedParams);
//when(task.execute is finished)
{
doX();
}
Run Code Online (Sandbox Code Playgroud)
我希望我可以这样做,因为它非常简单,让我检查任务何时完成,而不必经常轮询活动和getStatus()活动.我不认为我会幸运,但如果有人有办法,那就太好了
将活动作为参数传递给ASyncTask.这很麻烦,我不喜欢使用它,但除了那个和对象参考,我不知道它是否会工作
CustomTask task = new CustomTask();
task.execute(passedParams,MyActivity);
Run Code Online (Sandbox Code Playgroud)
然后在Tasks onPostExecute中,我可以让它调用MyActivity.doX();
第三种方法是将asynctask作为活动本身的私有类,但我真的想将它分开.可重复性和什么不 -
有什么想法吗?
总结一下,在task.execute完成后需要doX().任何想法都赞赏.
好的,我知道我在这里.我一直在想新的解决方案.可以从任何位置调用的类方法或静态方法.
public class ProfileSettings extends Activity
{
public static void doX()
{
//Logic...
}
}
Run Code Online (Sandbox Code Playgroud)
来自AsyncTask
MyActivity.doX();
Run Code Online (Sandbox Code Playgroud) java multithreading android android-asynctask android-activity