我正在編寫一個Android應用程序,該應用程序顯示一個textview動態填充兩行JSON文件。查找JSON數組的列表項索引
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="7dp"
>
<TextView
android:id="@+id/item_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:padding="2dp"
android:textSize="20dp" />
<TextView
android:id="@+id/item_type"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="2dp"
android:textSize="13dp" />
</LinearLayout>
當任何列表項被點擊,我需要的是指數的JSON陣列中的其他內容,並傳遞到下一個活動是要顯示的陣列。
這裏的第一個活動的Java:
public class TutListActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String sJSON = "";
if(sJSON == ""){
InputStream is = this.getResources().openRawResource(R.raw.data);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String readLine = null;
StringBuilder sb = new StringBuilder();
try {
while ((readLine = br.readLine()) != null) {
sb.append(readLine);
}
sJSON = sb.toString();
is.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
String name = "";
String type = "";
String material = "";
String welding = "";
String primarybase = "";
String tipmaterial = "";
String shape = "";
String shellcoating = "";
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
try{
JSONObject jObject = new JSONObject(sJSON);
JSONArray pluginfo = jObject.getJSONArray("parts");
for(int i=0; i < pluginfo.length(); i++) {
JSONObject array = pluginfo.getJSONObject(i);
name = array.getString("name");
type = array.getString("type");
material = array.getString("material");
welding = array.getString("welding");
primarybase = array.getString("primarybase");
tipmaterial = array.getString("tipmaterial");
shape = array.getString("shape");
shellcoating = array.getString("shellcoating");
HashMap<String, String> list = new HashMap<String, String>();
JSONObject e = pluginfo.getJSONObject(i);
list.put("id", String.valueOf(i));
list.put("name", "Plug name: " + e.getString("name"));
list.put("type", "Type: " + e.getString("type"));
mylist.add(list);
}
}
catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.list_item,
new String[] { "name", "type" },
new int[] { R.id.item_name, R.id.item_type });
setListAdapter(adapter);
final Intent intent1 = new Intent(getApplicationContext(), TutViewerActivity.class);
intent1.putExtra("name", name);
intent1.putExtra("type", type);
intent1.putExtra("material", material);
intent1.putExtra("welding", welding);
intent1.putExtra("primarybase", primarybase);
intent1.putExtra("tipmaterial", tipmaterial);
intent1.putExtra("shape", shape);
intent1.putExtra("shellcoating", shellcoating);
final ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
startActivity(intent1);
}
});
}
}
,第2活動的Java:
public class TutViewerActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
Bundle extras = getIntent().getExtras();
String name = extras.getString("name");
String type = extras.getString("type");
String material = extras.getString("material");
String welding = extras.getString("welding");
String primarybase = extras.getString("primarybase");
String tipmaterial = extras.getString("tipmaterial");
String shape = extras.getString("shape");
String shellcoating = extras.getString("shellcoating");
TextView itemName = (TextView)findViewById(R.id.item_name);
TextView itemType = (TextView)findViewById(R.id.item_type);
TextView itemMaterial = (TextView)findViewById(R.id.item_material);
TextView itemWelding = (TextView)findViewById(R.id.item_welding);
TextView itemPrimarybase = (TextView)findViewById(R.id.item_primarybase);
TextView itemTipmaterial = (TextView)findViewById(R.id.item_tipmaterial);
TextView itemShape = (TextView)findViewById(R.id.item_shape);
TextView itemShellcoating = (TextView)findViewById(R.id.item_shellcoating);
itemName.setText(name);
itemType.setText(type);
itemMaterial.setText(material);
itemWelding.setText(welding);
itemPrimarybase.setText(primarybase);
itemTipmaterial.setText(tipmaterial);
itemShape.setText(shape);
itemShellcoating.setText(shellcoating);
}
}
名稱和類型的字段都填充到第一頁。我需要獲取其餘的信息「材料」 - 「shellcoating」傳遞給我點擊的項目,並將其作爲數組傳遞給下一個活動。
的logcat的錯誤:
11-06 00:42:07.585: E/AndroidRuntime(3122): FATAL EXCEPTION: main
11-06 00:42:07.585: E/AndroidRuntime(3122): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mamlambo.tutorial.tutlist/com.mamlambo.tutorial.tutlist.TutViewerActivity}: java.lang.NullPointerException
11-06 00:42:07.585: E/AndroidRuntime(3122): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
11-06 00:42:07.585: E/AndroidRuntime(3122): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
11-06 00:42:07.585: E/AndroidRuntime(3122): at android.app.ActivityThread.access$600(ActivityThread.java:130)
11-06 00:42:07.585: E/AndroidRuntime(3122): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
11-06 00:42:07.585: E/AndroidRuntime(3122): at android.os.Handler.dispatchMessage(Handler.java:99)
11-06 00:42:07.585: E/AndroidRuntime(3122): at android.os.Looper.loop(Looper.java:137)
11-06 00:42:07.585: E/AndroidRuntime(3122): at android.app.ActivityThread.main(ActivityThread.java:4745)
11-06 00:42:07.585: E/AndroidRuntime(3122): at java.lang.reflect.Method.invokeNative(Native Method)
11-06 00:42:07.585: E/AndroidRuntime(3122): at java.lang.reflect.Method.invoke(Method.java:511)
11-06 00:42:07.585: E/AndroidRuntime(3122): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-06 00:42:07.585: E/AndroidRuntime(3122): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-06 00:42:07.585: E/AndroidRuntime(3122): at dalvik.system.NativeStart.main(Native Method)
11-06 00:42:07.585: E/AndroidRuntime(3122): Caused by: java.lang.NullPointerException
11-06 00:42:07.585: E/AndroidRuntime(3122): at com.mamlambo.tutorial.tutlist.TutViewerActivity.onCreate(TutViewerActivity.java:62)
11-06 00:42:07.585: E/AndroidRuntime(3122): at android.app.Activity.performCreate(Activity.java:5008)
11-06 00:42:07.585: E/AndroidRuntime(3122): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
11-06 00:42:07.585: E/AndroidRuntime(3122): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
11-06 00:42:07.585: E/AndroidRuntime(3122): ... 11 more
如何做到這一點很容易有什麼想法?謝謝。
你是如何獲得這個'JSONArray',當您檢索'JSONArray'你可以同時解析,然後通過'意圖'? – jnthnjns
@Asok我將JSON文件轉換爲字符串。然後進入HashMap,使用listAdapter根據其ID來填充兩個不同的文本視圖。 –