2015-02-09 57 views
2

這是我的JSON對象了我的沙發分貝: https://emamafinal.iriscouch.com/stadtrundgang/_design/nodes/_view/nodes的Android填充的ListView的片段從JSON

我發現這個教程,完全符合我的需求: http://www.learn2crack.com/2013/11/listview-from-json-example.html

只是有兩個問題: - 我需要在我的片段中的ListView,我不能在onPreExeute()方法中調用「MainActivity.this」。 - 我的第二個問題是,我得到這個錯誤: org.json.JSONException:對於行

在這裏沒有價值的代碼在我的片段:

ListView list; 
TextView name; 
TextView comment; 
TextView lat; 
Button Btngetdata; 

ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>(); 
//URL to get JSON Array 
private static String url = "https://emamafinal.iriscouch.com/stadtrundgang/_design/nodes/_view/nodes"; 

//JSON Node Names 
private static final String TAG_ROWS = "rows"; 
private static final String TAG_NAME = "name"; 
private static final String TAG_COMMENT = "comment"; 
private static final String TAG_LAT = "latitude"; 
JSONArray android = null; 

View rootView; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    rootView = inflater.inflate(R.layout.list_layout, container,false); 

    oslist = new ArrayList<HashMap<String, String>>(); 
    Btngetdata = (Button)rootView.findViewById(R.id.getdata); 

    Btngetdata.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      new JSONParse().execute(); 
     } 
    }); 

    return rootView; 
} 

private class JSONParse extends AsyncTask<String, String, JSONObject> { 
    private ProgressDialog pDialog; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     name = (TextView)rootView.findViewById(R.id.name); 
     comment = (TextView)rootView.findViewById(R.id.comment); 
     lat = (TextView)rootView.findViewById(R.id.lat); 
     pDialog = new ProgressDialog(MainActivity.this); 
     pDialog.setMessage("Getting Data ..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 
    @Override 
    protected JSONObject doInBackground(String... args) { 
     JSONParser jParser = new JSONParser(); 
     // Getting JSON from URL 
     JSONObject json = jParser.getJSONFromUrl(url); 
     return json; 
    } 
    @Override 
    protected void onPostExecute(JSONObject json) { 
     pDialog.dismiss(); 
     try { 
      // Getting JSON Array from URL 
      android = json.getJSONArray(TAG_ROWS); 
      for(int i = 0; i < android.length(); i++){ 
       JSONObject c = android.getJSONObject(i); 
       // Storing JSON item in a Variable 
       String name = c.getString(TAG_NAME); 
       String comment = c.getString(TAG_COMMENT); 
       String lat = c.getString(TAG_LAT); 
       // Adding value HashMap key => value 
       HashMap<String, String> map = new HashMap<String, String>(); 
       map.put(TAG_NAME, name); 
       map.put(TAG_COMMENT, comment); 
       map.put(TAG_LAT, lat); 
       oslist.add(map); 
       list=(ListView)rootView.findViewById(R.id.list); 
       ListAdapter adapter = new SimpleAdapter(MainActivity.this, oslist, 
         R.layout.list_item, 
         new String[] { TAG_NAME,TAG_COMMENT, TAG_LAT }, new int[] { 
         R.id.name,R.id.comment, R.id.lat}); 
       list.setAdapter(adapter); 
       list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, 
              int position, long id) { 
         Toast.makeText(MainActivity.this, "You Clicked at "+oslist.get(+position).get("name"), Toast.LENGTH_SHORT).show(); 
        } 
       }); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

}

在此先感謝您的任何提示。

回答

0

你應該該行,而不是在MainActivity.this使用getActivity()

ListAdapter adapter = new SimpleAdapter(MainActivity.this, oslist, 
         R.layout.list_item, ... 

ListAdapter adapter = new SimpleAdapter(getActivity(), oslist, 
         R.layout.list_item, .... 

更正:將所有MainActivity.thisgetActivity()