Code below is used to download jsonfile from web and use its data to fill spinner. I wish to know if there is better way. Is it wise to move everything from onGetPriceType to AsyncTask?



Interface
---------

    public interface GetBuildTypeInterface {
    	public void onGetBuildType(HashMap<String,String> result);}

AsyncTask
-----

    public class GetBuildType extends AsyncTask<Void, Void, JSONArray> {
    	private GetBuildTypeInterface callback;
    
    	public GetBuildType(GetBuildTypeInterface callback) {
    		this.callback = callback;
    	}
    
    	@Override
    	protected JSONArray doInBackground(Void... params) {
    		UserFunctions u = new UserFunctions();
    		return u.getBt();
    	}
    
    	@Override
    	protected void onPostExecute(JSONArray result) {
    		super.onPostExecute(result);
    		HashMap<String, String> map = new HashMap<String, String>();
    
    		if (result != null) {
    			map = result.parse();
    			callback.onGetBuildType(map);
    
    		} else {
    			callback.onGetBuildType(null);
    		}
    	}
    }
Activity
----

    public class AddFillActivityApp extends ErrorActivity implements
    		GetBuildTypeInterface
    
    {
    	ArrayAdapter<String> adapterBuild;
    	Spinner spinBuildType;
    
    @Override
    	public void onGetPriceType(final HashMap<String, String> result) {
    		if (result != null) {
    			List<String> fields = new ArrayList<String>();
    			fields.addAll(result.keySet());
    			adapterPrice = new ArrayAdapter<String>(this,
    					android.R.layout.simple_spinner_item, fields);
    			adapterPrice
    					.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    			spinPriceType.setAdapter(adapterPrice);
    
    			spinPriceType
    					.setOnItemSelectedListener(new OnItemSelectedListener() {
    						@Override
    						public void onItemSelected(AdapterView<?> parent,
    								View view, int position, long id) {
    
    							if (position > -1) {
    								String selection = spinPriceType
    										.getSelectedItem().toString();
    								a.setNot_priceFor(result.get(selection));
    							}   
    						}
    
    						@Override
    						public void onNothingSelected(AdapterView<?> arg0) {    
    						}
    					});
    		}else error();
    	}
    }