我如何刷新列表视图

问题描述 投票:0回答:1

我和我的好友正在尝试创建可以从mysql刷新我们的listview数据的刷新,有什么方法可以刷新我的listview?我知道有一个方法处理者之类的东西,但似乎无法使它起作用这是我的代码:

我尝试了一切,但没有任何效果,非常感谢所有帮助:)

        package com.example.temperatura;
        import android.os.AsyncTask;
        import android.os.Bundle;
        import android.widget.ArrayAdapter;
        import android.widget.ListView;
        import android.widget.Toast;
        import androidx.appcompat.app.AppCompatActivity;


        import org.json.JSONArray;
        import org.json.JSONException;
        import org.json.JSONObject;
        import java.io.BufferedReader;
        import java.io.InputStreamReader;
        import java.net.HttpURLConnection;
        import java.net.URL;

         public class MainActivity extends AppCompatActivity {


            ListView listView;
            String[] sensor;
            ArrayAdapter arrayAdapter;






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


                listView = (ListView) findViewById( R.id.listView );




                downloadJSON( "http://pillsmanager.com/temperatura/conn_app.php" );






            }

            private void downloadJSON(final String urlWebService) {

                class DownloadJSON extends AsyncTask<Void, Void, String> {

                    @Override
                    protected void onPreExecute() {
                        super.onPreExecute();
                    }


                    @Override
                    protected void onPostExecute(String s) {
                        super.onPostExecute(s);
                        Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
                        try {
                            loadIntoListView(s);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    protected String doInBackground(Void... voids) {
                        try {
                            URL url = new URL(urlWebService);
                            HttpURLConnection con = (HttpURLConnection) url.openConnection();
                            StringBuilder sb = new StringBuilder();
                            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
                            String json;
                            while ((json = bufferedReader.readLine()) != null) {
                                sb.append(json + "\n");
                            }
                            return sb.toString().trim();
                        } catch (Exception e) {
                            return null;
                        }
                    }
                }
                DownloadJSON getJSON = new DownloadJSON();
                getJSON.execute();

            }



            private void loadIntoListView( String json) throws JSONException {




                JSONArray jsonArray = new JSONArray(json);
                sensor = new String[jsonArray.length()];
                for (int i = 0; i < jsonArray.length(); i++) {
                    final JSONObject obj = jsonArray.getJSONObject(i);

                    sensor[i] = obj.getString("temperature") + " " + obj.getString("humidity");




                }

                arrayAdapter = new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, sensor );
                listView.setAdapter(arrayAdapter);

            }
        }
android listview
1个回答
0
投票

更新数据后,需要在您的loadIntoListView方法上调用notifyDataSetChanged()。别忘了在UIThread中调用它来避免误解:

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        // INSERT YOUR UPDATE MECHANISM HERE
        // THEN CALL :
        listView.notifyDataSetChanged();
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.