将JSON响应设置为Spinner中的第一项

时间:2017-05-23 14:40:41

标签: java android json android-asynctask android-spinner

我有我的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并将其设置为我的微调器中的第一项?谢谢!

2 个答案:

答案 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 
    }
}