相关疑难解决方法(0)

AsyncTask返回值

我的Android应用程序连接到我的网站以检索和上传信息,因此我使用AsyncTask线程.

在一个实例中,我需要我的线程将true或false值返回给我的主线程.

有没有办法从AsyncTask执行函数获取此返回值?

当我执行以下操作时:

Toast.makeText(Locate.this, "Testing : "+locationUpdate.execute(location), Toast.LENGTH_LONG).show();
Run Code Online (Sandbox Code Playgroud)

我只是得到了很多胡言乱语.

我认为我需要的是暂停主线程直到第二个线程完成的方法.第二个线程调用主线程中的函数来设置我的返回值.所以当第二个线程完成时,主线程可以取消暂停并访问第二个线程设置的返回值. 如果这个逻辑是合理的,请提供建议......谢谢!

android return-value android-asynctask

28
推荐指数
2
解决办法
5万
查看次数

从AsyncTask类onPostExecute方法返回值

好的,现在我有Class A一些包含一些微调器,这些值将由Class B扩展填充,AsnycTask从Web服务中获取微调器值.在B类中,我设法检索值,在Toast中显示.现在的问题是如何将这些微调器值传递回A类?

我试过了

AsyncTask RETURN值中的OnPostExcecute方法可以吗?

通过传递Class AClass B并存储该值在公共变量Class A象下面

@Override
protected void onPostExecute(String result)
{
  classA.classAvariable = result;
}
Run Code Online (Sandbox Code Playgroud)

然而,每当我尝试阅读时,classAvariable我总会得到一个NullPointer Exception.似乎变量从未分配过结果.出于可读性目的,我需要分开Class B而不是用作内联类.

我的Java程序员是什么想法?

android return-value android-asynctask

9
推荐指数
2
解决办法
3万
查看次数

从AsyncTask类返回数据

如何从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)

java android android-asynctask

8
推荐指数
2
解决办法
2万
查看次数

在ASyncTask.execute()之后从Activity执行x()

这是一个我不知道如何去做的.基本上我有一个ASyncTask类,它在后台照常开展业务.完成后我想做些什么.现在,在你跳到前面说"只使用onPostExecute()"之前,这是一个问题.我需要运行的方法是在activity而不是Task类.

我看到它的方式,我有两个选择.

A:

    CustomTask task = new CustomTask();
    task.execute(passedParams);
            //when(task.execute is finished)
            {
                doX();
            }
Run Code Online (Sandbox Code Playgroud)

我希望我可以这样做,因为它非常简单,让我检查任务何时完成,而不必经常轮询活动和getStatus()活动.我不认为我会幸运,但如果有人有办法,那就太好了

B:

将活动作为参数传递给ASyncTask.这很麻烦,我不喜欢使用它,但除了那个和对象参考,我不知道它是否会工作

    CustomTask task = new CustomTask();
    task.execute(passedParams,MyActivity);
Run Code Online (Sandbox Code Playgroud)

然后在Tasks onPostExecute中,我可以让它调用MyActivity.doX();


C:

第三种方法是将asynctask作为活动本身的私有类,但我真的想将它分开.可重复性和什么不 -

有什么想法吗?

总结一下,在task.execute完成后需要doX().任何想法都赞赏.


d:

好的,我知道我在这里.我一直在想新的解决方案.可以从任何位置调用的类方法或静态方法.

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

4
推荐指数
1
解决办法
4397
查看次数