package com.example.root.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import org.json.JSONArray;
import org.json.JSONException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
Button btnCommercial;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView list11 = (ListView) findViewById(R.id.listView1);
ArrayList<String> authorities = getAuthorities("AuthorityList.json");
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, authorities);
btnCommercial = (Button) findViewById(R.id.btnCommercial);
btnCommercial.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
list11.setAdapter(adapter);
}
});
}
private ArrayList<String> getAuthorities(String fileName) {
JSONArray jsonArray = null;
ArrayList<String> AuthList = new ArrayList<String>();
try {
InputStream inputStream = getAssets().open(fileName); //open the inputStream to the file
int size = inputStream.available(); //size of the entire json object
byte[] data = new byte[size]; //array that will store all the data
inputStream.read(data); //reading data into the array for the file
inputStream.close(); //close the input steam
String json = new String(data, "UTF-8");
jsonArray = new JSONArray(json);
if (jsonArray != null) {
for (int i = 0; i < jsonArray.length(); i++) {
AuthList.add(jsonArray.getJSONObject(i).getString("description"));
}
}
} catch (IOException e) {
e.printStackTrace(); return null;
} catch (JSONException je) {
je.printStackTrace(); return null;
}
return AuthList;
}
}
我想创建一个下拉菜单,其中包含我项目中的JSON文件中的数据。我正在努力通过soapui访问我的远程服务器,所以我将.json文件复制到资产下的项目中。代码没有给我一个错误,但我的应用程序不会运行。我认为问题是我如何打开.json文件或如何访问对象。
提前谢谢。
答案 0 :(得分:0)
您可以尝试以下函数来获取JSON文件的String。
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);
}
然后解析它。 如果您的数据足够大,我建议使用一些库(如LoganSquare或Jackson)来解析JSON数据。
答案 1 :(得分:0)
您必须确保从Json文件中正确读取您的应用。以下是工作代码:
package com.example.a386019.spinnerjson;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
public class SpinnerActivity extends AppCompatActivity {
String json_string;
JSONObject jsonObj;
JSONArray jsonArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spinner);
json_string= loadJSONFromAsset();
ArrayList<String> messages = new ArrayList<String>();
{
try {
jsonObj =new JSONObject(json_string);
jsonArray =jsonObj.getJSONArray("formules");
String formule,url;
for (int i = 0; i < jsonArray.length(); i++){
JSONObject jObj = jsonArray.getJSONObject(i);
formule= jObj.getString("formule");
messages.add(formule);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_dropdown_item, messages);
Spinner spinner = (Spinner)findViewById(R.id.spinner);
spinner.setAdapter(adapter);
}
public String loadJSONFromAsset() {
String json = null;
try {
InputStream is = getAssets().open("formules.json");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String(buffer, "UTF-8");
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return json;
}
}
和布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.a386019.spinnerjson.SpinnerActivity">
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/spinner"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="42dp" />
</RelativeLayout>
ASSETS文件夹中的和json文件:
{
"formules": [
{
"formule": "Linear Motion",
},
{
"formule": "Constant Acceleration Motion",
},
{
"formule": "Projectile Motion",
},
{
"formule": "Force",
},
{
"formule": "Work, Power, Energy",
},
]
}