在要在后台(异步)任务类(Java/Android)中访问的类方法中设置变量

Posted

技术标签:

【中文标题】在要在后台(异步)任务类(Java/Android)中访问的类方法中设置变量【英文标题】:Set a variable in a class method to be accessed in a background (async) task class (Java/Android) 【发布时间】:2017-04-16 13:57:53 【问题描述】:

我正在尝试设置一个变量 'election_id' 从上一课获得额外的意图。我需要使用 id 将其解析为 php URL 以检索一些 JSON。我想要做的是将一个变量设置为与前一个类中分配的选举 ID 相同,以便在后台任务中使用:

public class AdminFinishCandidateActivity extends AppCompatActivity 

String json_string;
String json_string_result;

String election_id;


@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_admin_finish_candidate);

    System.out.println("creating");

    Bundle electionData = getIntent().getExtras();
    if (electionData==null) 
        return;
    

    election_id = electionData.getString("electionId");





public void getJson(View view)

    new BackgroundTask().execute();




class BackgroundTask extends AsyncTask<Void,Void,String> 



    String json_url="http://192.168.56.1/dan/db/getjson.php?election_id=" + election_id;


// code to retrieve JSON
    


目前,在我的 onCreate 方法中分配了election_id,但是我知道我无法从我定义 String json_url 的 BackgroundTask 类中的此方法访问它。我该如何做才能在这个类中调用election_id 变量?检索意图附加内容的方法在此类中不起作用。当我使用 JSON 代码运行代码时,没有检索到任何内容。谢谢。

【问题讨论】:

【参考方案1】:

您可以将字符串传递给 AsyncTask,如下所示:

public class BackgroundTask extends AsyncTask<String,Void,String>

    @Override
    protected String doInBackground(String... params) 
    String json_url="http://192.168.56.1/dan/db/getjson.php?election_id=" + params[0];

      //perform network operation and return response
      return response;
    

    @Override
    protected void onPostExecute(String res)
      //Batman Rocks
    

现在执行如下任务:

new BackgroundTask().execute(election_id);

【讨论】:

以上是关于在要在后台(异步)任务类(Java/Android)中访问的类方法中设置变量的主要内容,如果未能解决你的问题,请参考以下文章

HandlerThread类应用

Android AsyncTask异步任务的使用

Spring 集成异步任务线程池

SpringBoot 多线程

多线程

Spring多线程