首页 > 解决方案 > 适用于 Android 的 JSON(Java)

问题描述

JSON 1

{"languages": [
{"name": "DE","flagPath": "flag_de.png"},

{"name": "ENG","flagPath": "flag_engl.png"},

{"name": "ESP","flagPath": "flag_esp.png"},

{"name": "FR","flagPath": "flag_france.png"},

{"name": "IT","flagPath": "flag_ital.png"}
]}

此代码适用于 json 1

public class MainActivity extends AppCompatActivity {
                         String TAG = MainActivity.class.getSimpleName();
                         Context context;
                         GridView gridView;       
                         @Override
                         protected void onCreate(Bundle savedInstanceState) {
                             super.onCreate(savedInstanceState);
                             setContentView(R.layout.activity_main);        
                            try {
                                 context = this;
                                 Gson gson = new Gson();
                                 JsonModel model = gson.fromJson(loadJSONFromAssets(), JsonModel.class);         
                                 gridView = (GridView) findViewById(R.id.grid_view);
                                 CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), 
                                 model.getItems());
                                 gridView.setAdapter(customAdapter);        
                            } catch (Exception ex) {
                                 Log.e(TAG, ex.getMessage());
                             }
                         }         
                         public String loadJSONFromAssets() {
                             String json = null;
                             try {
                                InputStream inputStream = context.getAssets().open("languages.json");
                                int size = inputStream.available();
                                byte[] buffer = new byte[size];
                                 inputStream.read(buffer);
                                 inputStream.close();
                                 json = new String(buffer, "UTF-8");
                             } catch (IOException e) {
                                e.printStackTrace();
                            }         
                             return  json;}} 

  

此代码适用于 json 1

    public class CustomAdapter extends BaseAdapter {
        String TAG = CustomAdapter.class.getSimpleName();
    
        Context context;
        ArrayList<Language> items;
        LayoutInflater inflater;
    
        public CustomAdapter(Context context, ArrayList<Language> data) {
            this.context = context;
            this.items = data;
            inflater = (LayoutInflater.from(context));
        }
    
        @Override
        public int getCount() {
            return items.size();
        }
    
        @Override
        public Object getItem(int i) {
            return null;
        }
    
        @Override
        public long getItemId(int i) {
            return 0;
        }
    
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            view = inflater.inflate(R.layout.grd_view_item, null);
    
            TextView txtName = (TextView) view.findViewById(R.id.type);
            ImageView imgPic = (ImageView) view.findViewById(R.id.image);
    
            txtName.setText(items.get(i).getName());
            loadImage(imgPic, items.get(i).getFlagPath());
    
            return view;
        }
    
        InputStream inputstream;
        Drawable drawable;
        private void loadImage(ImageView imageView, String imageName) {
            try {
                inputstream = context.getAssets().open("images/" + imageName);
                drawable = Drawable.createFromStream(inputstream, null);
                imageView.setImageDrawable(drawable);
            } catch (Exception ex) {
                Log.e(TAG, ex.getMessage());
            }
        }
    }

现在我遇到了这个 JSON json 2 的问题

{
     "languages": {
                    "1": {
                      "flagPath": "de.jpg",
                      "name": "DE"
                    },
                    "2": {
                      "flagPath": "engneu.jpg",
                      "name": "ENG"
                    },
                    "3": {
                      "flagPath": "France.png",
                      "name": "FR"
                    },
                    "5": {
                      "flagPath": "Flagge_Italien.jpg",
                      "name": "IT"
                    }
                  }
                }

如何更改 json2 的代码?

标签: androidjson

解决方案


尝试这个..

1. 创建模型

1.1。语言.java

import com.google.gson.annotations.SerializedName;

public class Language {

   @SerializedName("name")
   String name;

   @SerializedName("flagPath")
   String flagPath;
}

1.2. JsonModel.java

import com.google.gson.annotations.SerializedName;

import java.util.ArrayList;

public class JsonModel {

   @SerializedName("languages")
   ArrayList<Language> languages;

}

2.在assets文件夹中添加你的json文件

在此处输入图像描述

3.将json绑定到MainActivity.java

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    try {
        JsonModel model = new Gson().fromJson(loadJSONFromAssets(), JsonModel.class);
        gridView = (GridView) findViewById(R.id.grid_view)
        CustomAdapter customAdapter = new CustomAdapter(this, model.languages);
        gridView.setAdapter(customAdapter);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public String loadJSONFromAssets() {
    String json = null;
    try {
        InputStream inputStream = getAssets().open("languages.json");
        int size = inputStream.available();
        byte[] buffer = new byte[size];
        inputStream.read(buffer);
        inputStream.close();
        json = new String(buffer, "UTF-8");
    } catch (IOException e) {
        e.printStackTrace();
    }
    return json;
}
}

如果问题仍然存在,则可能是您的 gridview 适配器存在问题。

更新的答案

@Smivik 在此处查看更新的代码更改https://gist.github.com/SilambarasanPoonguti/4344ff758cf8ffd0be0fd80ba1837bcf


推荐阅读