2016-12-03 2 views
0

Ive искал правильный ответ, но ничто не может решить мои проблемы. У меня есть список, который заполняется моей базой данных с веб-сервера. Таким образом, в основном, нужно получить данные из списка, которые проверяется пользователем и передавать данные в другое действие. Извините за мою неудачную английскую надежду, что вы, ребята, можете мне помочь.Получите данные списка во время проверки и передайте его другому действию

ивы Ошибки получили

E/AndroidRuntime: неустранимую: главный java.lang.IndexOutOfBoundsException: недействительный индекс 0, размер 0 в java.util.ArrayList.throwIndexOutOfBoundsException (ArrayList.java:251) на java.util.ArrayList.get (ArrayList.java:304) в 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

please chec k, что ваш массив 'contactList' равен null или нет. Другое дело, вы должны использовать 'lv.setOnItemClickListener()', чтобы получить, какой элемент выбран в списке. – Shailesh

ответ

0

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

Устанавливает режим выбора списка в виде Multi Choice.

listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

Набор Слушатель на ListView, как показано ниже

ArrayList<String> selectedItem = new ArrayList(); 
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        view.setSelected(true); 
        adapter.getView(position, view, parent).setBackgroundColor(getResources().getColor(R.color.btn_login)); 
        adapter.notifyDataSetChanged(); 

        Log.i(TAG, "Selected Item is " + stateList.get(position)); 
        selectedItem.add(yourArray.get(position)) 
       } 
      }); 

вы можете invok своего намерения и передать SelectedItem в такое намерение, как этот

Intent intent = new Intent(activity, YourActivity.class); 
intent.putStringArrayListExtra("selected_list", selectedItem); 
startActivity(intent); 

и в вашем приемном умысле вам нужно сделать:

ArrayList<String> selectedItem; 

Intent i = getIntent(); 
selectedItem = i.getStringArrayListExtra("selected_list"); 
+0

ive попробовал ваш код, но я не понимаю часть «адаптера». Большое спасибо за ответ – Zhafirin

+0

Это объект адаптера. В вашем случае вы можете видеть в 'doInBackgroud()', который является адаптером. Вы можете объявить, что в глобальном, так что вы можете использовать это в 'listview.setOnItemClickListener()' – Shailesh

+0

им жаль, я очень новичок в android, и я все равно не получаю его сэр. В моем '' doInBackground() 'у меня нет адаптера. Но это в моем 'onPostExecute()' – Zhafirin

Смежные вопросы