1

JSON を logcat に出力しているので、それが機能していることを確認でき、JSON 文字列の途中で出力が停止します。誰かが間違っていることを手伝ってくれますか? また、特定の文字列を見つけるために JSON をループする必要があります。

LOGCAT SNIPET:(かなり長いので、最後の部分を追加しただけです)

07-02 20:08:19.878: D/TAG_LOCATIONS(4597): },
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): {
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): "price_medium": "",
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): "id": "295",
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): "details": "",
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): "price_large": "",
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): "item_name": "Wheat Thins Toasted Chips",
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): "special_end": "",
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): "special_start": "",
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): "section_id": "3",
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): "special": false,
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): "price_small": "$0.85",
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): "location_id": "1"
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): },
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): {
07-02 20:08:19.878: D/TAG_LOCATIONS(4597): "pric
07-02 20:08:19.888: W/System.err(4597): org.json.JSONException: No value for id
07-02 20:08:19.908: W/System.err(4597):     at org.json.JSONObject.get(JSONObject.java:354)        
07-02 20:08:19.908: W/System.err(4597):     at org.json.JSONObject.getString(JSONObject.java:510)
07-02 20:08:19.908: W/System.err(4597):     at com.example.androidtablayout.FoodMenuList.onCreate(FoodMenuList.java:87)
07-02 20:08:19.908: W/System.err(4597):     at android.app.Activity.performCreate(Activity.java:5104)
07-02 20:08:19.918: W/System.err(4597):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
07-02 20:08:19.918: W/System.err(4597):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
07-02 20:08:19.918: W/System.err(4597):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
07-02 20:08:19.918: W/System.err(4597):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-02 20:08:19.918: W/System.err(4597):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-02 20:08:19.928: W/System.err(4597):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-02 20:08:19.939: W/System.err(4597):     at android.os.Looper.loop(Looper.java:137)
07-02 20:08:19.939: W/System.err(4597):     at android.app.ActivityThread.main(ActivityThread.java:5041)
07-02 20:08:19.948: W/System.err(4597):     at java.lang.reflect.Method.invokeNative(Native Method)
07-02 20:08:19.948: W/System.err(4597):     at java.lang.reflect.Method.invoke(Method.java:511)
07-02 20:08:19.958: W/System.err(4597):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-02 20:08:19.958: W/System.err(4597):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-02 20:08:19.958: W/System.err(4597):     at dalvik.system.NativeStart.main(Native Method)

クラスのスニペットは次のとおりです。

public class FoodMenuList extends Activity {

// url to make request for menus
private static String url =       "http://mavmate.atticdev.ist.unomaha.edu/api/v1/services/getMenus";

// JSON Node names
private static final String TAG_LOCATIONS = "locations";
private static final String TAG_LOCATION = "Location";
private static final String TAG_ID = "id";
private static final String TAG_NAME = "name";
private static final String TAG_BUILDING = "building";


// contacts JSONArray
JSONArray locations = null;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.foodmenulist_layout);   

    Bundle extras = getIntent().getExtras(); 
    String locationIDThing = extras.getString("locationID");

     // Hashmap for textView
    ArrayList<HashMap<String, String>> menuItemList = new ArrayList<HashMap<String, String>>();

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


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

    try {
        // Getting Array of locations
        locations = json.getJSONArray(TAG_LOCATIONS);

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

          Log.d("TAG_LOCATIONS", locations.toString(i));

            // Storing each json item in variable
            String id = c.getString(TAG_ID);
            String name = c.getString(TAG_NAME);
            String Location = c.getString(TAG_BUILDING);
            String building = c.getString(TAG_LOCATION);


            // 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_LOCATION, Location);
            map.put(TAG_BUILDING, building);
            //map.put(TAG_PHONE_MOBILE, mobile);

            // adding HashList to ArrayList
            menuItemList.add(map);
        }

        } catch (JSONException e) {
        e.printStackTrace();
    }

よろしくお願いします!

4

2 に答える 2

0

locations.toString(1)1 が集計である場所を使用する必要があります。

使用する:Log.d("TAG_LOCATIONS", locations.toString(1));

于 2013-07-02T20:50:13.927 に答える
0

あなたのログキャットには、次のような行があります。

07-02 20:08:19.888: W/System.err(4597): org.json.JSONException: ID の値がありません

この行のコードが例外を引き起こしているのではないかと強く疑っています。

// 各 json アイテムを変数に格納

文字列 ID = c.getString(TAG_ID);

JSONObject.getString(String)「キーに文字列値がない場合」に JSONException をスローします。したがって、 JSONObject には key の文字列値がないことを意味しますid。そのため、JSON データに key が含まれていることを確認してくださいid

回避策

キーに値がない場合は、optString(java.lang.String key, java.lang.String defaultValue)「キーに関連付けられたオプションの文字列を取得する」を使用してデフォルト値を設定するかhas(java.lang.String key)、特定のキーに直接アクセスする前に確認するために使用できます。

于 2015-04-10T06:12:05.500 に答える