0
其实当我从我的MainActivity调用异步类我得到错误(“不是封闭类”),尽可能努力,但无法总之出这个问题是不是在Android中的封闭类,而我呼叫异步类
MainActivity代码:
Button listview=(Button)findViewById(R.id.inListView);
listview.setOnClickListener(new View.OnClickListener() {
String Restaurant = "restaurant";
@Override
public void onClick(View v) {
Log.d("onClick", "Button is Clicked");
String url = getUrl(latitude, longitude, Restaurant);
Object[] DataTransfer = new Object[2];
DataTransfer[0] = mMap;
DataTransfer[1] = url;
Log.d("onClick", url);
listviewActivity.GetNearbyPlaceData getNearbyPlacesListdata = new listviewActivity.GetNearbyPlaceData();
getNearbyPlacesListdata.execute(DataTransfer);
Toast.makeText(MapsActivity.this,"Nearby Restaurants", Toast.LENGTH_LONG).show();
}
});
的AsyncTask代码:
public class listviewActivity extends AppCompatActivity {
static ArrayList<HashMap<String, String>> placesListItems = new ArrayList<HashMap<String,String>>();
// KEY Strings
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listview);
Intent intent = getIntent();
// Getting listview
lv = (ListView) findViewById(R.id.list);
}
private void ShowNearbyPlaces(List<HashMap<String, String>> nearbyPlacesList) {
placesListItems.add((HashMap<String, String>) nearbyPlacesList);
// list adapter
ListAdapter adapter = new SimpleAdapter(listviewActivity.this, placesListItems,
R.layout.list_item,
new String[] { KEY_REFERENCE, KEY_NAME}, new int[] {
R.id.reference, R.id.name });
// Adding data into listview
lv.setAdapter(adapter);
}
public class GetNearbyPlaceData extends AsyncTask<Object, String, String> {
private GoogleMap mMap;
private String url;
private String googlePlacesData;
@Override
protected String doInBackground(Object... params) {
try {
Log.d("GetNearbyPlacesData", "doInBackground entered");
mMap = (GoogleMap) params[0];
url = (String) params[1];
DownloadUrl downloadUrl = new DownloadUrl();
googlePlacesData = downloadUrl.readUrl(url);
Log.d("GooglePlacesReadTask", "doInBackground Exit");
} catch (Exception e) {
Log.d("GooglePlacesReadTask", e.toString());
}
return googlePlacesData;
}
@Override
protected void onPostExecute(String result) {
Log.d("GooglePlacesReadTask", "onPostExecute Entered");
List<HashMap<String, String>> nearbyPlacesList = null;
DataParser dataParser = new DataParser();
nearbyPlacesList = dataParser.parse(result);
ShowNearbyPlaces(nearbyPlacesList);
Log.d("GooglePlacesReadTask", "onPostExecute Exit");
}
}
}
您需要使'GetNearbyPlaceData'静态才能够像那样访问。 – Shaishav
是的,但新问题出现像** ShowNearbyPlaces **需要是静态的,然后在Activity上下文错误显示**不能从静态上下文引用** – techDigi
当然...这就是为什么我没有发布它作为答案!你的代码需要认真的重构......你为什么要从另一个活动(通过'AsyncTask')调用一个实例方法'private void ShowNearbyPlaces()',为什么要将整个地图对象传递给另一个活动的内部类?也许,使'AsyncTask'成为它自己的类(一个辅助类)。 – Shaishav