如何显示从json检索的数据

时间:2018-01-09 15:42:13

标签: java android json

我试图使用ArrayAdapter将从json数组中检索到的数据显示到我的gridview中,但每当我尝试下面的代码时,它会出现错误java.lang.NullPointerException:尝试调用虚方法'void android.widget.ArrayAdapter .add(java.lang.Object)'在null对象引用上,所以请告诉我我做错了什么

EmojiAdapter.java

public class EmojiAdapter extends ArrayAdapter<EmojiModel> {

private Context mContext;
Typeface typeface;
ArrayList<EmojiModel> list;

public EmojiAdapter(@NonNull Context context, int resource) {
    super(context, resource);
}


@Override
public int getCount() {
    return list.size();
}


@Override
public long getItemId(int position) {
    return position;
}


@Override
public View getView(final int position, View convertView, ViewGroup parent) 
{
    LayoutInflater inflater = 
(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.smiles_items_layout, null);

    ImageView imageView = 
(ImageView)convertView.findViewById(R.id.smile_image_view);

 imageView.setImageResource(Integer.parseInt(list.get(position)
.getEmojiFile()));

    return convertView;
    }
}

StreamActivity.java

   Communicator.getInstance().on("subscribe start", new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            try{

            JSONDictionary response = (JSONDictionary) args[0];
            String str = response.get("emojiPack").toString();
                JSONArray emojies = new JSONArray(str);

            for(int i=0;i<emojies.length();i++)
            {
                    JSONObject response2 = (JSONObject) 
            emojies.getJSONObject(i);
                    EmojiModel toAdd = new EmojiModel((String) 
            response2.get("urlFile"));
                    JSONDictionary t = 
            JSONDictionary.fromString(response2.toString());
                    toAdd.init(t);
           //The error appears from the below code
               emojiAdapter.add(toAdd);

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

2 个答案:

答案 0 :(得分:1)

您似乎忘记了初始化ArrayList<EmojiModel> list。在构造函数中添加初始化:

public EmojiAdapter(@NonNull Context context, int resource) {
    super(context, resource);
    list = new ArrayList<EmojiModel>();
}

另外当你的emojiAdapter.add(toAdd);调用变量 emojiAdapter为空。

尝试回溯该变量初始化并初始化的位置,从Activity / Fragment传递变量时可能会出现问题。

答案 1 :(得分:0)

Private Sub OKCommandButton_Click()

With Me
Cells(.Tag, 1).Value = TextBox1.Value
Cells(.Tag, 2).Value = TextBox2.Value
Cells(.Tag, 3).Value = TextBox3.Value
End With

Unload UserForm1

End Sub

您正在获取Null指针异常,因为在适配器中您的列表未初始化。您已经通过构造函数将活动列表发送到适配器,并将初始化设置为此ArrayList<EmojiModel> list; public EmojiAdapter(@NonNull Context context, int resource,ArrayList<EmojiModel> list) { super(context, resource); this.list=list; this.mContext=context; } ,并且您的上下文之类的任何其他变量也未初始化,请使用this.list=list;

相关问题