2012-09-24 60 views
-2

我在android中工作。在我的項目中有一個JSON解析字段,用於實現AsyncTask,但在代碼中出現以下錯誤。任何人都可以解決這個問題,並幫助我完成我的項目。 enter image description hereAsyncTask錯誤

以下是我的課....

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

       } 
      }); 

      } 

    } 
    } 
+0

當你在它懸停光標它顯示什麼錯誤? – Akram

回答

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 }); 
+0

這個我試過,但我不能讓它工作..... – goku

+0

現在你遇到了什麼問題....? –

+0

謝謝你的工作... – goku

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