Пустой экран в ListActivity, заполненный mySQL - PullRequest
0 голосов
/ 07 января 2012

Это моя первая попытка создать ListActivity, заполненную из удаленной базы данных mySQL. У меня это работало нормально при получении данных из локальной базы данных SQLite. Мне нужно было пересмотреть мой класс, чтобы получить данные из удаленной базы данных, поэтому я попытался настроить свой класс, чтобы сделать это, следуя инструкциям и документам. Из-за сложности моего представления и использования getExtras я не могу понять это.

Мой вопрос: теперь с ревизией я получаю пустой список без ошибок в LogCat; так что вы видите, виноват в моем классе? Рекомендации?

public class QueryDisplayList extends ListActivity {

    private static final String PHP_KEY = "PHP_KEY";
    private static final String QUERY_ORDER = "QUERY_ORDER";

    JSONArray jArray;
    String result = null;
    InputStream is = null;
    StringBuilder sb = null;

    // private Object tvLabel = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Bundle extras = getIntent().getExtras();
        setContentView(R.layout.list_view2);

        /**
         * Get the query string from last activity and pass it to this
         * activity-----------------------------------------------------
         */
        // String p = null;
        // if (extras != null) {
        // p = extras.getString(PHP_KEY);
        // }
        loadQuery();
    }

    void loadQuery() {

        new Thread(new Runnable() {

            public void run() {

                String qO = getIntent().getStringExtra("QUERY_ORDER");
                String php = getIntent().getStringExtra("PHP_KEY");

                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                // http post
                try {
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost(
                            "http://10.0.2.2/App/php/" + php + qO + ".php");

                    Log.e("log_tag", "Fetched " + php + qO + ".php");

                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    HttpResponse response = httpclient.execute(httppost);
                    HttpEntity entity = response.getEntity();
                    is = entity.getContent();

                } catch (Exception e) {

                    Log.e("log_tag", "Error in http connection " + e.toString());
                }

                // convert response to string
                try {
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(is, "iso-8859-1"), 8);
                    sb = new StringBuilder();
                    sb.append(reader.readLine() + "\n");

                    String line = "0";
                    while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                    }

                    is.close();
                    result = sb.toString();

                } catch (Exception e) {
                    Log.e("log_tag", "Error converting result " + e.toString());
                }

            }
        }).start();

        setListAdapter(new QueryAdapter(this, result));
    }

    /**
     * The Query Adaptor --------------------------------------------
     */

    private class QueryAdapter extends ArrayAdapter<String> {

        private Activity context;

        public QueryAdapter(Activity context, String result) {
            super(context, R.layout.list_view2);
            this.context = context;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = context.getLayoutInflater();
            View rowView = inflater.inflate(R.layout.list_item, null, true);

            try {
                jArray = new JSONArray(result);
                JSONObject json_data = null;

                for (int i = 0; i < jArray.length(); i++) {

                    json_data = jArray.getJSONObject(i);

                    final String tvLabel = json_data.getString("label");
                    TextView labelTxt = (TextView) convertView
                            .findViewById(R.id.label);
                    if (labelTxt != null) {
                        labelTxt.setText("(" + tvLabel + ")");
                    }

                    final String tvTitle = json_data.getString("title");
                    TextView titleTxt = (TextView) convertView
                            .findViewById(R.id.listTitle);
                    if (titleTxt != null) {
                        titleTxt.setText(tvTitle);
                    }

                    String tvDescription = json_data.getString("description");
                    TextView descriptionTxt = (TextView) convertView
                            .findViewById(R.id.caption);
                    if (descriptionTxt != null) {
                        descriptionTxt.setText(tvDescription);
                    }

                    String tvDate = json_data.getString("date");
                    TextView dateTxt = (TextView) convertView
                            .findViewById(R.id.dateAdded);
                    if (dateTxt != null) {
                        dateTxt.setText(tvDate);
                    }

                    String tvGoto = json_data.getString("gotoURL");
                    TextView gotoTxt = (TextView) convertView
                            .findViewById(R.id.dummy);
                    if (gotoTxt != null) {
                        gotoTxt.setText(tvGoto);
                    }

                    gotoTxt.setVisibility(View.GONE);
                    convertView.setTag(gotoTxt);

                    final String ni = json_data.getString("intent");

                    final ListView lv = getListView();
                    lv.setEnabled(true);
                    lv.setClickable(true);

                    /**
                     * Click Listeners --------------------------------
                     */
                    lv.setOnItemClickListener(new OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> arg0, View v,
                                int arg2, long arg3) {

                            // -- Set the domain name in the strings.xml file
                            // once
                            // the
                            // DNS is established for the website.
                            String mDomain = getResources().getString(
                                    R.string.domain);

                            String url = "";
                            url = mDomain + (String) v.getTag();

                            String intent = ni;
                            Class<?> nIntent = null;
                            try {
                                nIntent = Class
                                        .forName("com.andaerosystems.andaero.utili."
                                                + intent);
                            } catch (ClassNotFoundException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }

                            Intent i = new Intent(QueryDisplayList.this,
                                    nIntent);
                            i.putExtra("PHP_KEY", tvLabel);
                            i.putExtra("KEY_URL", url);
                            i.putExtra("KEY_SUBTITLE", tvTitle);
                            i.putExtra("KEY_LABEL", tvLabel);
                            i.putExtra("KEY_INTENT", intent);
                            i.putExtra("QUERY_ORDER", "ASC");
                            i.putExtra("KEY_YPOS", "0.0");
                            QueryDisplayList.this.startActivity(i);

                            Log.e("tag", url);
                        }
                    });
                }
            } catch (JSONException e1) {
                Toast.makeText(getBaseContext(), "No label Found",
                        Toast.LENGTH_LONG).show();
            } catch (ParseException e1) {
                e1.printStackTrace();
            }
            return rowView;
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 07 января 2012

Вы отлаживали шаг за шагом и проверяли результирующие значения переменных?

Пример. При синтаксическом анализе файла json опечатка или ошибка getString () останавливает процесс.

0 голосов
/ 07 января 2012

Прежде всего, вы не передаете новый результат, полученный от HttpPost, вашему адаптеру (поскольку адаптер создается до того, как вы получите ответ).

Кроме того, getView не предназначен для такого использования. Что он делает, это создает один элемент в списке. То, что вы делаете, это создание всех предметов. Вам нужно разобрать данные и добавить список с проанализированными данными в адаптер.

Посмотрите на этот пример: http://sudarmuthu.com/blog/using-arrayadapter-and-listview-in-android-applications.

0 голосов
/ 07 января 2012

Я быстро взглянул на твой код. Попробуйте это.

void loadQuery() {

        new Thread(new Runnable() {

            public void run() {

                String qO = getIntent().getStringExtra("QUERY_ORDER");
                String php = getIntent().getStringExtra("PHP_KEY");

                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                // http post
                try {
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost(
                            "http://10.0.2.2/App/php/" + php + qO + ".php");

                    Log.e("log_tag", "Fetched " + php + qO + ".php");

                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    HttpResponse response = httpclient.execute(httppost);
                    HttpEntity entity = response.getEntity();
                    is = entity.getContent();

                } catch (Exception e) {

                    Log.e("log_tag", "Error in http connection " + e.toString());
                }

                // convert response to string
                try {
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(is, "iso-8859-1"), 8);
                    sb = new StringBuilder();
                    sb.append(reader.readLine() + "\n");

                    String line = "0";
                    while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                    }

                    is.close();
                    result = sb.toString();
                   YourActivity.this.runOnUiThread(new Runnable(){

            @Override
            public void run() {
                YourActivity.this.setListAdapter(new QueryAdapter(this, result));
            }});

                } catch (Exception e) {
                    Log.e("log_tag", "Error converting result " + e.toString());
                }


            }
        }).start();


    }
...