2016-08-17 65 views
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"); 
     } 
    } 
} 
+0

您需要使'GetNearbyPlaceData'静态才能够像那样访问。 – Shaishav

+0

是的,但新问题出现像** ShowNearbyPlaces **需要是静态的,然后在Activity上下文错误显示**不能从静态上下文引用** – techDigi

+0

当然...这就是为什么我没有发布它作为答案!你的代码需要认真的重构......你为什么要从另一个活动(通过'AsyncTask')调用一个实例方法'private void ShowNearbyPlaces()',为什么要将整个地图对象传递给另一个活动的内部类?也许,使'AsyncTask'成为它自己的类(一个辅助类)。 – Shaishav

回答

0

您的“GetNearbyPlaceData”是一个内部类,这意味着它只能存在于外部类的实例(本例中为“listviewActivity”)的上下文中。要实例化它,你需要一个活动的实例,这是不推荐的。 将GetNearbyPlaceData移动到您使用它的类,将其移动到它自己的文件中,或使其成为静态。