ListView显示数据库中没有任何项目

D B

我尝试了很多方法,但布局却空白了,我改变了很多行,但结果总是一样的。我应该重写代码并尝试其他操作吗?youtube上观看一些视频但没有人有合适的解决方案。我认为这不是因为数组没有结果而导致的。任何人都知道可能出了什么问题:

机场运输活动

public class AirportTransportActivity extends AppCompatActivity {

ListView listView;
ArrayAdapter<String> adapter;
String[] data = new String[0];
JSONObject jsonObject = null;

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

    //Get airport details
    Intent intent = getIntent();
    String getairport = intent.getStringExtra("airport");

    final TextView textViewAirport = (TextView) findViewById(R.id.tvairport);
    textViewAirport.setText(getairport);

    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitNetwork().build());


    //List view setup
    listView = (ListView) findViewById(R.id.lvairport);

    //Get airport transport
    new RetrieveTask().execute();

    //Adapter
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
    listView.setAdapter(adapter);

}

private class RetrieveTask extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... voids) {
        String strUrl = "http://my database";
        URL url = null;
        StringBuffer sb = new StringBuffer();

        try {
            url = new URL(strUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            InputStream iStream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(iStream));
            String line = "";

            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }

            reader.close();
            iStream.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return sb.toString();
    }

    @Override
    protected void onPostExecute(String result) {

        try {

            JSONArray jsonArray = new JSONArray(result);

            data = new String[jsonArray.length()];

            for (int i = 0; i < jsonArray.length(); i++) {
                jsonObject = jsonArray.getJSONObject(i);
                data[i] = jsonObject.getString("airporttransportname");

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

}

谷仓

在原始帖子中,您已经在添加数据之前设置了适配器。但我也怀疑您在以下方面遇到问题:String[] data = new String[0];

所以我改成 ArrayList<String> data = new ArrayList<>();

我也改变了你AsyncTask一点。现在,您可以在后台线程中进行大部分解析。doInBackground成功只是通知在变化的适配器onPostExecute

您还需要检查是否ArrayList<String>适合您的Adapter类。如果不是,只需根据需要进行更改。

改为这样做:

public class AirportTransportActivity extends AppCompatActivity {

private static final String TAG = AirportTransportActivity.class.getSimpleName();

ListView listView;

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

    //Get airport details
    Intent intent = getIntent();
    String getairport = intent.getStringExtra("airport");

    final TextView textViewAirport = (TextView) findViewById(R.id.tvairport);
    textViewAirport.setText(getairport);

    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitNetwork().build());


    //List view setup
    listView = (ListView) findViewById(R.id.lvairport);

    //Get airport transport
    new RetrieveTask().execute();
}

private class RetrieveTask extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... voids) {
        String strUrl = "http://my database";
        URL url = null;
        StringBuffer sb = new StringBuffer();

        try {
            url = new URL(strUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            InputStream iStream = connection.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(iStream));
            String line = "";

            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }

            reader.close();
            iStream.close();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return toString();
    }

    @Override
    protected void onPostExecute(String result) {
        if(result.isEmpty()) return;
        try{
            ArrayList<String> data = new ArrayList<>();
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);

            JSONArray jsonArray = new JSONArray(result);
            int len = jsonArray.length();
            Log.e(TAG, "Lenth of json array = " + len)

            for (int i = 0; i < len; i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                // I add the optString variation just in case the data is corrupt
                String s = jsonObject.optString("airporttransportname", "?");
                data.add(s);
            }
            listView.setAdapter(adapter);            
        }
        catch(JSONException e){
            e.printStackTrace();
        }
    }
}

免责声明我是在文本编辑器中执行此操作的,因此无法指望“自动更正”某些语法或方法名称-因此您需要检查它。我还会在您的代码中更改其他一些内容,但是我想让它尽可能地接近原始代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ListView 未显示 Firebase 数据库中的任何内容

ListView不显示存储在SQLite数据库中的项目

ListView项目不显示数据库中的值

当我点击提交按钮时,我的数据库中没有显示任何内容

单击 php 中的链接(来自数据库)后没有任何显示

房间数据库中没有显示在RecycleView中的项目

没有从SQlite数据库中删除项目

Spring项目没有看到数据库中的表

为什么没有使用两个选择字段从数据库中显示任何数据?

在ListView中显示数据库数据

TCPDF没有显示MySQL数据库中的Unicode

没有出现任何异常,但数据没有存储到数据库中

如果使用php在数据库中没有任何值,如何显示首次零值?

显示数据库中的相关项目

如何从数据库中选择任何特定项目并在其他页面中显示

ListView没有显示任何项目。(从SlidingMenu到NavigationDrawer)

Listview选择的项目突出显示来自数据库吗?

当ListView Windows窗体中没有任何项目时显示空文本

MySQL:选择日期范围内的项目,但如果某个月在数据库中没有任何数据,则返回 0

SQLite数据库C#Android中的Xamarin ListView显示项目

在Rails数据库的`:building`列中没有保存任何数据吗?

如何在Django中创建数据库视图排序(没有任何数据库表的派生模型)

表中没有可用数据,但显示了数据库中的数据

没有在ContentValues中设置所有列的数据库中的更新项目

在CPanel中创建的数据库不在phpmyadmin中显示。有任何想法吗?

在ListView中显示数据库中的数据

在Android上的ListView中显示数据库中的数据

没有获取数据库的所有项目

从数据库中删除项目 - Android Studio 中的 ListView