我目前正在开发一个物理应用程序,该应用程序应该显示公式列表,甚至可以解决其中的一些问题(唯一的问题是ListView)
ListView
这是我的主要布局
<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="wrap_content" android:measureWithLargestChild="false" android:orientation="vertical" tools:context=".CatList" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/titlebar" > <TextView android:id="@+id/Title1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/app_name" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#ff1c00" android:textIsSelectable="false" /> </RelativeLayout> <ListView android:id="@+id/listFormulas" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView> </LinearLayout>
这是我的主要活动
package com.wildsushii.quickphysics; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import org.json.JSONException; import org.json.JSONObject; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.content.res.AssetManager; import android.view.Menu; import android.widget.ListView; public class CatList extends Activity { public static String AssetJSONFile (String filename, Context context) throws IOException { AssetManager manager = context.getAssets(); InputStream file = manager.open(filename); byte[] formArray = new byte[file.available()]; file.read(formArray); file.close(); return new String(formArray); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cat_list); ListView categoriesL = (ListView)findViewById(R.id.listFormulas); ArrayList<HashMap<String, String>> formList = new ArrayList<HashMap<String, String>>(); Context context = null; try { String jsonLocation = AssetJSONFile("formules.json", context); JSONObject formArray = (new JSONObject()).getJSONObject("formules"); String formule = formArray.getString("formule"); String url = formArray.getString("url"); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } //My problem is here!! } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.cat_list, menu); return true; } }
我实际上知道我可以在不使用JSON的情况下做到这一点,但我需要更多练习来解析JSON。顺便说一下,这是JSON
{ "formules": [ { "formule": "Linear Motion", "url": "qp1" }, { "formule": "Constant Acceleration Motion", "url": "qp2" }, { "formule": "Projectile Motion", "url": "qp3" }, { "formule": "Force", "url": "qp4" }, { "formule": "Work, Power, Energy", "url": "qp5" }, { "formule": "Rotary Motion", "url": "qp6" }, { "formule": "Harmonic Motion", "url": "qp7" }, { "formule": "Gravity", "url": "qp8" }, { "formule": "Lateral and Longitudinal Waves", "url": "qp9" }, { "formule": "Sound Waves", "url": "qp10" }, { "formule": "Electrostatics", "url": "qp11" }, { "formule": "Direct Current", "url": "qp12" }, { "formule": "Magnetic Field", "url": "qp13" }, { "formule": "Alternating Current", "url": "qp14" }, { "formule": "Thermodynamics", "url": "qp15" }, { "formule": "Hydrogen Atom", "url": "qp16" }, { "formule": "Optics", "url": "qp17" }, { "formule": "Modern Physics", "url": "qp18" }, { "formule": "Hydrostatics", "url": "qp19" }, { "formule": "Astronomy", "url": "qp20" } ] }
我尝试了很多事情,甚至删除了整个项目以制作一个新的:(
{ // json object node "formules": [ // json array formules { // json object "formule": "Linear Motion", // string "url": "qp1" }
你在做什么
Context context = null; // context is null try { String jsonLocation = AssetJSONFile("formules.json", context);
因此更改为
try { String jsonLocation = AssetJSONFile("formules.json", CatList.this);
解析
我相信你是从assests文件夹中获取字符串的。
try { String jsonLocation = AssetJSONFile("formules.json", context); JSONObject jsonobject = new JSONObject(jsonLocation); JSONArray jarray = (JSONArray) jsonobject.getJSONArray("formules"); for(int i=0;i<jarray.length();i++) { JSONObject jb =(JSONObject) jarray.get(i); String formula = jb.getString("formule"); String url = jb.getString("url"); } } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); }