简体   繁体   English

在列表视图中显示JSON数据

[英]Display json data in listview

I am trying to display data fetched from an api. 我正在尝试显示从api获取的数据。 I can display the data as a textview andin a log but I cannot get it to display as a list. 我可以将数据显示为文本视图并在日志中显示,但无法将其显示为列表。

I am getting an error " Cannot resolve constructor " 我收到一个错误“ Cannot resolve constructor

Error:(72, 68) error: no suitable constructor found for ArrayAdapter(<anonymous FutureCallback<JsonArray>>,int,ArrayList<String>) constructor ArrayAdapter.ArrayAdapter(Context,int,int) is not applicable

Here is the full error code 这是完整的错误代码

Error:(72, 68) error: no suitable constructor found for ArrayAdapter(<anonymous FutureCallback<JsonArray>>,int,ArrayList<String>) constructor ArrayAdapter.ArrayAdapter(Context,int,int) is not applicable (argument mismatch; <anonymous FutureCallback<JsonArray>> cannot be converted to Context) constructor ArrayAdapter.ArrayAdapter(Context,int,String[]) is not applicable (argument mismatch; <anonymous FutureCallback<JsonArray>> cannot be converted to Context) constructor ArrayAdapter.ArrayAdapter(Context,int,List<String>) is not applicable (argument mismatch; <anonymous FutureCallback<JsonArray>> cannot be converted to Context)

public class MainActivity extends AppCompatActivity {
ListView lView;
TextView tView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lView = (ListView) findViewById(R.id.lv);
    tView = (TextView) findViewById(R.id.textView);

    Ion.with(this).
            load("https://jsonplaceholder.typicode.com/users").
            asJsonArray().
            setCallback(
                    new FutureCallback<JsonArray>()
                    {
                        @Override
                        public void onCompleted(final Exception ex,
                                                final JsonArray array)
                        {
                            if(ex != null)
                            {
                                Toast.makeText(MainActivity.this,
                                        "Error: " + ex.getMessage(),
                                        Toast.LENGTH_LONG).show();
                            }
                            else
                            {
                                ArrayList<String> list = new ArrayList<String>();
                                for(final JsonElement element : array)
                                {
                                    final JsonObject  json;
                                    final JsonElement nameElement;
                                    final JsonElement usernameElement;
                                    final String      name;
                                    final String      username;
                                    json              = element.getAsJsonObject();
                                    nameElement       = json.get("name");
                                    usernameElement   = json.get("username");
                                    name              = nameElement.getAsString();
                                    username          = usernameElement.getAsString();

                                    Log.d("X",
                                            name + " -> " + username);
                                    list.add(name);
                                    list.add(username);
                                    tView.setText(name);
                                }
                                /*  
                              for (int i = 0; i < array.size(); i++) {
                                    list.add(array.get(i).toString());
                                }*/
                                ArrayAdapter<String> adapter = new ArrayAdapter<String>
                                        (this,android.R.layout.simple_list_item_1,list); //ERROR HERE
                                lView.setAdapter(adapter);
                            }

                        }

                    });

}

You have to pass a Context as the first parameter of the Adapter constructor. 您必须将Context作为Adapter构造函数的第一个参数传递。 You pass this , which is not a Context . 您通过了this ,这不是Context According to your code, MainActivity.this might work 根据您的代码MainActivity.this可能有效

Remove this in constructor and use MainActivity.this instead. 在构造函数中删除this ,改用MainActivity.this this in your case is instance of anonymous inner class not an Activity(context). 在您的情况下,这是匿名内部类的实例,而不是Activity(上下文)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM