有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当我调用类的异步类时,java在Android中不是一个封闭类

实际上,当我从MainActivity调用类的异步类时,我遇到了错误(“不是一个封闭类””),并尽了最大努力,但无法解决这个问题

main活动代码:

 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();

            }
        });

异步任务代码:

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");
        }
    }
}

共 (1) 个答案

  1. # 1 楼答案

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