我有我的AsyncTask执行一些Google API请求并解析一个JSON,它将返回一个String,我需要将其设置为我的主要活动中我的微调器中的第一个项目。这是我的AsyncTask。
public class CountyData extends AsyncTask<Object, String, String> {
String geoData;
String url;
@Override
protected String doInBackground(Object... params) {
try {
Log.d("GetGeoData", "doInBackground entered");
url = (String) params[0];
DownloadUrl downloadUrl = new DownloadUrl();
geoData = downloadUrl.readUrl(url);
Log.d("GeoData", geoData);
Log.d("GeoReadTask", "doInBackground Exit");
} catch (Exception e) {
Log.d("GeoReadTask", e.toString());
}
return geoData;
}
@Override
protected void onPostExecute(String result) {
Log.d("GeoReadTask", "onPostExecute Entered");
String geoCounty = null;
DataParser dataParser = new DataParser();
geoCounty = dataParser.parse(result); //I need to set this String as the first item in my spinner
Log.d("GooglePlacesReadTask", "onPostExecute Exit");
}
}
geoCounty String是我需要返回到我的主要活动并设置为微调器中第一个项目的String。我的主要活动是:
public class MainActivity extends AppCompatActivity{
private Spinner spinner1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.spinner1 = (Spinner) findViewById(R.id.listView1);
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, counties);
this.spinner1.setAdapter(adapter1);
如何从onPostExecute返回我的String并将其设置为我的微调器中的第一项?谢谢!
答案 0 :(得分:0)
这个问题有两个解决方案..
<强> 1。接口强>
在Android中传递来自任何其他类的数据使用接口。 您可以将asynctask的onPostExectute中的数据直接发送到MainActivity并更新微调器值。为此,学习Android中的界面。
<强> 2。相同的类代码
将asynctask写入同一活动类中,其中要修改/更新的视图组件是另一种解决方案。 如果asynctask是该活动的子类,则可以直接修改onPostExecute中的微调器对象。使用progressDialogs来避免UI glithching。
答案 1 :(得分:0)
创建界面以与MainActivity
public class CountyData extends AsyncTask<Object, String, String> {
private OnDownloadCompleteListener mListener;
CountyData(OnDownloadCompleteListener listener) {
mListener = listener;
}
@Override
protected String doInBackground(Object... params) {
...
...
return geoData;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
...
...
mListener.onDownloadComplete(s);
}
public interface OnDownloadCompleteListener {
void onDownloadComplete(String result);
}
}
在您MainActivity
public class MainActivity extends AppCompatActivity implements CountryData.OnDownloadCompleteListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_download);
...
...
}
@Override
public void onDownloadComplete(String result) {
// populate the spinner adapter item here
}
}