使用android listview填充列表

时间:2015-09-04 14:26:52

标签: android android-listview

按下搜索按钮后,我尝试将结果填充到列表视图中。但是,当我尝试这样做时,listview上没有显示任何内容。

我使用asynctask从数据库中获取数据并将其作为数组传递给listview。

提前感谢您的帮助!

以下是代码:

public class FindFriends extends Activity implements View.OnClickListener {

EditText handphone;
Button searchbtn;
String name,hp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.findfriends);
    handphone = (EditText) findViewById(R.id.enterfn);

    searchbtn = (Button) findViewById(R.id.searchfor);
    searchbtn.setOnClickListener(this);

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

    String[] values = new String[]{name};

    ArrayAdapter<String> codeLearnArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);

    listview.setAdapter(codeLearnArrayAdapter);

}
@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.searchfor:
            hp = handphone.getText().toString();
            new AttemptLogin().execute(hp);
            break;
    }

}


class AttemptLogin extends AsyncTask<String, String, JSONObject> {

    private ProgressDialog pDialog;
    // JSON parser class
    JSONParser jsonParser = new JSONParser();
    private static final String LOGIN_URL = "address_url";

    @Override
    protected JSONObject doInBackground(String... args) {
        // TODO Auto-generated method stub
        // here Check for success tag
        try {
            HashMap<String, String> params = new HashMap<>();
            params.put("hp", args[0]);
            JSONObject json = jsonParser.makeHttpRequest(
                    LOGIN_URL, "POST", params);

            if (json != null) {
                Log.d("JSON result", json.toString());

                return json;
            }

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

        return null;
    }

    protected void onPostExecute(JSONObject json) {

        if (json != null) {
            Toast.makeText(FindFriends.this, json.toString(),
                    Toast.LENGTH_LONG).show();

            try {
                name = json.getString("name");
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}

findfriends.xml

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:background="@drawable/findfriends"
    android:layout_height="match_parent">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:id="@+id/enterfn"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Enter handphone number/username to start searching"
        android:id="@+id/textView9"
        android:textSize="20dp"
        android:layout_above="@+id/enterfn"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Search"
        android:id="@+id/searchfor"
        android:layout_below="@+id/enterfn"
        android:layout_centerHorizontal="true" />

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_below="@+id/searchfor"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

3 个答案:

答案 0 :(得分:0)

我是Android的新手。

无论如何,我无法看到你更新数组的位置,在AsyncTask中你下载了数据,但你没有更新值。所以你shuld更新传递给适配器的数组,然后调用它的方法notifyDataSetChanged()

答案 1 :(得分:0)

只需浏览以下代码并将其与您的

重新分发即可
public class FindFriends extends Activity implements View.OnClickListener {

EditText handphone;
Button searchbtn;
String name = "name", hp = "hp";


ListView listview;
ArrayAdapter<String> codeLearnArrayAdapter;
ArrayList<String> values;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.findfriends);
    handphone = (EditText) findViewById(R.id.enterfn);

    searchbtn = (Button) findViewById(R.id.searchfor);
    searchbtn.setOnClickListener(this);
    listview = (ListView) findViewById(R.id.listView);

    // adding value to arrayList
    values.add(name);

    codeLearnArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);

    listview.setAdapter(codeLearnArrayAdapter);

}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.searchfor:
            hp = handphone.getText().toString();
            new AttemptLogin(new MyHandler()).execute(hp);
            break;
    }

}

class AttemptLogin extends AsyncTask<String, String, JSONObject> {

    private ProgressDialog pDialog;
    // JSON parser class
    JSONParser jsonParser = new JSONParser();
    private static final String LOGIN_URL = "address_url";
    MyHandler myHandler;

    public AttemptLogin(MyHandler myHandler) {
        this.myHandler = myHandler;
    }

    @Override
    protected JSONObject doInBackground(String... args) {
        // TODO Auto-generated method stub
        // here Check for success tag
        try {
            HashMap<String, String> params = new HashMap<>();
            params.put("hp", args[0]);
            JSONObject json = jsonParser.makeHttpRequest(
                    LOGIN_URL, "POST", params);

            if (json != null) {
                Log.d("JSON result", json.toString());

                return json;
            }

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

        return null;
    }

    protected void onPostExecute(JSONObject json) {

        if (json != null) {
            Toast.makeText(FindFriends.this, json.toString(),
                    Toast.LENGTH_LONG).show();

            try {
                name = json.getString("name");
                Message message = new Message();
                message.obj = name;
                myHandler.sendMessage(message);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}

private class MyHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
        String response = String.valueOf(msg);
        values.add(response);
        codeLearnArrayAdapter.notifyDataSetChanged();
    }
}
}

让我知道它是否有效......

答案 2 :(得分:0)

你错过了adapter.notifyDataSetChanged();

数据更改后使用此方法

<强> UPD

试试这段代码:

protected void onPostExecute(JSONObject json) {

    if (json != null) {
        Toast.makeText(FindFriends.this, json.toString(),
                Toast.LENGTH_LONG).show();

        try {
            name = json.getString("name");
            values[0]=name;
            codeLearnArrayAdapter.notifyDataSetChanged();

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

希望它有效。否则请告诉我。

P.S。您还应该使用List而不是数组。