-1

我正在尝试将数据解析到android中的列表视图中

JSON:: http://54.218.73.244:7000/

它有一个 JSON 输出:: [{"restaurantID":1,"restaurantNAME":"CopperChimney"},{"restaurantID":2,"restaurantNAME":"Aroy"},{"restaurantID":3,"restaurantNAME":"MarkBoulevard"}]

  • 我正在尝试CopperChimney, Aroy, MarkBoulevard在列表视图中显示
  • 我想出了一些小部分,但有人可以帮我填写 代码的AndroidJSONParsingActivity.java部分,该部分涉及将数据放入集合中并显示它

有任何想法吗 ?


JSON解析器

public class JSONParser {

    static InputStream is = null;
    static JSONArray jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    public JSONArray getJSONFromUrl(String url) {

        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();           

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONArray(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

项目.java

public class Item{
    private String Name;

    public Item(String name){
        this.Name = name;
    }
    public String getName(){
        return Name;
    }
}

ListAdapter.java

public class ListAdapter extends ArrayAdapter<Item> {
    private List<Item> items;
    public ListAdapter(Context context, int resource, List<Item> items) {
        super(context, resource, items);
        this.items = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        TextView tt = null;

        if (v == null) {
            LayoutInflater vi;
            vi = LayoutInflater.from(getContext());
            v = vi.inflate(R.layout.itemlistrow, null);
            tt = (TextView) v.findViewById(R.id.RestaurantNameID);
        }

        Item p = items.get(position);
        if (p != null) {
            if (tt != null) {
                tt.setText(""+p.getName());
            }

        }
        return v;
    }
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ListView
        android:id="@+id/listViewID"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" 
        android:layout_gravity="center">
    </ListView>

</LinearLayout>

itemlistrow.xml

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_height="wrap_content" android:orientation="vertical"
             android:layout_width="fill_parent">

    <TableRow android:layout_width="fill_parent"
              android:id="@+id/TableRow01"
              android:layout_height="wrap_content">

        <TextView
                android:id="@+id/RestaurantNameID"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="name" android:textStyle="bold"
                android:gravity="left"
                android:layout_weight="1"
                android:typeface="monospace"
                android:height="40sp"/>
    </TableRow>
</TableLayout>

AndroidJSONParsingActivity.java

public class AndroidJSONParsingActivity extends Activity {


    private static String url = "http://54.218.73.244:7000/";

        //
        //
        //
        //
              /------ CODE -Trying to ADD ------ /
        //
        //
}

我为 AndroidJSONParsingActivity.java 尝试的代码

public class AndroidJSONParsingActivity extends Activity {

    // url to make request
    private static String url = "http://54.218.73.244:7000/";
    List<Item> yourData = new ArrayList<Item>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Creating JSON Parser instance
        JSONParser jParser = new JSONParser();

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

        try {
            for (int i = 0; i < json.length(); i++) {
                JSONObject c = json.getJSONObject(i);

                // Storing each json item in variable
                String NAME=c.getString("restaurantNAME");

                yourData.add(new Item(NAME));
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        ListView yourListView = (ListView) findViewById(R.id.listViewID);
        ListAdapter customAdapter = new ListAdapter(this, R.layout.itemlistrow, yourData);
        yourListView.setAdapter(customAdapter);
        yourListView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // When clicked, show a toast with the TextView text
                if(position == 0)
                {
                    //code specific to first list item    
                    Intent myIntent = new Intent(AndroidJSONParsingActivity.this,Employee1.class);
                    startActivity(myIntent);
                }else if(position == 1)
                {
                    Intent myIntent = new Intent(AndroidJSONParsingActivity.this,Employee2.class);
                    startActivity(myIntent);                    
                }

            }
        });
    }
 }
4

1 回答 1

-1
public class AndroidJSONParsingActivity extends ListActivity {
ArrayList <Item> list = new ArraList <Item>();
    @Override
    public void onStart() {
        super.onStart();
        new GetHttpData().execute();
    }
    private class GetHttpData extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... params) {
        private static String url = "http://54.218.73.244:7000/";
        JSONArray jArray = getJSONFromUrl(url);
        int len = jArray.length();
        for(int i = 0; i < len; i++) {
            JSONObject restaurant = jArray.getJSONObject(i);
            list.add(new Item(restaurant.getString("restaurantNAME"));
       } 
       return null;
    }
    @Override
    protected void onPostExecute(Void result) {
        setListAdapter(new ListAdapter(AndroidJSONParsingActivity.this, android.R.layout.simple_list_item_1, list));
   }
}
}

这只是解析它的一种方法,您还应该在单独的线程中执行所有 HttpRequests 和 JSON 解析,请参阅http://developer.android.com/reference/android/os/AsyncTask.html

已编辑: 您还可以查看此示例

于 2013-08-05T10:42:49.857 回答