Java 如何将项目从JSON文件显示到微调器
我试图在微调器上显示资产文件夹中json文件中的列表。我发现了一个教程,但我认为我的格式是错误的,请帮助! 此外,如果列表最多有300个项目,则此过程是否需要时间加载到微调器 这是我的主要活动Java 如何将项目从JSON文件显示到微调器,java,android,json,Java,Android,Json,我试图在微调器上显示资产文件夹中json文件中的列表。我发现了一个教程,但我认为我的格式是错误的,请帮助! 此外,如果列表最多有300个项目,则此过程是否需要时间加载到微调器 这是我的主要活动 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(saved
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner spinner = (Spinner)findViewById(R.id.spinner);
ArrayList<String> items = getFood("food.json");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_layout, R.id.txt, items);
spinner.setAdapter(adapter);
}
public ArrayList<String> getBanks(String fileName) {
JSONObject jsonObject = null;
try {
InputStream is = getResources().getAssets().open(fileName);
int size = is.available();
byte[] data = new byte[size];
is.read(data);
is.close();
String json = new String(data, "UTF-8");
jsonObject = new JSONObject(json);
if (jsonObject != null) {
for (int i = 0; i < jsonObject.length(); i++) {
JSONArray foodList = jsonObject.getJSONArray("data");
if(cList != null){
for(int j=0; i<cList.length(); j++){
JSONObject fList = foodList.getJSONObject(j);
String food_name = foodList.getString("name");
String food_code = foodList.getString("code");
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException je) {
je.printStackTrace();
}
return cList;
}
}
为什么不为下面的结构创建一个自定义类
{
"code": "11",
"id": 1,
"name": "Apple"
}
这样,您就可以使用GSON库使用TypeToken将json解析到一个列表中,并且很容易将其传递给适配器
你可以这样做
List<YourClass> yourClass = Gson().fromJson(json.toString(),new TypeToken<List<YourClass>>(){}.getType())
List yourClass=Gson().fromJson(json.toString(),new-TypeToken(){}.getType())
为什么不为以下结构创建一个自定义类
{
"code": "11",
"id": 1,
"name": "Apple"
}
这样,您就可以使用GSON库使用TypeToken将json解析到一个列表中,并且很容易将其传递给适配器
你可以这样做
List<YourClass> yourClass = Gson().fromJson(json.toString(),new TypeToken<List<YourClass>>(){}.getType())
List yourClass=Gson().fromJson(json.toString(),new-TypeToken(){}.getType())
用于此任务(大小非常小,比其他库(如Gson、Jasckson core…)更快)
考虑到性能,它是比其他方法更好的选择
现在让我们来看解决方案 首先将jackson jr库导入到您的android项目中
implementation 'com.fasterxml.jackson.jr:jackson-jr-objects:2.10.0'
然后像这样创建两个模型类
public class Food {
private String status;
private List<Data> data;
private String message;
public Food() {
}
//getters and setters
}
public class Data {
private String code;
private int id;
private String name;
public Data() {
}
//getters and setters
}
import com.fasterxml.jackson.jr.ob.JSON;
private List<Data> getData() {
List<Data> data = null;
try {
// give your json file as a inputstream
//InputStream is = getResources().openRawResource(R.raw.food);
InputStream is = getResources().getAssets().open("food.json");
Food bean = JSON.std.beanFrom(Food.class, is);
data = bean.getData();
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
下面是getFoodNamesFromData()
方法
private List<String> getFoodNamesFromData(List<Data> dataList) {
List<String> foodNames = new ArrayList<>();
for(Data data :dataList){
String foodName = data.getName();
foodNames.add(foodName);
}
return foodNames;
}
私有列表getFoodNamesFromData(列表数据列表){
List foodNames=new ArrayList();
用于(数据:数据列表){
字符串foodName=data.getName();
添加(foodName);
}
返回食物名称;
}
快乐编码 对于此任务使用(大小非常小,比其他库(如Gson、Jasckson core…)更快)
考虑到性能,它是比其他方法更好的选择
现在让我们来看解决方案 首先将jackson jr库导入到您的android项目中
implementation 'com.fasterxml.jackson.jr:jackson-jr-objects:2.10.0'
然后像这样创建两个模型类
public class Food {
private String status;
private List<Data> data;
private String message;
public Food() {
}
//getters and setters
}
public class Data {
private String code;
private int id;
private String name;
public Data() {
}
//getters and setters
}
import com.fasterxml.jackson.jr.ob.JSON;
private List<Data> getData() {
List<Data> data = null;
try {
// give your json file as a inputstream
//InputStream is = getResources().openRawResource(R.raw.food);
InputStream is = getResources().getAssets().open("food.json");
Food bean = JSON.std.beanFrom(Food.class, is);
data = bean.getData();
} catch (IOException e) {
e.printStackTrace();
}
return data;
}
下面是getFoodNamesFromData()
方法
private List<String> getFoodNamesFromData(List<Data> dataList) {
List<String> foodNames = new ArrayList<>();
for(Data data :dataList){
String foodName = data.getName();
foodNames.add(foodName);
}
return foodNames;
}
私有列表getFoodNamesFromData(列表数据列表){
List foodNames=new ArrayList();
用于(数据:数据列表){
字符串foodName=data.getName();
添加(foodName);
}
返回食物名称;
}
快乐编码 请问我如何转换成一门课?这个json文件是为一个项目提供的,我不知道怎么做。你可以这样做:``公共类YourClassName{@SerializedName(“code”)公共字符串code;@SerializedName(“id”)公共整数id;@SerializedName(“name”)公共字符串name;}```然后您可以使用它从提供的json文件中获取json列表。请问如何转换为类?这个json文件是为一个项目提供的,我不知道怎么做。你可以这样做:``公共类YourClassName{@SerializedName(“code”)公共字符串code;@SerializedName(“id”)公共整数id;@SerializedName(“name”)公共字符串name;}```然后您可以使用它从提供的json文件中获取json列表。我用您的food.json文件尝试了上面的代码,它对我来说运行良好。如果您遇到任何问题,请随时在此发表评论。谢谢您的回复,我对R.raw.food有疑问。raw无法识别。我将Json文件作为raw文件提供。您可以提供自己的输入流。尝试
InputStream is=getResources().getAssets().open(“food.json”)代码>是的,这很有效!而且速度相当快。我如何只将食物名称传递给spinnerhi,我遇到了一个小问题,我正在尝试使用一种方法来获取代码。该方法仅在单击时获取字符串的值。但是foodlist一直抛出空指针,例外的是我用你的food.json文件尝试了上面的代码,对我来说效果很好。如果您遇到任何问题,请随时在此发表评论。谢谢您的回复,我对R.raw.food有疑问。raw无法识别。我将Json文件作为raw文件提供。您可以提供自己的输入流。尝试InputStream is=getResources().getAssets().open(“food.json”)代码>是的,这很有效!而且速度相当快。我如何只将食物名称传递给spinnerhi,我遇到了一个小问题,我正在尝试使用一种方法来获取代码。该方法仅在单击时获取字符串的值。但foodlist不断抛出空指针异常