检查时获取列表视图数据并将其传递给另一个活动

时间:2016-12-03 05:45:35

标签: android

我一直在寻找正确的答案,但没有什么能解决我的问题。我有一个列表视图,由我的数据库从webserver填充。所以基本上需要从listview获取由用户检查的数据并将数据传递给另一个活动。抱歉,我的坏英语希望你们能帮助我。

收到错误

  

E / AndroidRuntime:致命异常:主要                     java.lang.IndexOutOfBoundsException:索引0无效,大小为0                         at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)                         at java.util.ArrayList.get(ArrayList.java:304)                         at firin.myuploads.Attendance $ 1.onClick(Attendance.java:74)

Attendance.java

public class Attendance extends AppCompatActivity {
//For Checkbox
ArrayList<String> selectedItems=new ArrayList<>();

private String TAG = MainActivity.class.getSimpleName();

private ProgressDialog pDialog;
private ListView lv;
private CheckBox cb;
private Button bGet;
//private id[] id;


private static String url = "www.myphpurl.com";

ArrayList<HashMap<String, String>> contactList;

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

    contactList = new ArrayList<>();

    bGet = (Button) findViewById(R.id.button7);

    lv = (ListView) findViewById(R.id.list);
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    new GetContacts().execute();

    bGet.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
     //       String selected =((TextView)view.findViewById(R.id.mobile)).getText().toString();

            CheckBox cb = (CheckBox) findViewById(R.id.cb);
            cb.setChecked(true);

            int len = lv.getCount();
            SparseBooleanArray checked = lv.getCheckedItemPositions();
            for (int i = 0; i < len; i++)
                if (checked.get(i)) {
                    String item = selectedItems.get(i);
                    Toast.makeText(getApplicationContext(), item, Toast.LENGTH_LONG).show();
                    /*some code to save data in MainActivity*/
                    Intent in = new Intent(Attendance.this, SendMail.class);
                    in.putExtra("ListValue", item);
                    startActivity(in);}


        }
    });

}

这是我将数据填充到listview

的代码
 public class GetContacts extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... arg0) {
        HttpHandler sh = new HttpHandler();
        // Making a request to url and getting response
        String jsonStr = sh.makeServiceCall(url);
        Log.e(TAG, "Response from url: " + jsonStr);

        if (jsonStr != null) {
            try {
                JSONObject jsonObj = new JSONObject(jsonStr);

                // Getting JSON Array node
                JSONArray result = jsonObj.getJSONArray("result");

                // looping through All Contacts
                for (int i = 0; i < result.length(); i++) {
                    JSONObject c = result.getJSONObject(i);
                    String id = c.getString("userID");
                    String studentName = c.getString("studentName");
                    String parentName = c.getString("parentName");
                    String parentEmail = c.getString("parentEmail");


                    // tmp hash map for single contact
                    HashMap<String, String> contact = new HashMap<>();

                    // adding each child node to HashMap key => value
                    contact.put("UID", id);
                    contact.put("sName", studentName);
                    contact.put("pName", parentName);
                    contact.put("pEmail", parentEmail);

                    // adding contact to contact list
                    contactList.add(contact);
                }
            } catch (final JSONException e) {
                Log.e(TAG, "Json parsing error: " + e.getMessage());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),
                                "Json parsing error: " + e.getMessage(),
                                Toast.LENGTH_LONG)
                                .show();
                    }
                });

            }
        } else {
            Log.e(TAG, "Couldn't get json from server.");
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getApplicationContext(),
                            "Couldn't get json from server. Check LogCat for possible errors!",
                            Toast.LENGTH_LONG)
                            .show();
                }
            });
        }



        return null;



    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Showing progress dialog
        pDialog = new ProgressDialog(Attendance.this);
        pDialog.setMessage("Please wait...");
        pDialog.setCancelable(false);
        pDialog.show();

    }

    @Override
    public void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (pDialog.isShowing())
            pDialog.dismiss();
        /**
         * Updating parsed JSON data into ListView
         * */
        ListAdapter adapter = new SimpleAdapter(
                Attendance.this, contactList,
                R.layout.list_item, new String[]{"sName", "pName",
                "pEmail"}, new int[]{R.id.name,
                R.id.email, R.id.mobile});

        lv.setAdapter(adapter);
    }



}

这是我如何设置我的setOnClick?

   lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

       @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            String selected =((TextView)findViewById(R.id.mobile)).getText().toString();

            CheckBox cb = (CheckBox) findViewById(R.id.cb);
            cb.setChecked(true);


        }});

希望你们能帮助我。提前谢谢

0 个答案:

没有答案