Le remplissage de Toupie à l'aide de ArrayList dans Android
J'ai une activité dans laquelle je parse un fichier XML et remplir une Toupie à l'aide de l'analyse de données.
J'en ai fini avec l'analyse du XML. C'est la méthode:
void parse_ExamList()
{
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
//String xml = parser.getXmlFromUrl(URL); //getting XML
Document doc = parser.getDomElement(xmlContent); //getting DOM element
//count_questions=2;
NodeList nl = doc.getElementsByTagName(KEY_EXAMSET);
//looping through all item nodes <item>
for ( int i = 0; i < nl.getLength();i++) {
// while(counter< nl.getLength())
// {
//creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
//adding each child node to HashMap key => value
//map.put(KEY_EXAMSET, parser.getValue(e, KEY_EXAMSET));
map.put(KEY_SETID, parser.getValue(e, KEY_SETID));
map.put(KEY_SETNAME, parser.getValue(e, KEY_SETNAME));
//Log.i("Set ID: ", parser.getValue(e, KEY_SETID));
//Log.i("Set Name: ", parser.getValue(e, KEY_SETNAME));
menuItems.add(map);
}
}
Si vous remarquez, vous pouvez voir que KEY_SETID et KEY_SETNAME à la liste de tableaux. Je dois remplir la casserole avec le KEY_SETNAME et la KEY_SETID ne sera pas affiché dans le compteur. Mais si l'élément est cliqué puis l'id correspondant au nom doit être acquis dans le but de les envoyer au serveur.
J'ai une méthode pour remplir un spinner, comme ceci:
//add items into exam list spinner dynamically
public void addItemsOnExamListSpinner()
{
List<String> list = new ArrayList<String>();
list.add("Speed Test 150(min) PO Set-01");
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
exam_list_spinner.setAdapter(dataAdapter);
}
Comment dois-je remplir la casserole avec de l'ArrayList qui est obtenu lors de l'analyse du XML?
C'est le pleine activité:
public class SpeedTestExamNameActivity extends Activity {
Spinner exam_list_spinner;
Button detailsBtn;
TextView showUser;
String full_name;
//variables to get response from server
String responseBody;
//variables required for parsing the XML
String xmlContent=null;
//XML node keys
static final String KEY_EXAMSET = "ExamSet"; //parent node
static final String KEY_SETID = "SetId";
static final String KEY_SETNAME = "SetName";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_speed_test_exam_name);
//checking internet connectivity to download list
isOnline_downloadList();
//Showing user full name after login
full_name=getFromPreference("user_name");
//textview to show user name
showUser=(TextView)findViewById(R.id.speed_username_textView);
showUser.setText("Welcome, "+full_name);
//spinner
exam_list_spinner = (Spinner) findViewById(R.id.speed_examlist_spinner);
//adding items to spinners
addItemsOnExamListSpinner();
//onclick details button
detailsBtn = (Button) findViewById(R.id.speed_exam_details_button);
detailsBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(SpeedTestExamNameActivity.this,
"Exam List Spinner: "+ String.valueOf(exam_list_spinner.getSelectedItem()),
Toast.LENGTH_SHORT).show();
Intent intent = new Intent(SpeedTestExamNameActivity.this, SpeedTestActivity.class);
SpeedTestExamNameActivity.this.startActivity(intent);
}
});
}
//getting content from preferences
public String getFromPreference(String variable_name)
{
String preference_return;
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
preference_return = preferences.getString(variable_name,"");
return preference_return;
}
//check connection
public boolean isOnline_downloadList() {
ConnectivityManager cm =(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
//sending request for login
new MyAsyncTask().execute(getFromPreference("student_code"));
return true;
}
//alert box to show internet connection error
AlertDialog.Builder Internet_Alert = new AlertDialog.Builder(SpeedTestExamNameActivity.this);
//set title
Internet_Alert.setCancelable(false);
Internet_Alert.setTitle("Attention!");
Internet_Alert.setMessage("This application requires internet connectivity, no internet connection detected");
Internet_Alert.setPositiveButton("Quit", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1)
{
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
onQuitPressed();
}
});
Internet_Alert.create().show();
return false;
}
//to remove application from task manager
public void onQuitPressed() {
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
}
//===================================================================================================================================
//sending student code to server to get exam list
//===================================================================================================================================
private class MyAsyncTask extends AsyncTask<String, Integer, Double>{
@Override
protected Double doInBackground(String... params) {
//TODO Auto-generated method stub
postData(params[0]);
return null;
}
protected void onPostExecute(Double result){
//Toast.makeText(getApplicationContext(), responseBody, Toast.LENGTH_LONG).show();
//Log.i("response: ", responseBody);
//processResponce(responseBody);
//going to next activity
xmlContent=responseBody;
parse_ExamList();
}
protected void onProgressUpdate(Integer... progress){
}
public void postData(String student_code) {
//Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
//HttpPost httppost = new HttpPost("http://icaerp.com/AndroidDataService/dataServiceAndroid.asmx/login");
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(SpeedTestExamNameActivity.this);
final String url_first = preferences.getString("URLFirstPart","");
HttpPost httppost = new HttpPost(url_first+"ExamList");
try {
//Data that I am sending
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("StudentCode", student_code));
//nameValuePairs.add(new BasicNameValuePair("Password", passwrd));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//Execute HTTP Post Request
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
responseBody = EntityUtils.toString(response.getEntity());
Log.d("result", responseBody);
}
catch (Throwable t ) {
//Toast.makeText( getApplicationContext(),""+t,Toast.LENGTH_LONG).show();
Log.d("Error Time of Login",t+"");
}
}
}
//===================================================================================================================================
//END sending EmailAddress and Password to server
//===================================================================================================================================
//function to populate SPINNER with exam list from xml
void parse_ExamList()
{
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
//String xml = parser.getXmlFromUrl(URL); //getting XML
Document doc = parser.getDomElement(xmlContent); //getting DOM element
//count_questions=2;
NodeList nl = doc.getElementsByTagName(KEY_EXAMSET);
//looping through all item nodes <item>
for ( int i = 0; i < nl.getLength();i++) {
// while(counter< nl.getLength())
// {
//creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
Element e = (Element) nl.item(i);
//adding each child node to HashMap key => value
//map.put(KEY_EXAMSET, parser.getValue(e, KEY_EXAMSET));
map.put(KEY_SETID, parser.getValue(e, KEY_SETID));
map.put(KEY_SETNAME, parser.getValue(e, KEY_SETNAME));
//Log.i("Set ID: ", parser.getValue(e, KEY_SETID));
//Log.i("Set Name: ", parser.getValue(e, KEY_SETNAME));
menuItems.add(map);
}
}
//add items into exam list spinner dynamically
public void addItemsOnExamListSpinner()
{
List<String> list = new ArrayList<String>();
list.add("Speed Test 150(min) PO Set-01");
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
exam_list_spinner.setAdapter(dataAdapter);
}
}
C'est le fichier de mise en page:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".SpeedTestExamNameActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:text="@string/speed_choose_exam"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Spinner
android:id="@+id/speed_examlist_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="68dp" />
<Button
android:id="@+id/speed_exam_details_button"
android:layout_width="95dp"
android:layout_height="wrap_content"
android:layout_below="@+id/speed_examlist_spinner"
android:layout_centerHorizontal="true"
android:layout_marginTop="36dp"
android:text="@string/details" />
<TextView
android:id="@+id/speed_username_textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="Name Title"
android:textAppearance="?android:attr/textAppearanceSmall" />
</RelativeLayout>
Que dois-je faire pour remplir le compteur de la liste de tableaux retournés par la méthode d'analyse XML?
OriginalL'auteur kittu88 | 2013-03-14
Vous devez vous connecter pour publier un commentaire.
C'est comment vous pouvez aller sur le faire.
Tout d'abord, créez un POJO
MyObject
, qui a les 2 champs KEY_SETID et KEY_SETNAME et de sesgetter/setter
. Remplacer letoString()
, pour revenirKEY_SETNAME
, comme vous le souhaitez afficher ce que le nom de l'élément dans leSpinner
.Puis de créer un
ArrayList
de votreMyObject
, à partir de laHashMap
vous peuplée par l'analyse de votre XML.Puis à l'aide de l'exemple de l'extrait de code ci-dessous, remplir les données dans votre
Spinner
.Maintenant pour obtenir l'élément sélectionné, utilisez le code ci-dessous.
Essayer et laissez-moi savoir, si vous êtes bloqué partout.
Mise à jour:-
Votre POJO sera comme ceci.
quelle partie du processus êtes-vous pris? Parce que je l'ai expliqué dans une jolie manière détaillée.
Je veux savoir l'exigence de la POJO
il devrait être le POJO que vous voulez avoir. Un objet java avec seulement 2 champs.
OriginalL'auteur SudoRahul
Astuce:Essayez de rendre le code plus simple et de travail.Alors d'abord,dans votre fonction d'analyse syntaxique plutôt que d'ajouter un
HashMap
à laArrayList
.. prendre deux arraylists et cesArrayList
s devraient être déclarées à un niveau de classe.En conséquence,remplir les deuxArrayList
s et de les récupérer àSpinner
cliquez sur.Si votreActivity
code est:Remarque: Simple de remplacer le fera.J'ai seulement changé de code dans
detailsBtn.setOnClickListener(new View.OnClickListener() {
et votreparseExamList()
et vient de déclarer deuxArrayLists
au niveau de la classe.essayez-le et voyez si vous obtenez deux Toasts en Cliquant sur bouton détails avant le lancement de la nouvelle activité.Mise à JOUR: je suppose que vous avez suivi les android ruche tutoriel pour l'analyse de XML.Il suffit de changer le
getValue
fonction avec cette dans votreXMLParser
classe:Mais dans le cas où vous n'êtes pas la suite.. en suivant le tutoriel pour construire l'analyseur permettrait de résoudre votre problème.Insha Allah.Si je vous ai aidé à parvenir à une solution, alors s'il vous plaît marquer comme réponse
désolé, j'ai raté ce changement là-bas.. voir le changement de code dans
parseExamList()
.. changé àmenuKeys.add( parser.getValue(e, KEY_SETID)); menuItems.add(parser.getValue(e, KEY_SETNAME));
.Espérons que cela résout votre problème, Insha AllahToujours cette erreur: La méthode getValue(Élément, String) dans le type de parseur xml n'est pas applicable pour les arguments (Élément de la Chaîne) pour menuKeys.ajouter( analyseur.getValue(e, KEY_SETID)); menuItems.ajouter( analyseur.getValue(e, KEY_SETNAME));
vérifier la mise à jour
Son travail, mais de la toupie ne montrant que 1 tem partir du fichier XML, alors qu'il devrait être de 3 éléments dans la casserole
OriginalL'auteur Nezam
voir la modifier
La liste de tableau qui que vous utilisez est différente de la mienne. Où dois-je mettre ce code? Comment devrais-je l'utiliser?
j'ai utilisé le mien tableau . vous pouvez tout simplement utiliser votre liste de tableaux , locationArray vous pouvez le remplacer par votre propre tableau
votre liste de tableaux est comme ceci: ArrayList<String> locationArray = new ArrayList<String>(); Mais le mien est comme ceci: ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
OriginalL'auteur Hussain Akhtar Wahid 'Ghouri'
J'ai fait une solution de contournement en modifiant mon code xml code d'analyse:
Mais le problème est que, à la fois le nom et l'identifiant sont s'affiche dans le compteur, je veux juste afficher le nom et masquer l'id lors de l'affichage. Mais plus tard, j'aurai besoin de l'id avec le nom sélectionné
OriginalL'auteur kittu88