-2

我在android中工作。在我的项目中有一个JSON解析字段,我实现了AsyncTask,但我的代码中出现以下错误。谁能解决这个问题并帮助我完成我的项目。在此处输入图像描述

以下是我的课......

    import java.util.ArrayList;
    import java.util.HashMap;

    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

    import android.app.ListActivity;
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;



    public class MyListActivity extends ListActivity {

        // url to make request
        private static String url = "https://maps.googleapis.com/maps/api/place/textsearch/json?query=restaurants+in+Sydney&sensor=true&key=AIzaSyD38pak_katUfSR92WE2_O2b9y0JSp5htA";



        // JSON Node names
        private static final String TAG_CONTACTS = "results";
        private static final String TAG_ID = "id";
        private static final String TAG_NAME = "name";
        private static final String TAG_ADDRESS = "formatted_address";
        private static final String TAG_GENDER = "rating";

        // contacts JSONArray
        JSONArray contacts = null;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        new LoadData().execute();

        }

    class LoadData extends AsyncTask<String, String, String>
        {
        // Hashmap for ListView
            ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();
        protected String doInBackground(String... args) {

            MyListActivity pl1 = new MyListActivity();
            // Creating JSON Parser instance
            JSONParser jParser = new JSONParser();

            // getting JSON string from URL
            JSONObject json = jParser.getJSONFromUrl(url);

            try {
                // Getting Array of Contacts
                contacts = json.getJSONArray(TAG_CONTACTS);

                // looping through All Contacts
                for(int i = 0; i < contacts.length(); i++){
                    JSONObject c = contacts.getJSONObject(i);

                    // Storing each json item in variable
                    String id = c.getString(TAG_ID);
                    String name = c.getString(TAG_NAME);
    //              String email = c.getString(TAG_EMAIL);
                    String formatted_address = c.getString(TAG_ADDRESS);
                    String rating = c.getString(TAG_GENDER);

                    // Phone number is agin JSON Object
    //              JSONObject phone = c.getJSONObject(TAG_PHONE);
    //              String mobile = phone.getString(TAG_PHONE_MOBILE);
    //              String home = phone.getString(TAG_PHONE_HOME);
    //              String office = phone.getString(TAG_PHONE_OFFICE);

                    // creating new HashMap
                    HashMap<String, String> map = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    map.put(TAG_ID, id);
                    map.put(TAG_NAME, name);
                    map.put(TAG_ADDRESS, formatted_address);
                    map.put(TAG_GENDER, rating);
    //              map.put(TAG_EMAIL, email);
    //              map.put(TAG_PHONE_MOBILE, mobile);

                    // adding HashList to ArrayList
                    contactList.add(map);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }    
        protected void onPostExecute(String file_url) {
            /**
             * Updating parsed JSON data into ListView
             * */
            ListAdapter adapter = new SimpleAdapter(this, contactList,
                    R.layout.listview_item_row,
                    new String[] { TAG_NAME, TAG_ADDRESS, TAG_GENDER,}, new int[] {
                            R.id.txtTitle, R.id.txtTitle1, R.id.txtTitle3 });

            setListAdapter(adapter);

            // selecting single ListView item
            ListView lv = getListView();

            // Launching new screen on Selecting Single ListItem
            lv.setOnItemClickListener(new OnItemClickListener() {


                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    // getting values from selected ListItem
    //              String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
    //              String cost = ((TextView) view.findViewById(R.id.formatted_address)).getText().toString();
    //              String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString();

                    // Starting new intent
                    Intent in = new Intent(getApplicationContext(), ProfileViewActivity.class);
    //              in.putExtra(TAG_NAME, name);
    //              in.putExtra(TAG_EMAIL, cost);
    //              in.putExtra(TAG_PHONE_MOBILE, description);
                    startActivity(in);

                }
            });

            }

    }
    }
4

2 回答 2

2
ListAdapter adapter = new SimpleAdapter(this, contactList,
                R.layout.listview_item_row,
                new String[] { TAG_NAME, TAG_ADDRESS, TAG_GENDER,}, new int[] {
                        R.id.txtTitle, R.id.txtTitle1, R.id.txtTitle3 });

代替this

MyListActivity.this

ListAdapter adapter = new SimpleAdapter(MyListActivity.this, contactList,
                R.layout.listview_item_row,
                new String[] { TAG_NAME, TAG_ADDRESS, TAG_GENDER,}, new int[] {
                        R.id.txtTitle, R.id.txtTitle1, R.id.txtTitle3 });
于 2012-09-24T05:44:11.323 回答
2

说明

this将提供对LoadData AsyncTask的onPostExecute函数的引用。但是你需要你的类的引用,所以用MyListActivity.this替换它。

因此

ListAdapter adapter = new SimpleAdapter(MyListActivity.this, contactList,
            R.layout.listview_item_row,
            new String[] { TAG_NAME, TAG_ADDRESS, TAG_GENDER,}, new int[] {
                    R.id.txtTitle, R.id.txtTitle1, R.id.txtTitle3 });
于 2012-09-24T06:03:13.273 回答