首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >安卓从MySQL读取数据后,关闭屏幕显示后填充listview

安卓从MySQL读取数据后,关闭屏幕显示后填充listview
EN

Stack Overflow用户
提问于 2017-04-16 20:01:57
回答 1查看 39关注 0票数 1

我正在尝试从MySQL数据库中获取数据并将其显示在列表视图中。成功检索数据,但直到屏幕显示关闭时才填充列表视图。在填充listview之前,进度对话框也不会出现。有什么建议吗?

代码语言:javascript
复制
public class BestLinksActivity extends AppCompatActivity {

public ListView myListView;
public MyListViewAdapter mAdapter;
public List<HotelInfo> dataSource;
private String cityName;
ProgressDialog mProgressDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_best_links);
    dataSource = new ArrayList<>();

    mProgressDialog = new ProgressDialog(BestLinksActivity.this);
    mProgressDialog.setMessage("Loading data...");

    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        cityName = extras.getString("City");
    }

    DataBaseReader dbReader = new DataBaseReader();
    if (!(cityName.equals(null))) {
        dbReader.execute(cityName);
    } else {
        Toast.makeText(getApplicationContext(), "City name not specified", Toast.LENGTH_SHORT).show();
    }

    //Create adapter
    mAdapter = new MyListViewAdapter(getApplicationContext(), dataSource);
    //Configure the listview
    myListView = (ListView) findViewById(R.id.main_list_view);
    myListView.setAdapter(mAdapter);
    myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {

            // ListView Clicked item value
            HotelInfo currentItem = dataSource.get(position);

            //Open url of the currentItem in web browser
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(currentItem.getLinkUrl())));
        }
    });
}

public String getTitle(String url) {
    String[] subStrings = url.split("/");
    String urlTitle = "";
    for (int i = 0; i < subStrings.length; i++) {
        if (subStrings[i].equals("t"))
            urlTitle = (subStrings[i + 1]);

    }
    urlTitle = urlTitle.replace("-", " ");
    urlTitle=((urlTitle.charAt(0)+"").toUpperCase()).concat(urlTitle.substring(1));
    return urlTitle;
}

public class DataBaseReader extends AsyncTask<String, Void, String> {

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


    @Override
    protected String doInBackground(String... params) {

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(15, TimeUnit.SECONDS)
                .writeTimeout(15, TimeUnit.SECONDS)
                .readTimeout(15, TimeUnit.SECONDS)
                .build();

        Log.d("CheckParam", params[0]);
        RequestBody postBody = new FormBody.Builder()
                .add("cityName", params[0])
                .build();

        Request myRequest = new Request.Builder()
                .url("http://172.18.0.32/extractData.php")
                .post(postBody)
                .build();

        String serverResponse = null;
        try {
            Response response = okHttpClient.newCall(myRequest).execute();
            serverResponse = response.body().string();
        } catch (Exception e) {
            e.printStackTrace();
        }


        try {
            JSONObject myJsonObj = new JSONObject(serverResponse);
            JSONArray myJsonArray = myJsonObj.getJSONArray("server_response");
            for (int index = 0; index < myJsonArray.length(); index++) {
                JSONObject linkObject = myJsonArray.getJSONObject(index); //Otherwise, you will get last element
                HotelInfo myHotelInfo = new HotelInfo();
                myHotelInfo.setLinkUrl(linkObject.getString("Link"));
                myHotelInfo.setLinkTitle(getTitle(myHotelInfo.getLinkUrl()));
                dataSource.add(myHotelInfo);
            }


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

        Log.d("MyKeyser", serverResponse);
        return serverResponse;
    }


    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        Log.d("MyKey", s);
        if (mProgressDialog!=null && mProgressDialog.isShowing()) {
            mProgressDialog.dismiss();
        }

    }
}

}
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43437009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档