java - 空数组列表

标签 java android

因此,在我的 Android 应用程序中,我尝试将 Json 链接转换为 ListView ,但是当我发送 ArrayList 时,我得到一个空列表。

我的代码:

类 fetchData

public class fetchData extends AsyncTask<Void,Void,Void> {

    ArrayList<Person> persons = new ArrayList<Person>();
    String data="";
    String dataParsed="";
    String singleParsed="";

    @Override
    protected Void doInBackground(Void... voids) {
        try {
            URL url = new URL("https://jsonplaceholder.typicode.com/users");

            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

            InputStream inputStream = httpURLConnection.getInputStream();

            BufferedReader bf = new BufferedReader(new InputStreamReader(inputStream));

            String line = "";


            while ( line != null){
                line = bf.readLine();
                data = data + line;
            }

            JSONArray array = new JSONArray(data);

            for (int i=0;i<array.length();i++){
                JSONObject jo = (JSONObject) array.get(i);
                Person p = new Person(jo.getString("id"),jo.getString("name"),jo.getString("username"),jo.getString("email"));
                this.persons.add(p);
                singleParsed =p.toString();
                dataParsed = dataParsed + singleParsed;
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        MainActivity.informations= this.dataParsed;
    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {

    Button moreInfos;

    public static ArrayList<Person> persons = new ArrayList<Person>();

    public static String informations;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        moreInfos = (Button) findViewById(R.id.goInfos);

        fetchData process = new fetchData();
        process.execute();

        moreInfos.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                Intent intent = new Intent(MainActivity.this, Informations.class);
                String message = informations;
                intent.putExtra("msg", message);
                startActivity(intent);


                // normally we need to pass the arraylist that contains the list of our persons
            }
        });
    }
}

现在在我的 MainActivity 中,如果我检查 ArrayList 人员的大小,我得到 0,任何人都可以帮助我或指导我,以便我可以解决这个问题吗?

最佳答案

您的 Activity 中的列表是空的,因为您实际上从未在其中放入任何内容。请记住,异步任务中的列表与 Activity 中的列表不同,因此您必须实际复制它。

@Override
protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);
    MainActivity.informations = this.dataParsed;
    // defensively copy
    MainActivity.persons = new ArrayList<>(this.persons);
}

您还可以在代码中改进一些其他内容(例如,当您应该使用回调时,在 Activity 中使用静态字段),但这应该可以解决眼前的问题。

关于java - 空数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53153628/

相关文章:

java - 使用 jOOQ 更新 Postgres 日期范围

java - tomcat context.xml中的BoneCP抛出找不到jdbc驱动的异常

java - 数字格式异常 : For input string "\N" when reading from file

java - 从 ArrayList 内部删除元素

android - onclicklistener 不在 recyclerview 上工作

java - 如何为 Tomcat 服务器创建 Java Portlet?

android - 如何在 Gradle 中使用 Renderscript 支持库

java - 如何将A类中创建的变量的值传递到B类中

android - 在这种情况下我应该如何获取上下文?

android - Play 商店警告迁移到 Play Integrity API : Critical issues for com. google.android.gms :play-services-safetynet:18. 0.1