我正在编写一个 Android 应用程序,它显示一个用两行 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);
}
});
}
}
第二个活动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);
}
}
名称和类型字段都填写在第一页中。我需要将其余的信息“材料”-“外壳涂层”传递给我单击的哪个项目,并将其作为数组传递给下一个活动。
日志错误:
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
关于如何轻松做到这一点的任何想法?谢谢。