I am trying to use a ListView and I want to select each row to launch different activities, but the method OnItemSelectedItem is not working inside and outside of the OnCreate.
Here is the code.
MainActivity:
package com.example.dos_6.app_chef.Activities;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import com.example.dos_6.app_chef.Adapters.MenuAdapter;
import com.example.dos_6.app_chef.Clases.Facultad;
import com.example.dos_6.app_chef.Clases.Menu;
import com.example.dos_6.app_chef.Clases.Pais;
import com.example.dos_6.app_chef.Clases.Universidad;
import com.example.dos_6.app_chef.R;
import com.example.dos_6.app_chef.Util.Util;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static com.example.dos_6.app_chef.Util.Constantes.SERVER_GETFACULTAD_ID_UNI;
import static com.example.dos_6.app_chef.Util.Constantes.SERVER_GETMENU;
import static com.example.dos_6.app_chef.Util.Constantes.SERVER_GETMENU_DIA;
import static com.example.dos_6.app_chef.Util.Constantes.SERVER_GETMENU_ID_FACULTAD;
import static com.example.dos_6.app_chef.Util.Constantes.SERVER_GETPAIS;
import static com.example.dos_6.app_chef.Util.Constantes.SERVER_GETUNIVERSIDAD;
import static com.example.dos_6.app_chef.Util.Constantes.SERVER_URL;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener, View.OnClickListener, AdapterView.OnItemClickListener {
private Intent intent = null;
private Spinner spinner_universidad = null;
private Spinner spinner_facultad = null;
private Spinner spinner_dias = null;
private ListView lvMenu = null;
private ListView lvPlatos = null;
private TextView tv_primer = null;
private TextView tv_segundo = null;
private TextView tv_postre = null;
private TextView tv_bebida = null;
private Universidad universidad = null;
private List<Universidad> listaUniversidad = null;
private List<Facultad> listaFacultad = null;
private List<Pais> listaPais = null;
private List<Menu> listaMenu = null;
private List<Menu> listaPlatos = null;
private MenuAdapter menuAdapter = null;
private MenuAdapter platoAdapter = null;
private WebServiceMenu webServiceMenu = null;
//TODO nº Semana
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
listaUniversidad = new ArrayList<>();
listaFacultad = new ArrayList<>();
listaPais = new ArrayList<>();
listaPlatos = new ArrayList<>();
spinner_universidad = (Spinner) findViewById(R.id.main_spin_lista_uni);
spinner_dias = (Spinner) findViewById(R.id.main_spinner_dias);
//ListView start
lvPlatos = (ListView) findViewById(R.id.main_lv_platos);
lvPlatos.setOnItemClickListener(this);
String[] ps = this.getResources().getStringArray(R.array.platos_array);
Menu m;
for(int i = 0 ; i < ps.length; i++){
m = new Menu();
m.setNombre_plato(ps[i]);
getListaPlatos().add(m);
}
platoAdapter = new MenuAdapter(this, R.layout.menu_item, getListaPlatos());
lvPlatos.setAdapter(platoAdapter);
//ListView End
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
WebService webService = new WebService();
webService.execute();
listaMenu = new ArrayList<>();
universidad = new Universidad();
universidad.setId(0);
universidad.setNombre(getString(R.string.reg_spinner_pos0_universidad));
getListaUniversidad().add(0,universidad);
ArrayAdapter<Universidad> universidadArrayAdapter = new ArrayAdapter<Universidad>(this,
R.layout.support_simple_spinner_dropdown_item, getListaUniversidad());
spinner_universidad.getDropDownHorizontalOffset();
spinner_universidad.setAdapter(universidadArrayAdapter);
spinner_universidad.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
#Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
getListaFacultad().clear();
String uni = spinner_universidad.getItemAtPosition(spinner_universidad.getSelectedItemPosition()).toString();
seleccionarFacultad(uni);
ArrayAdapter<Facultad> arrayAdapter = new ArrayAdapter<Facultad>(getBaseContext(), R.layout.support_simple_spinner_dropdown_item, getListaFacultad());
spinner_facultad = (Spinner) findViewById(R.id.main_spin_lista_fac);
spinner_facultad.getDropDownHorizontalOffset();
spinner_facultad.setAdapter(arrayAdapter);
spinner_facultad.getOnItemSelectedListener();
}
#Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
ArrayAdapter<String> diasAdapter = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, fillDias());
spinner_dias.getDropDownHorizontalOffset();
spinner_dias.setAdapter(diasAdapter);
spinner_dias.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
#Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Facultad facultad = (Facultad) spinner_facultad.getItemAtPosition(spinner_facultad.getSelectedItemPosition());
String dia = spinner_dias.getItemAtPosition(spinner_dias.getSelectedItemPosition()).toString();
if(spinner_dias.getSelectedItem().equals(spinner_dias.getItemAtPosition(0))){
return;
}else {
mostrarMenu(dia, String.valueOf(facultad.getId()));
}
}
#Override
public void onNothingSelected(AdapterView<?> parent) {
return;
}
});
}
public void seleccionarFacultad(String uni) {
if (spinner_universidad.getSelectedItem().equals(spinner_universidad.getItemAtPosition(0))) {
Facultad facultad = new Facultad();
facultad.setNombre(getString(R.string.reg_spinner_pos0_facultad));
getListaFacultad().add(facultad);
} else {
for(Universidad universidad : getListaUniversidad()){
if(universidad.getNombre().equals(uni)){
Facultad facultad = new Facultad();
facultad.setNombre(getString(R.string.reg_spinner_posX_facultad));
getListaFacultad().add(0,facultad);
WebServiceFacultad webServiceFacultad = new WebServiceFacultad();
webServiceFacultad.execute(String.valueOf(universidad.getId()));
}
}
}
}
public void mostrarMenu(String dia, String id_facultad){
WebServiceMenu webServiceMenu = new WebServiceMenu();
webServiceMenu.execute(dia,id_facultad);
//menuAdapter = new MenuAdapter(this, R.layout.menu_item, getListaMenu());
//lvMenu.setAdapter(menuAdapter);
}
public ArrayList<String> fillDias(){
ArrayList<String> dias = null;
dias = new ArrayList<>();
dias.add(getString(R.string.weekday)+" "+Util.numerWeekOfYear());
//dias.add(getString(R.string.dia_pos0));
dias.add(getString(R.string.main_bt_lunes));
dias.add(getString(R.string.main_bt_martes));
dias.add(getString(R.string.main_bt_miercoles));
dias.add(getString(R.string.main_bt_jueves));
dias.add(getString(R.string.main_bt_viernes));
return dias;
}
#Override
public void onClick(View v) {
switch (v.getId()){
/*case R.id.main_tv_primer_plato:
intent = new Intent(this, Platos_Activity.class);
intent.putExtra("orden","1");
intent.putExtra("lista_menu",(Serializable) getListaMenu());
startActivity(intent);
break;
case R.id.main_tv_seg_plato:
intent = new Intent(this, Platos_Activity.class);
intent.putExtra("orden","2");
intent.putExtra("lista_menu",(Serializable) getListaMenu());
startActivity(intent);
break;
case R.id.main_tv_postre:
intent = new Intent(this, Platos_Activity.class);
intent.putExtra("orden","3");
intent.putExtra("lista_menu",(Serializable) getListaMenu());
startActivity(intent);
break;
case R.id.main_tv_bebida:
intent = new Intent(this, Platos_Activity.class);
intent.putExtra("orden","4");
Menu menu = null;
List<Menu> menuList = new ArrayList<>();
getListaMenu().clear();
String[] bebidas = new String[]{"Agua","Refresco","Cerveza"};
for(int i = 0 ; i < 3;i++){
menu = new Menu();
menu.setOrden_plato("4");
menu.setNombre_plato(bebidas[i]);
getListaMenu().add(menu);
}
intent.putExtra("lista_menu",(Serializable) getListaMenu());
startActivity(intent);
break;*/
}
}
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(position == ListView.INVALID_POSITION){
return;
}
Menu menu = getListaPlatos().get(position);
Intent intent;
if(menu.getNombre_plato().equalsIgnoreCase(getString(R.string.primer_plato))) {
intent = new Intent(this, Platos_Activity.class);
intent.putExtra("orden","1");
intent.putExtra("lista_menu",(Serializable) getListaMenu());
startActivity(intent);
}else if(menu.getNombre_plato().equalsIgnoreCase(getString(R.string.segundo_plato))){
intent = new Intent(this, Platos_Activity.class);
intent.putExtra("orden","2");
intent.putExtra("lista_menu",(Serializable) getListaMenu());
startActivity(intent);
}else if(menu.getNombre_plato().equalsIgnoreCase(getString(R.string.postre))){
intent = new Intent(this, Platos_Activity.class);
intent.putExtra("orden","3");
intent.putExtra("lista_menu",(Serializable) getListaMenu());
startActivity(intent);
}else{
intent = new Intent(this, Platos_Activity.class);
intent.putExtra("orden","4");
Menu refrescos = null;
getListaMenu().clear();
String[] bebidas = this.getResources().getStringArray(R.array.bebidas_array);
for(int i = 0 ; i < 3;i++){
refrescos = new Menu();
refrescos.setOrden_plato("4");
refrescos.setNombre_plato(bebidas[i]);
getListaMenu().add(refrescos);
}
intent.putExtra("lista_menu",(Serializable) getListaMenu());
startActivity(intent);
}
Toast.makeText(this, menu.getNombre_plato(), Toast.LENGTH_LONG).show();
}
private class WebService extends AsyncTask<String, Void, Void>{
private ProgressDialog dialog;
#Override
protected Void doInBackground(String... params) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
Universidad[] universidadArray=null;
try{
universidadArray = restTemplate.getForObject(SERVER_URL + SERVER_GETUNIVERSIDAD, Universidad[].class);
}catch (Exception e){
}
for(Universidad universidad : universidadArray){
getListaUniversidad().add(universidad);
}
return null;
}
#Override
protected void onPreExecute() {
super.onPreExecute();
dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle(R.string.mensaje_cargando);
dialog.show();
}
#Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (dialog != null)
dialog.dismiss();
}
#Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
}
private class WebServicePais extends AsyncTask<String, Void, Void>{
private ProgressDialog dialog;
#Override
protected Void doInBackground(String... params) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
Pais[] paisArray = restTemplate.getForObject(SERVER_URL+SERVER_GETPAIS, Pais[].class);
getListaPais().addAll(Arrays.asList(paisArray));
return null;
}
#Override
protected void onPreExecute() {
super.onPreExecute();
//spinner_universidad.setAdapter(null);
/*dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle(R.string.mensaje_cargando);
dialog.show();*/
}
#Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (dialog != null)
dialog.dismiss();
}
#Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
}
private class WebServiceFacultad extends AsyncTask<String, Void, Void>{
#Override
protected Void doInBackground(String... params) {
int id_uni = Integer.parseInt(params[0]);
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
Facultad[] facultadArray = restTemplate.getForObject(SERVER_URL + SERVER_GETFACULTAD_ID_UNI+id_uni, Facultad[].class);
getListaFacultad().addAll(Arrays.asList(facultadArray));
return null;
}
}
private class WebServiceMenu extends AsyncTask<String, Void, Void>{
private ProgressDialog dialog;
#Override
protected Void doInBackground(String... params) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
Menu[] menu = restTemplate.getForObject(SERVER_URL+SERVER_GETMENU+SERVER_GETMENU_DIA+params[0]
+SERVER_GETMENU_ID_FACULTAD+Integer.parseInt(params[1]), Menu[].class);
getListaMenu().addAll(Arrays.asList(menu));
return null;
}
#Override
protected void onPreExecute() {
super.onPreExecute();
getListaMenu().clear();
dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle(R.string.mensaje_cargando);
dialog.show();
}
protected void onPostExecute(Void aVoid) {
if (dialog != null)
dialog.dismiss();
//menuAdapter.notifyDataSetChanged();
}
#Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
//menuAdapter.notifyDataSetChanged();
}
}
#Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
#Override
public boolean onCreateOptionsMenu(android.view.Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
#SuppressWarnings("StatementWithEmptyBody")
#Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_settings) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
public List<Universidad> getListaUniversidad() {
return listaUniversidad;
}
public void setListaUniversidad(List<Universidad> listaUniversidad) {
this.listaUniversidad = listaUniversidad;
}
public List<Pais> getListaPais() {
return listaPais;
}
public void setListaPais(List<Pais> listaPais) {
this.listaPais = listaPais;
}
public List<Facultad> getListaFacultad() {
return listaFacultad;
}
public void setListaFacultad(List<Facultad> listaFacultad) {
this.listaFacultad = listaFacultad;
}
public List<Menu> getListaMenu() {
return listaMenu;
}
public void setListaMenu(List<Menu> listaMenu) {
this.listaMenu = listaMenu;
}
public List<Menu> getListaPlatos() {
return listaPlatos;
}
public void setListaPlatos(List<Menu> listaPlatos) {
this.listaPlatos = listaPlatos;
}
}
And each row is using this XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="#+id/menu_item_imv"
android:layout_width="118dp"
android:layout_height="80dp"
android:focusable="false"/>
<Switch
android:id="#+id/switch1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Switch" />
<LinearLayout
android:layout_width="270dp"
android:layout_height="80dp"
android:orientation="vertical">
<TextView
android:id="#+id/menuitem_tv_nombre_plato"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="TextView"
android:textAlignment="center"
android:textColor="#color/colorPrimaryDark"
/>
</LinearLayout>
</LinearLayout>
Could someone help me?
use click inside adapter. something like cause i don't know your adapter class i paste from my codes.
#Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.item_card_list, null);
}
convertView.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
}
});
convertView.setOnLongClickListener(new View.OnLongClickListener() {
#Override
public boolean onLongClick(View view) {
return true;
}
});
return convertView;
}
TL;DR my gut response would be overlapping Listeners (I count 6 separate Listener calls in one Activity). Put Log.e events in each listener, click what you want to click and see what Log.e fires. You'll know what Listener is being called (in other words, which Listener is eating up you click events).
If none are fired that you most likely haven't implemented your Listener correctly.
It would be good if you create custom adapter.
Try below link :-
http://www.journaldev.com/10416/android-listview-with-custom-adapter-example-tutorial
Related
I have an activity where I can do a search through URL json file, so the 3 parameters pass from EditText of MainActivity to the second activity (annonces), the URL Json recovers the three values and the results is normally displayed , but the problem if I made a return to MainActivity and I change the value of EditTexts and I click search, the results do not change.
this is my project :
MainActivity.java
package com.example.dzweber.waslup;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
AutoCompleteTextView cat;
String[] categories={"informatique","infographie","mathématique","Génie civil","Biologie"};
#Override
protected void onCreate(Bundle savedInstanceState) {
if(annonces.instance != null) {
annonces.instance.finish();
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
cat=(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView2);
ArrayAdapter adapter = new
ArrayAdapter(this,android.R.layout.simple_list_item_1,categories);
cat.setAdapter(adapter);
cat.setThreshold(1);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
#Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
#SuppressWarnings("StatementWithEmptyBody")
#Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.home) {
}
else if (id == R.id.login) {
Intent i = new Intent(this,login.class);
startActivity(i);
}
else if (id == R.id.avanced_search) {
Intent i = new Intent(this,avanced_search.class);
startActivity(i);
}
else if (id == R.id.annonces) {
Intent i = new Intent(this,avanced_search.class);
startActivity(i);
}else if (id == R.id.nav_manage) {
} else if (id == R.id.nav_share) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
public void as(View view) {
EditText loc;
EditText key;
loc = (EditText)findViewById(R.id.a_loc);
key = (EditText)findViewById(R.id.a_keys);
Intent intent = new Intent(getBaseContext(), annonces.class);
intent.putExtra("ca", cat.getText().toString());
intent.putExtra("lo",loc.getText().toString());
intent.putExtra("ke", key.getText().toString());
startActivity(intent);
}
public void connect(View view) {
}
}
annonces.java
package com.example.dzweber.waslup;
import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.AsyncTask;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.androidquery.AQuery;
import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;
import org.json.JSONObject;
public class annonces extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
public static ArrayList<annonce_item> Items = new ArrayList<annonce_item>();
public static TextView txtv;
public static String data = "";
String skey = "";
String sloc = "";
String scat = "";
String date="";
String loc="";
String cat="";
String vue="";
String titre="";
String id="";
/**
* ATTENTION: This was auto-generated to implement the App Indexing API.
* See https://g.co/AppIndexing/AndroidStudio for more information.
*/
private GoogleApiClient client;
public static annonces instance = null;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// fetchD p = new fetchD();
//p.execute();
instance = this;
skey= getIntent().getStringExtra("ke");
sloc= getIntent().getStringExtra("lo");
scat= getIntent().getStringExtra("ca");
setContentView(R.layout.activity_annonces);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
new AsyncCaller().execute();
TextView t = (TextView) findViewById(R.id.testing);
t.setText(scat);
// String generate = "https://www.waslup.pw/generation-json";
// String myurl = "https://www.waslup.pw/wp-content/uploads/wpdata.json";
// new MyAsyncTaskgetNews().execute(generate);
// new MyAsyncTaskgetNews().execute(myurl);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}
#Override
public void finish() {
super.finish();
instance = null;
}
public void buclick(View view) {
}
#Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.annonces, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
#SuppressWarnings("StatementWithEmptyBody")
#Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.home) {
Intent i = new Intent(this,MainActivity.class);
startActivity(i);
finish();
}
else if (id == R.id.login) {
Intent i = new Intent(this,login.class);
startActivity(i);
}
else if (id == R.id.avanced_search) {
Intent i = new Intent(this,avanced_search.class);
startActivity(i);
}
else if (id == R.id.annonces) {
Intent i = new Intent(this,MainActivity.class);
startActivity(i);
}else if (id == R.id.nav_manage) {
} else if (id == R.id.nav_share) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
class MyCustomAdapter extends BaseAdapter {
ArrayList<annonce_item> Items = new ArrayList<annonce_item>();
MyCustomAdapter(ArrayList<annonce_item> Items) {
this.Items = Items;
}
#Override
public int getCount() {
return Items.size();
}
#Override
public String getItem(int position) {
return Items.get(position).ititre;
}
#Override
public long getItemId(int position) {
return position;
}
#Override
public View getView(int i, View view, ViewGroup viewGroup) {
LayoutInflater linflater = getLayoutInflater();
View view1 = linflater.inflate(R.layout.activity_annonce_item, null);
TextView id1 = (TextView) view1.findViewById(R.id.id);
TextView date1 = (TextView) view1.findViewById(R.id.date);
TextView cat1 = (TextView) view1.findViewById(R.id.cat);
TextView loc1 = (TextView) view1.findViewById(R.id.loc);
TextView titre1 = (TextView) view1.findViewById(R.id.titre);
TextView vue1 = (TextView) view1.findViewById(R.id.vue);
date1.setText(Items.get(i).idate);
id1.setText(Items.get(i).iid);
cat1.setText(Items.get(i).icat);
loc1.setText(Items.get(i).iloc);
titre1.setText(Items.get(i).ititre);
vue1.setText(Items.get(i).ivue);
return view1;
}
}
/*
#Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
new AsyncCaller().execute();
}*/
private class AsyncCaller extends AsyncTask<Void, Void, Void>
{
ProgressDialog pdLoading = new ProgressDialog(annonces.this);
#Override
protected void onPreExecute() {
super.onPreExecute();
//this method will be running on UI thread
pdLoading.setMessage("/tChargement des annonces en cours ... ");
pdLoading.show();
}
#Override
protected Void doInBackground(Void... params) {
try {
URL url = new URL("https://www.waslup.pw/wp-admin/admin-ajax.php?action=do_ajax&fn=get_posts&count=10&key="+skey+"&cat="+scat+"&loc="+sloc);
HttpURLConnection httpuc = (HttpURLConnection) url.openConnection();
InputStream inputstream = httpuc.getInputStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(inputstream));
String line ="";
while(line != null){
line = bf.readLine();
data= data + line;
}
JSONArray JA = null;
JA = new JSONArray(data);
annonces.Items.removeAll(annonces.Items);
for (int i=0 ; i<JA.length();i++){
JSONObject JO =(JSONObject) JA.get(i);
date =""+ JO.get("date");
loc =""+ JO.get("loc");
cat =""+ JO.get("Cat");
vue =""+ JO.get("vue");
titre =""+ JO.get("title");
id =""+ JO.get("Id");
annonces.Items.add(new annonce_item(id,date,loc,cat,vue,titre));
}
} catch (MalformedURLException e) {
} catch (JSONException e) {
} catch (IOException e) {
}
return null;
}
#Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
//this method will be running on UI thread
pdLoading.dismiss();
final MyCustomAdapter myadpter = new MyCustomAdapter(Items);
ListView ls = (ListView) findViewById(R.id.listannonce);
ls.setAdapter(myadpter);
ls.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView titre = (TextView) view.findViewById(R.id.titre);
Toast.makeText(getApplicationContext(), titre.getText(), Toast.LENGTH_LONG).show();
myadpter.notifyDataSetChanged();
TextView id2 = (TextView) view.findViewById(R.id.id);
Intent intent = new Intent(getBaseContext(), annonce_details.class);
intent.putExtra("id_from_annonces_activity", id2.getText());
startActivity(intent);
}
});
}
}
}
I reviewed your code and solved your problem.
There are two things need to discuss.
Your API providing the results according to localisation.If we change first two fields results will remain same and web service is fetching only one item with localisation 'oran'. But if we change localisation from 'oran' to 'alger' web service is displaying 4 results.
Here is the problem in your code.You are not concatenating your results properly in your data string. I have updated your code and now your code of AsyncCaller in announces Activity should be like:
Here is the code
private class AsyncCaller extends AsyncTask<Void, Void, Void>
{
ProgressDialog pdLoading = new ProgressDialog(annonces.this);
#Override
protected void onPreExecute() {
super.onPreExecute();
//this method will be running on UI thread
pdLoading.setMessage("/tChargement des annonces en cours ... ");
pdLoading.show();
}
#SuppressLint("NewApi")
#Override
protected Void doInBackground(Void... params) {
try {
URL url = new URL("https://www.waslup.pw/wp-admin/admin-ajax.php?action=do_ajax&fn=get_posts&count=10&key="+skey+"&cat="+scat+"&loc="+sloc);
HttpURLConnection httpuc = (HttpURLConnection) url.openConnection();
InputStream inputstream = httpuc.getInputStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(inputstream));
StringBuilder total = new StringBuilder();
String line;
while ((line = bf.readLine()) != null) {
total.append(line).append('\n');
}
JSONArray JA = null;
JA = new JSONArray(total.toString());
annonces.Items.removeAll(annonces.Items);
for (int i=0 ; i<JA.length();i++){
JSONObject JO =(JSONObject) JA.get(i);
date =""+ JO.get("date");
loc =""+ JO.get("loc");
cat =""+ JO.get("Cat");
vue =""+ JO.get("vue");
titre =""+ JO.get("title");
id =""+ JO.get("Id");
annonces.Items.add(new annonce_item(id,date,loc,cat,vue,titre));
}
} catch (MalformedURLException e) {
} catch (JSONException e) {
Log.d("js_ex:",e.toString());
} catch (IOException e) {
Log.d("io_ex:",e.toString());
}
return null;
}
#Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
//this method will be running on UI thread
pdLoading.dismiss();
final MyCustomAdapter myadpter = new MyCustomAdapter(Items);
ListView ls = (ListView) findViewById(R.id.listannonce);
ls.setAdapter(myadpter);
ls.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView titre = (TextView) view.findViewById(R.id.titre);
Toast.makeText(getApplicationContext(), titre.getText(), Toast.LENGTH_LONG).show();
myadpter.notifyDataSetChanged();
TextView id2 = (TextView) view.findViewById(R.id.id);
Intent intent = new Intent(getBaseContext(), annonce_details.class);
intent.putExtra("id_from_annonces_activity", id2.getText());
startActivity(intent);
}
});
}
}
In this code i added this part
StringBuilder total = new StringBuilder();
String line;
while ((line = bf.readLine()) != null) {
total.append(line).append('\n');
}
JSONArray JA = null;
JA = new JSONArray(total.toString());
I am developing an eCommerce application where most of the java class file using Async Task for fetching data from server and I am using fragment in all java class . My problem is that when I click OnBackPressed it shows error in Async Task line because it takes some time interval again to fetch data from server..
MainActivity.java
package com.prashant;
import android.app.SearchManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.SearchView;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.os.Handler;
import android.widget.GridView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements android.support.v7.app.ActionBar.OnNavigationListener {
TextView txtView;
private static MainActivity sMainActivity;
ProgressBar prgLoading;
RelativeLayout drawerPane;
DrawerLayout drawerLayout;
GridView lvNav;
TextView Customer_name;
TextView Customer_email;
TextView Customer_mob;
List<NavItem> listNavItems;
List<Fragment> listFragment;
private Boolean exit = false;
ActionBarDrawerToggle actionBarDrawerToggle;
public int hot_number = Constants.ProductCart_Id.size();
private TextView ui_hot = null;
private boolean mNaviFirstHit = true;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sMainActivity = this;
// Styling Action Bar
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.rgb(7,112,200)));
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
//Getting Session Information Of Customer
String MyPREFERENCES = "CustomerData";
SharedPreferences sharedpreferences =getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
Constants.Customer_FirstName= sharedpreferences.getString("Customer_FirstName","");
Constants.Customer_LastName=sharedpreferences.getString("Customer_LastName", "");
Constants.Customer_MobileNo=sharedpreferences.getString("Customer_MobileNo", "");
Constants.Customer_Id=sharedpreferences.getInt("Customer_Id", 0);
Constants.Customer_Email=sharedpreferences.getString("Customer_Email", "");
Customer_email.setText(Constants.Customer_Email);
//Asigning FRagment names of sidebar
listNavItems = new ArrayList<NavItem>();
listNavItems.add(new NavItem("Home", null, R.drawable.pras));
for(int i=0;i<Constants.Category_name.size();i++){
listNavItems.add(new NavItem(Constants.Category_name.get(i),null,R.drawable.teju));
}
NavListAdapter navListAdapter = new NavListAdapter(getApplicationContext(), R.layout.item_nav_list, listNavItems);
lvNav.setAdapter(navListAdapter);
listFragment = new ArrayList<Fragment>();
listFragment.add(new MyHome());
for(int i=0;i<Constants.Category_name.size();i++){
listFragment.add(new ProductsListFragment());
}
listFragment.add(new MyHome());
listFragment.add(new ActivityCart());
listFragment.add(new LoginFragment());
listFragment.add(new MyAbout());
//Asigning FRagment names of sidebar
//Saving fragment data as constants for my home categories
Constants.listNavItems=listNavItems;
Constants.listFragment=listFragment;
//Saving fragment data as constants for my home categories
//Load first fragment as default:
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.main_content, listFragment.get(0)).commit();
setTitle(listNavItems.get(0).getTitle());
lvNav.setItemChecked(0, true);
drawerLayout.closeDrawer(drawerPane);
// create listener for drawer layout
actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open , R.string.drawer_close)
{
#Override
public void onDrawerOpened(View drawerView)
{
invalidateOptionsMenu();
super.onDrawerOpened(drawerView);
}
#Override
public void onDrawerClosed(View drawerView)
{
invalidateOptionsMenu();
super.onDrawerClosed(drawerView);
}
};
drawerLayout.setDrawerListener(actionBarDrawerToggle);
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
final Menu mMenu = menu;
MenuInflater mif = getMenuInflater();
mif.inflate(R.menu.actionbar_icon_menu, menu);
// Cart Icon in Action Bar
final View menu_hotlist = menu.findItem(R.id.cart_icon).getActionView();
ui_hot = (TextView) menu_hotlist.findViewById(R.id.hotlist_Cart_hot);
updateHotCount(hot_number);
menu_hotlist.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Constants.lastDetails = false;
FragmentManager fragmentManager = getSupportFragmentManager();
ActivityCart cart = new ActivityCart();
fragmentManager.beginTransaction().replace(R.id.main_content, cart).commit();
setTitle("Cart");
drawerLayout.closeDrawer(drawerPane);
}
});
return super.onCreateOptionsMenu(menu);
}
#Override
public boolean onOptionsItemSelected(MenuItem item){
if(actionBarDrawerToggle.onOptionsItemSelected(item))
return true;
// Take appropriate action for each action item click
switch (item.getItemId()) {
case R.id.cart_icon:
// search action
FragmentManager fragmentManager = getSupportFragmentManager();
ActivityCart cart = new ActivityCart();
fragmentManager.beginTransaction().replace(R.id.main_content, cart).commit();
setTitle("Cart");
drawerLayout.closeDrawer(drawerPane);
return true;
case R.id.action_search:
return true;
}
return super.onOptionsItemSelected(item);
}
#Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
actionBarDrawerToggle.syncState();
}
#Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() >0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
#Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
if (mNaviFirstHit) {
mNaviFirstHit = false;
return true;
}
else {
if(itemPosition == 0)
Constants.isCallParent = true;
else
Constants.isCallParent = false;
Constants.SubCatposition = itemPosition;
ProductsListFragment productsListFragment = new ProductsListFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.main_content, productsListFragment).commit();
//lvNav.setItemChecked(position, true);
drawerLayout.closeDrawer(drawerPane);
//Toast.makeText(this, "Clicked at: " + itemPosition, Toast.LENGTH_LONG).show();
//mNaviFirstHit = true;
return true;
}
}
public void setLoginDetails(){
Customer_email.setText(Constants.Customer_Email);
Customer_name.setText("Welcome, " + Constants.Customer_FirstName);
Customer_name.setText(Constants.Customer_LastName);
}
}
ProductListFragment.java
package com.prashant;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.GridView;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.util.ArrayList;
/**
* Created by prashant.
*/
public class ProductsListFragment extends Fragment {
ProgressDialog pdialog;
View v;
Button sort,filter;
//ListView list;
GridView list;
LazyImageLoadAdapter adapter;
private static ProductsListFragment sProductsListFragment;
// Title navigation Spinner data
private ArrayList<SpinnerNavItem> navSpinner;
// Navigation adapter
private TitleNavigationAdapter titleNavigationAdapter;
#Override
public void onCreate(#Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//((AppCompatActivity) getActivity()).getSupportActionBar().setSubtitle(null);
//((MainActivity)getActivity()).actionBarDrawerToggle.setDrawerIndicatorEnabled(true);
// Action Bar
((MainActivity)getActivity()).getSupportActionBar().setDisplayShowTitleEnabled(false);
((MainActivity)getActivity()).getSupportActionBar().setNavigationMode(((MainActivity) getActivity()).getSupportActionBar().NAVIGATION_MODE_LIST);
}
#Override
public View onCreateView(LayoutInflater inflater,#Nullable ViewGroup container,#Nullable Bundle savedInstanceState) {
v = inflater.inflate(R.layout.productlistfragment, container, false);
sProductsListFragment = this;
list=(GridView)v.findViewById(R.id.list);
sort = (Button) v.findViewById(R.id.btn_sort);
sort.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
startActivity(new Intent(getActivity(),Pop.class));
}
});
//clearData();
return v;
}
#Override
public void onResume() {
super.onResume();
((AppCompatActivity) getActivity()).getSupportActionBar().setSubtitle(null);
((MainActivity)getActivity()).actionBarDrawerToggle.setDrawerIndicatorEnabled(true);
}
#Override
public void onPause() {
super.onPause();
((MainActivity)getActivity()).getSupportActionBar().setDisplayShowTitleEnabled(true);
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Constants.cartEntry=0;
//check Product Description fragment is called or not
if (!Constants.lastDetails) {
clearData();
new getDataTask().execute();
}
else{
String[] images=new String[Constants.Product_image.size()];
images=Constants.Product_image.toArray(images);
adapter = new LazyImageLoadAdapter(getActivity(), images);
//Set adapter to listview
list.setAdapter(adapter);
Constants.lastDetails = false;
}
}
// clear arraylist variables before used
void clearData(){
Constants.Product_ID.clear();
Constants.Product_name.clear();
Constants.Product_price.clear();
Constants.Product_image.clear();
Constants.Product_qty.clear();
Constants.Product_specialPrice.clear();
Constants.Product_desc.clear();
}
#Override
public void onDestroy()
{
// Remove adapter refference from list
//list.setAdapter(null);
//Refresh cache directory downloaded images
//adapter.imageLoader.clearCache();
//adapter.notifyDataSetChanged();
super.onDestroy();
}
public View.OnClickListener listener=new View.OnClickListener(){
#Override
public void onClick(View arg0) {
//Refresh cache directory downloaded images
adapter.imageLoader.clearCache();
adapter.notifyDataSetChanged();
}
};
public void onItemClick(int mPosition)
{
/*
Intent intent = new Intent(getActivity(), ProductDescription.class);
intent.putExtra("descposition", mPosition);
startActivity(intent);*/
Constants.product_position = mPosition;
ProductDescription productDescription=new ProductDescription();
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.main_content, productDescription, null).addToBackStack("productDescription").commit();
//((AppCompatActivity) getActivity()).getSupportActionBar().setSubtitle(Constants.Product_name.get(mPosition));
getActivity().setTitle("Product Details");
}
// Image urls used in LazyImageLoadAdapter.java file
public class getDataTask extends AsyncTask<Void, Void, Void> {
#Override
protected void onPreExecute() {
super.onPreExecute();
if (pdialog==null){
pdialog=new ProgressDialog(getActivity());
pdialog.setMessage("Loading...");
pdialog.setCanceledOnTouchOutside(getRetainInstance());
pdialog.setCancelable(false);
pdialog.show();
}
}
#Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
// parse json data from server in background
parseJSONData();
return null;
}
#Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
// Create custom adapter for listview
String[] images=new String[Constants.Product_image.size()];
images=Constants.Product_image.toArray(images);
adapter = new LazyImageLoadAdapter(getActivity(), images);
//Set adapter to listview
list.setAdapter(adapter);
if (!Constants.isSubCategory) {
Constants.isSubCategory = true;
// Spinner title navigation data
navSpinner = new ArrayList<SpinnerNavItem>();
navSpinner.add(new SpinnerNavItem(Constants.Category_name.get(Constants.position - 1), R.drawable.icon));
for (int i = 0; i < Constants.SubCategory_ID.size(); i++) {
navSpinner.add(new SpinnerNavItem(Constants.SubCategory_name.get(i), R.drawable.icon));
}
// title drop down adapter
titleNavigationAdapter = new TitleNavigationAdapter(getActivity(), navSpinner);
// assigning the spinner navigation
((MainActivity) getActivity()).getSupportActionBar().setListNavigationCallbacks(titleNavigationAdapter, ((MainActivity) getActivity()));
}
if (pdialog.isShowing()){
pdialog.dismiss();
pdialog=null;
}
if (Constants.Product_ID.isEmpty()){
// Toast.makeText(getActivity(), "No products found!!Check your internet connection!!", Toast.LENGTH_LONG).show();
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("No Product Found!!").setMessage("Slow Internet/Check Your Internet Settings").create().show();
}
/*for (int i = 0; i < Constants.Product_ID.size(); i++) {
Toast.makeText(getActivity(), "__" + Constants.Product_ID.get(i) + "__" + i, Toast.LENGTH_SHORT).show();
}*/
// if internet connection and data available show data on list
// otherwise, show alert text
}
}
// method to parse json data from server
public void parseJSONData(){
SoapObject request = new SoapObject(Constants.NAMESPACE, "catalogCategoryAssignedProducts");
String Catid;
// add paramaters and values
request.addProperty("sessionId", Constants.sessionId);
if ((!Constants.isSubCategory) || Constants.isCallParent) {
Constants.isCallParent = false;
request.addProperty("categoryId", String.valueOf(Constants.Category_ID.get(Constants.position - 1)));
Catid=String.valueOf(Constants.Category_ID.get(Constants.position - 1));
}
else {
request.addProperty("categoryId", String.valueOf(Constants.SubCategory_ID.get(Constants.SubCatposition - 1)));
Catid=String.valueOf(Constants.SubCategory_ID.get(Constants.SubCatposition - 1));
}
api_calls call=new api_calls();
call.getCategoryProducts(Catid);
if (!Constants.isSubCategory) {
Constants.SubCategory_ID.clear();
Constants.SubCategory_name.clear();
parseJSONDataSubCategory();
}
}
// method to parse json data from server
public void parseJSONDataSubCategory(){
try {
SoapObject request = new SoapObject(Constants.NAMESPACE, "catalogCategoryTree");
// add paramaters and values
request.addProperty("sessionId", Constants.sessionId);
request.addProperty("parentId", Constants.Category_ID.get(Constants.position-1));
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
//Web method call
HttpTransportSE androidHttpTransport = new HttpTransportSE(Constants.URL);
androidHttpTransport.debug = true;
androidHttpTransport.call("", envelope);
//get the response
SoapObject result2 = (SoapObject) envelope.getResponse();
SoapObject pii2 = (SoapObject) result2.getProperty(5);
for (int i = 0; i < pii2.getPropertyCount(); i++) {
//JSONObject object = data.getJSONObject(i);
SoapObject pii = (SoapObject)pii2.getProperty(i);
//JSONObject category = object.getJSONObject("Category");
Constants.SubCategory_ID.add(Long.parseLong(pii.getProperty(0).toString()));
Constants.SubCategory_name.add(pii.getProperty(2).toString());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
// Making Sub Drawer for Sub Category
public static ProductsListFragment getInstance() {
return sProductsListFragment;
}
public void onBackPressed()
{
FragmentManager fm = getActivity().getSupportFragmentManager();
fm.popBackStack();
}
}
Logcat
02-11 12:39:57.838 12954-14579/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #5
Process: com.softonetech.www.takenick, PID: 12954
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
at java.util.ArrayList.get(ArrayList.java:310)
at com.prashant.ProductsListFragment.parseJSONData(ProductsListFragment.java:250)
at com.prashant.ProductsListFragment$getDataTask.doInBackground(ProductsListFragment.java:185)
at com.prashant.ProductsListFragment$getDataTask.doInBackground(ProductsListFragment.java:167)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
try cancelling your Async task execution during onBackPressed()
Declare:
Public getDataTask asyncFetchData;
asyncFetchData = new getDataTask();
asyncFetchData.execute();
Now in your Fragment:
#Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
#Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (asyncFetchData!= null)
asyncFetchData.cancel(true);
Toast.makeText(getActivity(), "Back pressed...", Toast.LENGTH_SHORT).show();
return true;
}
}
return false;
}
});
}
Also in doInBackground notify the AsyncTask to cancel execution
#Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
// parse json data from server in background
parseJSONData();
if (isCancelled()) break;
return null;
}
Hi I have an Activity which user open upon click on a TAB. Actually I have a ViewGroup and Tabactivity as Main Activity. on the first tab I have three activity.
Now in an activity I have a list view (custom) populating on Oncreate and a ViewFlipper (only adding view) in Onresume using AsyncTask.
In that asynctask in Pre Execute if I add code for loader it gives error. Also If I do not show the loader the screen is freezing until the Async task finished.
I actually want to load the list view first and then in background run the async task with a loader. Also does not want to freeze the screen.
Here Is My Acivity
package thai.phrasi.ctech.com.phrasi;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Typeface;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;
import com.squareup.picasso.Picasso;
import org.json.JSONObject;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
public class WordActivity extends ActionBarActivity {
categories category_obj;
word word_obj;
wordDB wordDb;
WordAdapter adapter;
MediaPlayer mPlayer;
boolean doubleBackToExitPressedOnce = false;
public static ViewFlipper viewFlipper;
public View view;
private static ProgressDialog pleaseWaitDialog;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_word);
viewFlipper = new ViewFlipper(this);
viewFlipper.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
TextView txt = (TextView) findViewById(R.id.phraseListHeading);
Typeface font = Typeface.createFromAsset(WordActivity.this.getAssets(), "fonts/NotoSans-Regular.ttf");
String categoryName = getIntent().getExtras().getString("categoryName").toUpperCase();
wordDb = new wordDB(getApplicationContext());
getAllWords();
//asyncLoadWordList task2 = new asyncLoadWordList(getApplicationContext());
//task2.execute();
txt.setTypeface(font);
txt.setText(categoryName);
ListView wordListView;
wordListView = (ListView)findViewById(R.id.list_view_word);
wordListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
#Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Object o = parent.getItemAtPosition(position);
word_obj = (word) o;
if(Integer.valueOf(word_obj.getCategoryId())>=0) {
Intent myIntent = new Intent(WordActivity.this, WordDetailsActivity.class);
myIntent.putExtra("word_obj", word_obj);
myIntent.putExtra("position",position);
myIntent.putExtra("currentClickedId", word_obj.getCsvWordId().toString());
myIntent.putExtra("favouriteFlag",0);
myIntent.putExtra("searchFlag",0);
myIntent.putExtra("searchString", "");
WordActivity.this.startActivity(myIntent);
}
}
});
ImageView backButton = (ImageView) findViewById(R.id.backButton);
backButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
Intent backIntent = new Intent(WordActivity.this, CategoryActivity.class);
View vw = FirstGroup.group.getLocalActivityManager().startActivity("CategoryActivity", backIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
FirstGroup.group.replaceView(vw);
viewFlipper.removeAllViews();
System.runFinalization();
Runtime.getRuntime().gc();
System.gc();
}
});
}
#Override
protected void onPause() {
super.onPause(); // Don't forget this line
stop();
}
public void stop(){
mPlayer=adapter.getMPlayerInstace();
if(mPlayer!=null){
mPlayer.stop();
mPlayer.release();
}
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_word, menu);
return true;
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
protected void onResume(){
super.onResume();
new Thread(new Runnable() {
public void run(){
//All your heavy stuff here!!!
category_obj = (categories) getIntent().getSerializableExtra("category_obj");
if(viewFlipper.getChildCount() == 0) {
asyncFlipperView task = new asyncFlipperView(getApplicationContext());
task.execute(new String[]{category_obj.getCsvCategoryId().toString()});
}
}
}).start();
}
public void getAllWords(){
category_obj = (categories) getIntent().getSerializableExtra("category_obj");
ArrayList<word> words = new ArrayList<word>();
Cursor row = wordDb.selectWordList(category_obj.getCsvCategoryId().toString());
words.add(new word("-1", "-1", "", "", "", "", "", "", "x.mp3", ""));
words.add(new word("-2", "-2", "", "", "", "", "", "", "x.mp3", ""));
row.moveToFirst();
while (!row.isAfterLast()) {
//Log.d("Data id: ", row.getString(2));
words.add( new word(row.getString(0),row.getString(1),row.getString(2),row.getString(3),row.getString(4),row.getString(5), row.getString(6),row.getString(7),row.getString(8),row.getString(9)));
row.moveToNext();
}
row.close();
adapter = new WordAdapter(WordActivity.this, words);
ListView listView = (ListView) findViewById(R.id.list_view_word);
listView.setAdapter(adapter);
}
#Override
public void onBackPressed() {
if (doubleBackToExitPressedOnce) {
super.onBackPressed();
return;
}
this.doubleBackToExitPressedOnce = true;
//Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast, (ViewGroup) findViewById(R.id.toast_layout_root));
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Double tap back button to exit.");
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER_HORIZONTAL, 0, 0);
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setView(layout);
toast.show();
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
doubleBackToExitPressedOnce = false;
}
}, 2000);
}
public class asyncLoadWordList extends AsyncTask<ArrayList<word>, Void, ArrayList<word>>{
private Context mContext;
public asyncLoadWordList(Context context) {
mContext = context;
}
protected void onPreExecute() {
//Start the splash screen dialog
/* if (pleaseWaitDialog == null)
pleaseWaitDialog= ProgressDialog.show(WordActivity.this,
"PLEASE WAIT",
"Getting results...",
false);
*/
}
#Override
protected ArrayList<word> doInBackground(ArrayList<word>... params) {
wordDb = new wordDB(mContext);
category_obj = (categories) getIntent().getSerializableExtra("category_obj");
ArrayList<word> words = new ArrayList<word>();
Cursor row = wordDb.selectWordList(category_obj.getCsvCategoryId().toString());
words.add(new word("-1", "-1", "", "", "", "", "", "", "x.mp3", ""));
words.add(new word("-2", "-2", "", "", "", "", "", "", "x.mp3", ""));
row.moveToFirst();
while (!row.isAfterLast()) {
//Log.d("Data id: ", row.getString(2));
words.add( new word(row.getString(0),row.getString(1),row.getString(2),row.getString(3),row.getString(4),row.getString(5),row.getString(6),row.getString(7),row.getString(8),row.getString(9)));
row.moveToNext();
}
row.close();
return words;
}
protected void onPostExecute(ArrayList<word> result) {
adapter = new WordAdapter(WordActivity.this, result);
ListView listView = (ListView) findViewById(R.id.list_view_word);
listView.setAdapter(adapter);
if (pleaseWaitDialog != null) {
pleaseWaitDialog.dismiss();
pleaseWaitDialog = null;
}
asyncFlipperView task = new asyncFlipperView(getApplicationContext());
task.execute(new String[]{category_obj.getCsvCategoryId().toString()});
}
}
public class asyncFlipperView extends AsyncTask<String, Void, String[]> {
String categoryId;
private Context mContext;
wordDB wordDb;
Cursor row;
JSONObject json;
View view;
//private ProgressDialog dialog = new ProgressDialog(WordActivity.this);
public asyncFlipperView(Context context) {
mContext = context;
}
protected void onPreExecute() {
//Start the splash screen dialog
}
#Override
protected String[] doInBackground(String... params) {
categoryId = params[0];
json = new JSONObject();
/*do application level task*/
GlobalState state = ((GlobalState) mContext);
state.doAction();
/*Ends*/
wordDb = new wordDB(mContext);
row = wordDb.selectWordList(categoryId);
Log.d("Tag: search result", row.getString(2).toString());
return new String[]{categoryId};
}
protected void onPostExecute(String[] result) {
categoryId = result[0];
ImageView phraseImage = null;
Typeface font = Typeface.createFromAsset(WordActivity.this.getAssets(), "fonts/NotoSans-Regular.ttf");
row.moveToFirst();
while (!row.isAfterLast()) {
/*phrase Image*/
Integer fileNameLength = row.getString(5).toString().length();
String fileName = row.getString(5).toString();
String imageFile = fileName.substring(0, fileNameLength - 4);
//viewFlipper = (ViewFlipper)findViewById(R.id.flipper);
LayoutInflater inflater = getLayoutInflater();
view = inflater.inflate(R.layout.word_details_flipper_view, null);
TextView tv = (TextView) view.findViewById(R.id.text_english);
tv.setTypeface(font);
tv.setText(row.getString(2).toString());
String picName = row.getString(6).toString();
picName = picName.replace(".png", "");
Uri url1 = Uri.parse("android.resource://" + mContext.getPackageName() + "/drawable/" + picName);
ImageView backgroundImage = (ImageView) view.findViewById(R.id.backgroundImage);
Picasso.with(mContext).load(url1).fit().centerCrop().into(backgroundImage);
TextView tvTranslated = (TextView) view.findViewById(R.id.translated_phrase);
tvTranslated.setTypeface(font);
tvTranslated.setText(row.getString(3).toString());
TextView pronounce = (TextView) view.findViewById(R.id.pronounce);
pronounce.setTypeface(font);
pronounce.setText(row.getString(4).toString());
phraseImage = (ImageView) view.findViewById(R.id.phrase_image);
Uri url = Uri.parse("android.resource://" + mContext.getPackageName() + "/drawable/" + imageFile);
Picasso.with(mContext).load(url).resize(576, 888).into(phraseImage);
view.setTag(R.string.csvId, row.getString(0).toString());
viewFlipper.addView(view);
row.moveToNext();
}
row.close();
}
private Context getDialogContext() {
Context context;
if (getParent() != null) context = getParent();
else context = WordActivity.this;
return context;
}
}
}
I'm trying to retrieve my data from database into checkbox list view, but I'm unable to do so. Below is the code that I'm already using to retrieve data from database into list view. But what I want is to retrieve into checkbox list view type so that I can check it. How can I do that?
public class StudentDetailActivity extends Activity implements OnClickListener, OnItemClickListener {
private ListView uGraduateNamesListView;
private Button addNewUndergraduateButton;
private ListAdapter uGraduateListAdapter;
private ArrayList<UndergraduateDetailsPojo> pojoArrayList;
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_student_detail);
uGraduateNamesListView = (ListView) findViewById(R.id.uGraduateListView);
uGraduateNamesListView.setOnItemClickListener(this);
addNewUndergraduateButton = (Button) findViewById(R.id.namesListViewAddButton);
addNewUndergraduateButton.setOnClickListener(this);
pojoArrayList = new ArrayList<UndergraduateDetailsPojo>();
uGraduateListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, populateList());
uGraduateNamesListView.setAdapter(uGraduateListAdapter);
}
#Override
public void onClick(View v) {
Intent addNewUndergraduateIntent = new Intent(this, AddNewUndergraduateActivity.class);
startActivity(addNewUndergraduateIntent);
}
public List<String> populateList(){
List<String> uGraduateNamesList = new ArrayList<String>();
AndroidOpenDbHelper openHelperClass = new AndroidOpenDbHelper(this);
SQLiteDatabase sqliteDatabase = openHelperClass.getReadableDatabase();
Cursor cursor = sqliteDatabase.query(AndroidOpenDbHelper.TABLE_NAME_GPA, null, null, null, null, null, null);
startManagingCursor(cursor);
while (cursor.moveToNext()) {
String ugName = cursor.getString(cursor.getColumnIndex(AndroidOpenDbHelper.COLUMN_NAME_UNDERGRADUATE_NAME));
String ugUniId = cursor.getString(cursor.getColumnIndex(AndroidOpenDbHelper.COLUMN_NAME_UNDERGRADUATE_UNI_ID));
double ugGpa = cursor.getDouble(cursor.getColumnIndex(AndroidOpenDbHelper.COLLUMN_NAME_UNDERGRADUATE_GPA));
UndergraduateDetailsPojo ugPojoClass = new UndergraduateDetailsPojo();
ugPojoClass.setuGraduateName(ugName);
ugPojoClass.setuGraduateUniId(ugUniId);
ugPojoClass.setuGraduateGpa(ugGpa);
pojoArrayList.add(ugPojoClass);
uGraduateNamesList.add(ugName);
}
sqliteDatabase.close();
return uGraduateNamesList;
}
#Override
protected void onResume() {
super.onResume();
pojoArrayList = new ArrayList<UndergraduateDetailsPojo>();
uGraduateListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, populateList());
uGraduateNamesListView.setAdapter(uGraduateListAdapter);
}
#Override
protected void onStart() {
super.onStart();
pojoArrayList = new ArrayList<UndergraduateDetailsPojo>();
uGraduateListAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, populateList());
uGraduateNamesListView.setAdapter(uGraduateListAdapter);
}
public void onClick1 (View view)
{
Intent newIntent;
newIntent=new Intent(this,HomePageActivity.class);
startActivity(newIntent);
}
#Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Toast.makeText(getApplicationContext(), "Clicked on :" + arg2, Toast.LENGTH_SHORT).show();
Intent updateDeleteUgraduateIntent = new Intent(this, UpdateDeleteUndergraduateActivity.class);
UndergraduateDetailsPojo clickedObject = pojoArrayList.get(arg2);
Bundle dataBundle = new Bundle();
dataBundle.putString("clickedUgraduateName", clickedObject.getuGraduateName());
dataBundle.putString("clickedUgraduateUniId", clickedObject.getuGraduateUniId());
dataBundle.putDouble("clickedUgraduateGpa", clickedObject.getuGraduateGpa());
updateDeleteUgraduateIntent.putExtras(dataBundle);
startActivity(updateDeleteUgraduateIntent);
}
}
You can use ListActivity Provided in Android.
You only have to manage your data to required format for this ListActivity.
You Can place action on button instead of Menu Option.
package your_package_name;
import android.app.ListActivity;
import android.app.NotificationManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class your_activity_name extends ListActivity {
private static final int checkedItem= 0;
private String[] databaseContent;
String checkedItems = new String(); // comma separated
String uncheckedItems = new String(); // comma separated
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
databaseContent = your_data_from_database // this array should contain your data from database.
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice, databaseContent));
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
#Override
public boolean onCreateOptionsMenu(Menu menu) {
boolean result = super.onCreateOptionsMenu(menu);
menu.add(0, checkedItem, 0, R.string."String you want to show");
return result;
}
#Override
public boolean onMenuItemSelected(int featureId, MenuItem item)
{
switch(item.getItemId())
{
case checked:
{
int reqlength = getListAdapter().getCount();
for (int i = 0; i < reqlength ; i++)
{
if (getListView().isItemChecked(i)) {
checkedItems = checkedItems.concat(databaseContent[i]).concat(",");
}
else {
uncheckedItems = uncheckedItems.concat(databaseContent[i]).concat(",");
}
}
Thread thread = new Thread(){
#Override
public void run() {
if ( checkedItems.length() > 0 ||
uncheckedItems.length() > 0
)
{
//Here is your desired output in checkedItems & uncheckedItems
}
}
};
thread.start();
Toast.makeText(your_activity_name.this, R.string.your_string, Toast.LENGTH_SHORT).show();
finish();
return true;
}
}
return super.onMenuItemSelected(featureId, item);
}
#Override
protected void onPause()
{
super.onPause();
}
#Override
protected void onResume()
{
super.onResume();
}
}
For other way please see Link
Android ListView With Checkbox choice without using Built-in AistActivity
Hope this will resolve your problem.
I am pasring RSS Feed in my app when i parse only one then it run properly but i have 8 different URL address which want to set on buttons and i want to parse RSS Fedd for every button click.I am using SAX Parser. MY code is below
BaseFeedParser.java
package com.example.shareslab;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import com.example.shareslab.Message;
import android.sax.Element;
import android.sax.EndElementListener;
import android.sax.EndTextElementListener;
import android.sax.RootElement;
import android.util.Xml;
public class BaseFeedParser {
static String feedUrlString = "http://www.xxxx.com/rss.xml";
// names of the XML tags
static final String RSS = "rss";
static final String CHANNEL = "channel";
static final String ITEM = "item";
static final String PUB_DATE = "pubDate";
static final String DESCRIPTION = "description";
static final String LINK = "link";
static final String TITLE = "title";
private final URL feedUrl;
protected BaseFeedParser(){
try {
this.feedUrl = new URL(feedUrlString);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
protected InputStream getInputStream() {
try {
return feedUrl.openConnection().getInputStream();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public List<Message> parse() {
final Message currentMessage = new Message();
RootElement root = new RootElement(RSS);
final List<Message> messages = new ArrayList<Message>();
Element itemlist = root.getChild(CHANNEL);
Element item = itemlist.getChild(ITEM);
item.setEndElementListener(new EndElementListener(){
#Override
public void end() {
messages.add(currentMessage.copy());
}
});
item.getChild(TITLE).setEndTextElementListener(new EndTextElementListener(){
#Override
public void end(String body) {
currentMessage.setTitle(body);
}
});
item.getChild(LINK).setEndTextElementListener(new EndTextElementListener(){
#Override
public void end(String body) {
currentMessage.setLink(body);
}
});
item.getChild(DESCRIPTION).setEndTextElementListener(new EndTextElementListener(){
#Override
public void end(String body) {
currentMessage.setDescription(body);
}
});
item.getChild(PUB_DATE).setEndTextElementListener(new EndTextElementListener(){
#Override
public void end(String body) {
currentMessage.setDate(body);
}
});
try {
Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8, root.getContentHandler());
} catch (Exception e) {
throw new RuntimeException(e);
}
return messages;
}
}
I have 8 button and 8 URL address of RSS Feed and i want to parse for every it for every button
MessageList.java
package com.example.shareslab;
import java.util.ArrayList;
import java.util.Arrays;
import com.example.shareslab.R;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MessageList extends ListActivity implements OnClickListener {
Button home,socialmedia,tech,usworld,business,fashion,people,political;
public static String singleDescription;
public static String title,URLToPost,imageURL;
public static ArrayList<String> galleryImages;
private static class EfficientAdapter extends BaseAdapter
{
private LayoutInflater mInflater;
public EfficientAdapter(Context context)
{
mInflater = LayoutInflater.from(context);
}
#Override
public int getCount() {
System.out.println("description COUNT : "+SplashActivity.description.size());
return SplashActivity.description.size();
}
#Override
public Object getItem(int position) {
return position;
}
#Override
public long getItemId(int position) {
return position;
}
#Override
public View getView(final int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.inflate_list_item, null);
holder = new ViewHolder();
holder.title = (TextView) convertView.findViewById(R.id.inflate_title);
holder.des = (TextView) convertView.findViewById(R.id.inflate_description);
holder.im= (ImageView) convertView.findViewById(R.id.inflate_image);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
UrlImageViewHelper.setUrlDrawable(holder.im, SplashActivity.imageURLAmit.get(position),null);
holder.title.setText(SplashActivity.titles.get(position));
holder.des.setText(SplashActivity.description.get(position));
return convertView;
}
public static class ViewHolder {
TextView title,des;
ImageView im;
}
} // close class Efficent adapter
#Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
home=(Button)findViewById(R.id.buttonhome);
socialmedia=(Button)findViewById(R.id.buttonsocial);
tech=(Button)findViewById(R.id.buttontech);
usworld=(Button)findViewById(R.id.buttonusworld);
business=(Button)findViewById(R.id.buttonbusiness);
fashion=(Button)findViewById(R.id.buttonfashion);
people=(Button)findViewById(R.id.buttonpeople);
political=(Button)findViewById(R.id.buttonpolitical);
home.setOnClickListener(this);
socialmedia.setOnClickListener(this);
tech.setOnClickListener(this);
usworld.setOnClickListener(this);
business.setOnClickListener(this);
fashion.setOnClickListener(this);
people.setOnClickListener(this);
political.setOnClickListener(this);
ListView listView = getListView();
listView.setTextFilterEnabled(true);
this.setListAdapter(new EfficientAdapter(this));
listView.setOnItemClickListener(new OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
galleryImages=new ArrayList<String>();
singleDescription=SplashActivity.description.get(position);
title=SplashActivity.titles.get(position);
URLToPost=SplashActivity.link.get(position);
imageURL=SplashActivity.imageURLAmit.get(position);
System.out.println("ON CLICK URL: "+URLToPost);
galleryImages.addAll(Arrays.asList(SplashActivity.arrays[position]));
startActivity(new Intent(MessageList.this,MessageListDetail.class));
}
});
}
#Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
}
You could store the URL of each field as the tag of the corresponding button.
// ...
home.setOnClickListener(this);
home.setTag(new URL("http://example.com/feed1.xml"));
socialmedia.setOnClickListener(this);
socialmedia.setTag(new URL("http://example.com/feed2.xml"));
tech.setOnClickListener(this);
tech.setTag(new URL("http://example.com/feed3.xml"));
}
#Override
public void onClick(View v) {
URL feedUrl = (URL) v.getTag();
// Then do your thing
new FeedParser(feedUrl);
}
And make a public constructor for the parser:
public BaseFeedParser(URL feedUrl){
this.feedUrl = feedUrl;
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#drawable/background"
android:orientation="vertical" >
<TextView
android:id="#+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:text="SPORTS LIVE"
android:textColor="#000000"
android:textSize="25dp" />
<Button
android:id="#+id/button1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:layout_marginTop="48dp"
android:background="#drawable/nfl"/>
<Button
android:id="#+id/button2"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_alignLeft="#+id/button1"
android:layout_below="#+id/button1"
android:layout_gravity="center"
android:layout_marginTop="50dp"
android:background="#drawable/nba" />
<Button
android:id="#+id/button3"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_alignLeft="#+id/button2"
android:layout_below="#+id/button2"
android:layout_gravity="center"
android:layout_marginTop="50dp"
android:background="#drawable/mlb" />
<Button
android:id="#+id/button4"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_alignLeft="#+id/button3"
android:layout_below="#+id/button3"
android:layout_gravity="center"
android:layout_marginTop="50dp"
android:background="#drawable/ncaa" />
</LinearLayout>
public class MainActivity extends Activity {
Button NFL,NBA,MLB,NCAA;
Intent i;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NFL= (Button) findViewById(R.id.button1);
NBA= (Button) findViewById(R.id.button2);
MLB= (Button) findViewById(R.id.button3);
NCAA= (Button) findViewById(R.id.button4);
i= new Intent("idss.sportslive.All");
// NFL
NFL.setOnTouchListener( new OnTouchListener()
{
#Override
public boolean onTouch(View arg0, MotionEvent event) {
// TODO Auto-generated method stub
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
NFL.setBackgroundResource(R.drawable.nflhigh);
break;
case MotionEvent.ACTION_UP:
NFL.setBackgroundResource(R.drawable.nfl);
// i= new Intent("idss.sportslive.All");
i.putExtra("url", 0);
startActivity(i);
break;
}
return false;
}
});
// NBA
NBA.setOnTouchListener( new OnTouchListener()
{
#Override
public boolean onTouch(View arg0, MotionEvent event) {
// TODO Auto-generated method stub
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
NBA.setBackgroundResource(R.drawable.nbahigh);
break;
case MotionEvent.ACTION_UP:
NBA.setBackgroundResource(R.drawable.nba);
//i= new Intent("idss.sportslive.ALL");
i.putExtra("url", 1);
startActivity(i);
break;
}
return false;
}
});
//MLB
MLB.setOnTouchListener( new OnTouchListener()
{
#Override
public boolean onTouch(View arg0, MotionEvent event) {
// TODO Auto-generated method stub
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
MLB.setBackgroundResource(R.drawable.mlbhigh);
break;
case MotionEvent.ACTION_UP:
MLB.setBackgroundResource(R.drawable.mlb);
//i= new Intent("idss.sportslive.ALL");
i.putExtra("url", 2);
startActivity(i);
break;
}
return false;
}
});
//NCAA
NCAA.setOnTouchListener( new OnTouchListener()
{
#Override
public boolean onTouch(View arg0, MotionEvent event) {
// TODO Auto-generated method stub
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
NCAA.setBackgroundResource(R.drawable.ncaahigh);
break;
case MotionEvent.ACTION_UP:
NCAA.setBackgroundResource(R.drawable.ncaa);
//i= new Intent("idss.sportslive.ALL");
i.putExtra("url", 3);
startActivity(i);
break;
}
return false;
}
});
}
}
Parser
public class All extends Activity {
List headlines;
List links;
static Context c;
ProgressDialog pd;
List team1l,score1l,team2l,score2l,matchtype;
String url1[]={ "http://www.mpiii.com/scores/nfl.php/",
"http://www.mpiii.com/scores/nba.php/",
"http://www.mpiii.com/scores/mlb.php/",
"http://www.mpiii.com/scores/ncaa.php/"};
;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.listview_main);
pd= new ProgressDialog(this);
pd.setMessage("Loading....");
headlines = new ArrayList();
links = new ArrayList();
team1l= new ArrayList();
score1l= new ArrayList();
team2l= new ArrayList();
score2l= new ArrayList();
matchtype= new ArrayList();
c= this;
new TheTask().execute();
//System.out.println("URL iSSSSSSSSSSS"+d.get("url"));
}
class TheTask extends AsyncTask<Void, Void, Void>{
Bundle d;
URL url ;
#Override
protected void onPreExecute() {
//Intent intent= new Intent();
d= ((Activity) c).getIntent().getExtras();
pd.show();
}
#Override
protected Void doInBackground(Void... params) {
try {
if(d.get("url").toString().equals("0"))
{
url = new URL(url1[0]);
}
if(d.get("url").toString().equals("1"))
{
url = new URL(url1[1]);
}
if(d.get("url").toString().equals("2"))
{
url = new URL(url1[2]);
}
if(d.get("url").toString().equals("3"))
{
url = new URL(url1[3]);
}
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(false);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(url.openConnection().getInputStream(), "UTF_8");
//xpp.setInput(getInputStream(url), "UTF-8");
boolean insideItem = false;
// Returns the type of current event: START_TAG, END_TAG, etc..
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equalsIgnoreCase("item")) {
insideItem = true;
} else if (xpp.getName().equalsIgnoreCase("title")) {
if (insideItem)
headlines.add(xpp.nextText()); //extract the headline
} else if (xpp.getName().equalsIgnoreCase("link")) {
if (insideItem)
links.add(xpp.nextText()); //extract the link of article
}
}else if(eventType==XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("item")){
insideItem=false;
}
eventType = xpp.next(); //move to next element
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
for(int i=0;i<headlines.size();i++)
{
String s=headlines.get(i).toString();
Pattern pc = Pattern.compile("([a-zA-Z ]+)\\s+(\\d+)\\s+([a-zA-Z ]+)\\s+(\\d+)\\s+\\((\\w+)\\)");
Matcher matcher = pc.matcher(s);
while (matcher.find( ))
{
String team1 = matcher.group(1);
String score1 = matcher.group(2);
String team2 = matcher.group(3);
String score2 = matcher.group(4);
String result = matcher.group(5);
team1l.add(team1);
score1l.add(score1);
team2l.add(team2);
score2l.add(score2);
matchtype.add(result);
System.out.println( team1 + " scored " + score1 + ", " + team2 + " scored " + score2 + ", which was " + result);
}
}
return null;
}
#Override
protected void onPostExecute(Void result) {
setContentView(R.layout.listview_main);
if(CheckNetwork.isInternetAvailable(c))
{
if(team1l.isEmpty())
{
Toast.makeText(c, "No data Available now. Try again Later", 1000).show();
finish();
}
{
ListView lv= (ListView) findViewById(R.id.list1);
lv.setAdapter(new CustomAdapter(getApplicationContext(),team1l,score1l,team2l,score2l,matchtype,links));
//setContentView(R.layout.contentcatalog);
// setUI();
pd.dismiss();
}
}
else
{
Toast.makeText(c, "Check Network Connection!. Try again Later", 1000).show();
finish();
}
}
}
}
I am not sure if its the right approach.. I had a similar requirement to parse rss feed based on button click.Hope this helps