Java 将JSON响应设置为微调器中的第一项
我有一个AsyncTask,它执行一些GoogleAPI请求并解析JSON,JSON将返回一个字符串,我需要将该字符串设置为我的主活动微调器中的第一项。这是我的任务Java 将JSON响应设置为微调器中的第一项,java,android,json,android-asynctask,android-spinner,Java,Android,Json,Android Asynctask,Android Spinner,我有一个AsyncTask,它执行一些GoogleAPI请求并解析JSON,JSON将返回一个字符串,我需要将该字符串设置为我的主活动微调器中的第一项。这是我的任务 public class CountyData extends AsyncTask<Object, String, String> { String geoData; String url; @Override protected String doInBackground(Object... params) {
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");
}
公共类CountyData扩展异步任务{
字符串地理数据;
字符串url;
@凌驾
受保护的字符串doInBackground(对象…参数){
试一试{
Log.d(“GetGeoData”,“输入doInBackground”);
url=(字符串)参数[0];
DownloadUrl DownloadUrl=新的DownloadUrl();
geoData=downloadUrl.readUrl(url);
Log.d(“地理数据”,地理数据);
Log.d(“GeoReadTask”、“doinbackgroundexit”);
}捕获(例外e){
Log.d(“GeoReadTask”,例如toString());
}
返回地理数据;
}
@凌驾
受保护的void onPostExecute(字符串结果){
Log.d(“GeoReadTask”,“onPostExecute输入”);
字符串geoCounty=null;
DataParser DataParser=新的DataParser();
geoCounty=dataParser.parse(result);//我需要将此字符串设置为微调器中的第一项
Log.d(“GooglePlacesReadTask”、“onPostExecute退出”);
}
}
geoCounty字符串是我需要返回到我的主要活动并设置为spinner中的第一项的字符串。我的主要活动是:
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);
public类MainActivity扩展了AppCompatActivity{
私人纺纱机1;
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.spinner1=(Spinner)findViewById(R.id.listView1);
ArrayAdapter adapter1=新的ArrayAdapter(这是android.R.layout.simple\u下拉列表\u item\u 1line,县);
这个。喷丝头1。设置适配器(适配器1);
如何从onPostExecute返回字符串并将其设置为微调器中的第一项?谢谢!此问题有两种解决方案 1.接口 在Android中,使用任何其他类接口来传递数据。 您可以将asynctask的OnPostExecute中的数据直接发送到MainActivity并更新微调器值。为此,请学习Android中的接口 2.同一类别代码 在要修改/更新的视图组件所在的同一活动类中写入asynctask是另一种解决方案。
如果asynctask是该活动的子类,则可以直接在onPostExecute中修改微调器对象。使用progressDialogs可避免UI出现问题。创建一个界面以与
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);
}
}
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
}
}
到底是什么问题?只需初始化
onPostExecute
中的微调器内容,即可创建自定义适配器,并在onPostExecute
中添加字符串,并通知适配器数据更改无法将其发送到我的主活动?@Pop使用接口从Co将数据发送到MainActivity
untyData#onPostExecute()
@android_hub您能给我一些如何实现这一点的指导吗?当我在onPostExecute中调用我的方法时,它会给出一个NullPointerException。这里:mListener.onDownloadComplete(s);您如何在活动中调用CountryData?您需要初始化侦听器我在onCreate方法中执行此操作:CountyData getcounty=new CountyData();getcounty.execute(data);我必须执行其他操作吗?您需要使用new CountyData(OnDownloadCompleteListener listener)构造函数初始化侦听器