【发布时间】:2017-07-17 00:15:09
【问题描述】:
我是安卓开发的新手。我在android studio 工作。我有一些json 文件放在我的assets 文件夹中。现在我想将 json 文件中的数据填充到微调器中。我确实知道如何使用微调器并使用web service 填充数据,但我不知道如何使用json 文件。此外,我找不到任何教程,但我确实找到了how to read data from json file,但我想在微调器中填充它。以下是我的json 文件数据之一。
ref.json
{"reference":
[
{"ref_no":"11111111111111","Name":"Faisal"},
{"ref_no":"22222222222222","Name":"Salman"},
{"ref_no":"33333333333333","Name":"Asim"},
{"ref_no":"44444444444444","Name":"Asad"},
{"ref_no":"55555555555555","Name":"Mateen"},
{"ref_no":"66666666666666","Name":"Omar"},
{"ref_no":"77777777777777","Name":"Usama"}
]}
下面是spinner的布局
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/dd_ref"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
我想从 JSON 文件中获取 ref_no 并将它们显示到微调器中。
更新 1
阅读答案和建议后,我做了以下
ArrayList<String> refList;
public static final String LOG_TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
loadData();
} catch (JSONException e) {
e.printStackTrace();
}
}
public void loadData() throws JSONException {
JSONArray jsonArray;
JSONObject jobj;
try
{
jobj = new JSONObject(loadJSONFromAssest());
jsonArray = jobj.getJSONArray("reference");
for(int i = 0; i<jsonArray.length();i++)
{
jobj = jsonArray.getJSONObject(i);
Log.d("Details-->", jobj.getString("ref_no"));
String ref = jobj.getString("ref_no");
refList.add(ref);
}
} catch (JSONException e)
{
e.printStackTrace();
}
dd_ref.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item, refList));
dd_ref.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
refr_no = String.valueOf(refList.get(position));
Log.i(LOG_TAG,refr_no);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
public String loadJSONFromAssest() {
String json = " ";
try{
InputStream is = getAssets().open("ref.json");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String(buffer, "UTF-8");
} catch (IOException e) {
e.printStackTrace();
return null;
}
return json;
}
当我运行应用程序时,我收到以下错误
FATAL EXCEPTION: main
Process: com.example.accurat.application, PID: 7336
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.accurat.application/com.example.accurat.application.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2442)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2506)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5491)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.util.ArrayList.add(java.lang.Object)' on a null object reference
at com.example.accurat.application.MainActivity.loadData(MainActivity.java:59)
at com.example.accurat.application.MainActivity.onCreate(MainActivity.java:37)
at android.app.Activity.performCreate(Activity.java:6270)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2395)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2506)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5491)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
下面是我调试的图像
错误位于refList.add(ref);,因为它告诉refList 为空。
我坚持下去,不知道该怎么做。
任何帮助将不胜感激。
【问题讨论】:
-
@Skizo-ozᴉʞS 感谢您的评论,但它使用 URL,我不想使用网络服务,我只想使用本地 json 文件。
标签: android json android-studio