Related
My issue is i have a list of products on my listview, when i select one of the values from my spinner i save it and send it to retrieve different values from my mysql database, The problem i have is that my listview wont update after i perform the onclick event on my spinner, what am I doing wrong? I dont know if i managed to explain correctly what i want to say, thank you for your help
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
public void onItemSelected (AdapterView < ? > parent, View view,int pos, long id)
{
filtracat();
}
private void filtracat() {
cat = spinner.getSelectedItemPosition()+1;
valor = String.valueOf(cat);
Toast.makeText(getApplicationContext(),valor,Toast.LENGTH_SHORT).show();
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(JSON_CAT, new Response.Listener<JSONArray>() {
#Override
public void onResponse(JSONArray response) {
hideDialog();
//parsing json
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
Anuncios item = new Anuncios();
item.setKey(obj.getString("key"));
item.setTitulo(obj.getString("titulo"));
item.setImageID(obj.getString("imageID"));
item.setModelo(obj.getString("modelo"));
item.setPreco(obj.getString("preco"));
//gonna set category here
// item.setCategoria(obj.getString("categoria"));
//add to array
array2.add(item);
} catch (JSONException ex) {
ex.printStackTrace();
}
}
adapter.notifyDataSetChanged();
}
}, new ErrorListener() {
#Override
public void onErrorResponse(VolleyError error) {
}
}) {
#Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("valor", valor);
return params;
}
};
AppController.getmInstance().addToRequesQueue(jsonArrayRequest);
}
the original data from my listview comes from
private void sendRequest() {
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(JSON_URL, new Response.Listener<JSONArray>() {
#Override
public void onResponse(JSONArray response) {
hideDialog();
//parsing json
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
Anuncios item = new Anuncios();
item.setKey(obj.getString("key"));
item.setTitulo(obj.getString("titulo"));
item.setImageID(obj.getString("imageID"));
item.setModelo(obj.getString("modelo"));
item.setPreco(obj.getString("preco"));
//gonna set category here
// item.setCategoria(obj.getString("categoria"));
//add to array
array.add(item);
} catch (JSONException ex) {
ex.printStackTrace();
}
}
adapter.notifyDataSetChanged();
}
}, new ErrorListener() {
#Override
public void onErrorResponse(VolleyError error) {
}
});
AppController.getmInstance().addToRequesQueue(jsonArrayRequest);
}
should i be using the same array to update the data?
You can try
Create Two object
ArrayList<MobileKeyModel> dropDownModels = new ArrayList<MobileKeyModel>();
ArrayList<Object> addList = new ArrayList<Object>();
You can get response from database
private void filtracat() {
StringRequest stringRequest = new StringRequest(Request.Method.POST, JSON_URL,
new Response.Listener<String>() {
#Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray loginNodes = jsonObject.getJSONArray("parentnodesList");
for (int i = 0; i < loginNodes.length(); i++) {
JSONObject jo = loginNodes.getJSONObject(i);
String key = jo.getString("key");
String titulo = jo.getString("titulo");
addList.add(key);
addList.add(titulo);
}
pupulateDropDownList();
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
#Override
public void onErrorResponse(VolleyError error) {
try {
//Respose Error
} catch (Exception e) {
}
}
}) {
#Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
populate value to listview
void pupulateDropDownList() {
if (addList != null) {
for (Iterator<Object> i = addList.iterator(); i.hasNext(); ) {
MobileKeyModel menuModel = new MobileKeyModel(i.next().toString(), i.next().toString());
dropDownModels.add(menuModel);
}
ArrayAdapter adapter = new ArrayAdapter(this, R.layout.spinner_text, dropDownModels);
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown);
listView.setAdapter(adapter);
}
}
Model is also here
public class MobileKeyModel {
public String key = "";
public String titulo = "";
public MobileKeyModel(String key, String titulo) {
this.key = key;
this.titulo = titulo;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
}
Note Your json must be look like
{"parentnodesList":[{"key":"your key value here","titulo":"Your title"}]}
I have an ArrayList listwriter which I populate using this AsyncTask.
class LoadAllGamesWhenNull extends AsyncTask<String, String, String> {
private String id;
private String stake;
private String user;
private String returns;
private String teams;
private String status;
// *//**
// * Before starting background thread Show Progress Dialog
// *//*
#Override
protected void onPreExecute() {
super.onPreExecute();
}
// *//**
// * getting All products from url
// *//*
protected String doInBackground(String... args) {
// Building Parameters
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url_all_games);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("email", name));
try {
post.setEntity(new UrlEncodedFormEntity(params));
} catch (IOException ioe) {
ioe.printStackTrace();
}
try {
HttpResponse response = client.execute(post);
Log.d("Http Post Response:", response.toString());
HttpEntity httpEntity = response.getEntity();
InputStream is = httpEntity.getContent();
JSONObject jObj = null;
String json = "";
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
if (!line.startsWith("<", 0)) {
if (!line.startsWith("(", 0)) {
sb.append(line + "\n");
}
}
}
is.close();
json = sb.toString();
json = json.substring(json.indexOf('{'));
Log.d("sb", json);
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
Log.d("json", jObj.toString());
try {
allgames = jObj.getJSONArray(TAG_BET);
Log.d("allgames", allgames.toString());
ArrayList<BetDatabaseSaver> listofbets = new ArrayList<>();
// looping through All Products
for (int i = 0; i < allgames.length(); i++) {
JSONObject c = allgames.getJSONObject(i);
// Storing each json item in variable
String id = c.getString(TAG_ID);
String user = c.getString(TAG_USER);
String returns = c.getString(TAG_RETURNS);
String stake = c.getString(TAG_STAKE);
String status = c.getString(TAG_STATUS);
String Teams = c.getString(TAG_TEAMS);
Log.d("id", id);
Log.d("user", user);
Log.d("returns", returns);
Log.d("stake", stake);
Log.d("status", status);
Log.d("teams", Teams);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_ID, id);
map.put(TAG_TEAMS, Teams);
map.put(TAG_USER, user);
map.put(TAG_RETURNS, returns);
map.put(TAG_STAKE, stake);
map.put(TAG_STATUS, status);
if (status.equals("open")) {
useroutcomes.put(id.substring(0, 10), Teams);
}
listwriter.add(i, new BetDisplayer(user, id, Integer.parseInt(stake), Integer.parseInt(returns), status, "","",Teams));
Log.d("map", map.toString());
// adding HashList to ArrayList
bet.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
return "";
}
#Override
protected void onPostExecute(String param) {
// dismiss the dialog after getting all products
// updating UI from Background Thread
String ultparam = "";
int i = 0;
for (HashMap<String, String> a : bet) {
String teams = a.get(TAG_TEAMS);
Map<String, String> listofteams = new HashMap<>();
Pattern p = Pattern.compile("[(](\\d+)/([1X2])[)]");
Matcher m = p.matcher(teams);
Log.d("printa", teams);
while (m.find()) {
listofteams.put(m.group(1), m.group(2));
}
Log.d("dede", listofteams.toString());
String c = "";
for (String x : listofteams.keySet()) {
String b = x + ",";
c = c + b;
}
Log.d("C", c);
c = c.substring(0, c.lastIndexOf(","));
// Log.d("Cproc", c);
ultparam = ultparam + a.get(TAG_ID).substring(0, 10) + c + "//";
passtocheck.add(listofteams);
allopens.put(Integer.toString(i), a.get(TAG_STATUS));
i++;
i++;
}
ultparam = ultparam.substring(0, ultparam.lastIndexOf("//"));
Log.d("ULTPARAM", ultparam);
CheckBet checker = new CheckBet(ultparam, passtocheck);
HashMap<String, String> finaloutcomes = checker.checkbetoutcome();
Log.d("Finaloutcomes", finaloutcomes.toString());
finaloutcomess = finaloutcomes.toString();
for (String x : finaloutcomes.keySet()) {
for (int p = 0; p < listwriter.size(); p++) {
if (listwriter.get(p).getId().substring(0, 10).equals(x)) {
String[] finaloutcomearray = finaloutcomes.get(x).split(" ");
String[] useroutcomearray = listwriter.get(p).getSelections().split(" ");
for (int r = 0; r < finaloutcomearray.length; r++) {
Log.d("finaloutcomearray", finaloutcomearray[r]);
Log.d("useroutcomearray", useroutcomearray[r]);
String[] indfinaloutcomesarray = finaloutcomearray[r].split("\\)");
String[] induseroutcomearray = useroutcomearray[r].split("\\)");
for (int d = 0; d < indfinaloutcomesarray.length; d++) {
Log.d("indfinaloutcome", indfinaloutcomesarray[d]);
Log.d("induseroutcome", induseroutcomearray[d]);
finalhash.put(indfinaloutcomesarray[d].substring(1, indfinaloutcomesarray[d].lastIndexOf("/")), indfinaloutcomesarray[d].substring(indfinaloutcomesarray[d].lastIndexOf("/") + 1));
userhash.put(induseroutcomearray[d].substring(1, induseroutcomearray[d].lastIndexOf("/")), induseroutcomearray[d].substring(induseroutcomearray[d].lastIndexOf("/") + 1));
}
}
Log.d("FINALHASHfinal", finalhash.toString());
listwriter.get(p).setActualselections(finalhash.toString());
listwriter.get(p).setUserselections(userhash.toString());
Log.d("USERHASHfinal", userhash.toString());
listwriter.get(p).setStatus("won");
for (String id : userhash.keySet()) {
if (finalhash.get(id).equals("null")) {
listwriter.get(p).setStatus("open");
} else if (!(finalhash.get(id).equals(userhash.get(id)))) {
listwriter.get(p).setStatus("lost");
break;
}
}
finalhash.clear();
userhash.clear();
currentitem = listwriter.get(p);
if (currentitem.getStatus().equals("open")) {
} else {
if (currentitem.getStatus().equals("won")) {
valuechange = valuechange + currentitem.getReturns() - (currentitem.getStake());
}
String c = currentitem.getId() + "," + currentitem.getStatus() + "//";
updateparam = updateparam + c;
Log.d("UPDATEPARAM1", updateparam);
}
}
}
}
Log.d("Listwriterbefore",listwriter.toString());
session.setListwriter(listwriter);
new UpdateBetStatus().execute();
Intent g = new Intent(loadingscreen.this,DisplayAllBets.class);
startActivity(g);
finish();
}}
This is done on my loadscreen Activity and I want to set the listwriter to my SharedPreferences so that I can use it in another Activity. This is my session manager class. The logging in the AsyncTask shows me that the listwriter gets populated correctly. However, when I call on the getlistwriter in my other class I receive an empty ArrayList. I can't see where the error is.
public class SessionManager {
// LogCat tag
private static String TAG = SessionManager.class.getSimpleName();
private ArrayList<BetDisplayer> listwriter = new ArrayList<>();
// Shared Preferences
SharedPreferences pref;
Editor editor;
Context _context;
// Shared pref mode
int PRIVATE_MODE = 0;
// Shared preferences file name
private static final String PREF_NAME = "AndroidHiveLogin";
private static final String KEY_IS_LOGGEDIN = "isLoggedIn";
public static final String USERNAME = "username";
public SessionManager(Context context) {
this._context = context;
pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
}
public ArrayList<BetDisplayer> getListwriter() {
return listwriter;
}
public void setListwriter(ArrayList<BetDisplayer> listwriter) {
this.listwriter = listwriter;
}
public void setLogin(boolean isLoggedIn, String username) {
editor.putBoolean(KEY_IS_LOGGEDIN, isLoggedIn);
editor.putString(USERNAME, username);
// commit changes
editor.commit();
Log.d(TAG, "User login session modified!");
}
public HashMap<String, String> getUserDetails(){
HashMap<String, String> user = new HashMap<String, String>();
// user name
user.put(USERNAME, pref.getString(USERNAME, null));
// return user
return user;
}
public boolean isLoggedIn(){
return pref.getBoolean(KEY_IS_LOGGEDIN, false);
}}
Code used to retrieve listwriter
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_all_bets);
menu menu = (menu)
getFragmentManager().findFragmentById(R.id.fragment);
menu.updateinfo(getName());
session = new SessionManager(getApplicationContext());
HashMap<String, String> user = session.getUserDetails();
name = user.get(SessionManager.USERNAME);
listwriter = session.getListwriter();
AppController class :
public class AppController extends Application {
public static final String TAG = AppController.class.getSimpleName();
private RequestQueue mRequestQueue;
private static AppController mInstance;
private ArrayList<HashMap<String, String>> gamesList;
public ArrayList<HashMap<String, String>> getGamesList() {
return gamesList;
}
public void setGamesList(ArrayList<HashMap<String, String>> gamesList) {
this.gamesList = gamesList;
}
#Override
public void onCreate() {
super.onCreate();
mInstance = this;
}
public static synchronized AppController getInstance() {
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
mRequestQueue = Volley.newRequestQueue(getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req, String tag) {
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
getRequestQueue().add(req);
}
public <T> void addToRequestQueue(Request<T> req) {
req.setTag(TAG);
getRequestQueue().add(req);
}
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
In your SessionManager you're not saving your List into SharedPrefs. You should do something like this:
public static final String MY_LIST = "my_list";
private static final Type LIST_TYPE = new TypeToken<List<BetDisplayer>>() {}.getType();
to save:
public void setListwriter(ArrayList<BetDisplayer> listwriter) {
this.listwriter = new ArrayList<BetDisplayer>(listwriter);
mPrefs.edit()
.putString(MY_LIST, new Gson().toJson(listwriter));
.commit();
}
to load:
public ArrayList<BetDisplayer> getListwriter() {
if (listwriter == null) {
listwriter = new Gson().fromJson(mPrefs.getString(MY_LIST, null), LIST_TYPE);
if(listwriter == null){
listwriter = new ArrayList<BetDisplayer>();
}
}
return listwriter;
}
Your BetDisplayer must implements Serializable.
See here: Android array to Sharedpreferences with Gson
To use Gson just add this dependency: 'com.google.code.gson:gson:2.3.1' or download the .jar
UPDATE:
Create a Singleton that holds one reference only to your SharedPreferences editor, it's just a will guess but I think you are using different context to get your editor and that could be the problem (UPDATE 2: it's not, check here, but the Singleton approach it's a plus):
private static SharedPreferences mPrefs;
private static SessionManager sInstance = null;
protected SessionManager() {
mPrefs = AppController.getInstance().getApplicationContext().getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
}
public static SessionManager getInstance() {
if (sInstance == null) {
sInstance = new SessionManager();
}
return sInstance;
}
And when you need to use SharedPreferences use SessionManager().getInstance().someMethod();
I am working with facebook app for my project and I'm getting a json from the graph API. I have a custom listView with hashMap, but when I run, the list wont populate but there isn't any errors. please help me.
here are the codes:
public class PageFeedHome extends Fragment {
ArrayList<HashMap<String, String>> feedList;
private static final String TAG_ID = "id";
private static final String TAG_NAME = "name";
private static final String TAG_MESSAGE = "message";
private String feedMessage;
ListView listView;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.feed_home_activity,
container, false);
listView = (ListView) view.findViewById(R.id.feed_lv);
feedList = new ArrayList<HashMap<String, String>>();
new LoadPosts().execute();
BaseAdapter adapter = new SimpleAdapter(getActivity(), feedList,
R.layout.feed_item_view, new String[] { TAG_MESSAGE, TAG_NAME,
TAG_ID }, new int[] { R.id.message, R.id.author,
R.id.id_tv });
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
return view;
}
private class LoadPosts extends AsyncTask<String, Void, String> {
#Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
Session.openActiveSession(getActivity(), true,
new Session.StatusCallback() {
// callback when session changes state
#Override
public void call(Session session, SessionState state,
Exception exception) {
if (session.isOpened()) {
new Request(session, "/163340583656/feed",
null, HttpMethod.GET,
new Request.Callback() {
public void onCompleted(
Response response) {
/* handle the result */
Log.i("PostFeedResponse", response.toString());
try {
GraphObject graphObj = response
.getGraphObject();
JSONObject json = graphObj
.getInnerJSONObject();
JSONArray jArray = json
.getJSONArray("data");
for (int i = 0; i < jArray.length(); i++) {
JSONObject currObj = jArray.getJSONObject(i);
final String feedId = currObj.getString("id");
if (currObj.has("message")) {
feedMessage = currObj.getString("message");
} else if (currObj.has("story")) {
feedMessage = currObj.getString("story");
} else {
feedMessage = "Posted a something";
}
JSONObject fromObj = currObj.getJSONObject("from");
String from = fromObj.getString("name");
HashMap<String, String> feed = new HashMap<String, String>();
feed.put(TAG_ID, feedId);
feed.put(TAG_MESSAGE, feedMessage);
feed.put(TAG_NAME, from);
feedList.add(feed);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).executeAsync();
}
}
});
return null;
}
}
}
Move this code :
BaseAdapter adapter = new SimpleAdapter(getActivity(), feedList,
R.layout.feed_item_view, new String[] { TAG_MESSAGE, TAG_NAME,
TAG_ID }, new int[] { R.id.message, R.id.author,
R.id.id_tv }); //initialize adapter
listView.setAdapter(adapter); //set adapter
adapter.notifyDataSetChanged();
To the AsyncTask's onPostExecute to make sure the feedList is already inserted from the onBackground.
Or if you prefer to initialize your adapter and setting the adapter to the listview in the onCreate, just move adapter.notifyDataSetChanged(); to the onPostExecute. This is recommended if you call the AsyncTask multiple times, because theres no need to initialize and set the adapter multiple times. (see my comment in the code)
ArrayList<HashMap<String, String>> feedList;
private static final String TAG_ID = "id";
private static final String TAG_NAME = "name";
private static final String TAG_MESSAGE = "message";
private String feedMessage;
ListView listView;
BaseAdapter adapter;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.feed_home_activity,
container, false);
listView = (ListView) view.findViewById(R.id.feed_lv);
feedList = new ArrayList<HashMap<String, String>>();
BaseAdapter adapter = new SimpleAdapter(getActivity(), feedList,
R.layout.feed_item_view, new String[] { TAG_MESSAGE, TAG_NAME,
TAG_ID }, new int[] { R.id.message, R.id.author,
R.id.id_tv });
listView.setAdapter(adapter);
new LoadPosts().execute();
return view;
}
private class LoadPosts extends AsyncTask<String, Void, String> {
#Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
Session.openActiveSession(getActivity(), true,
new Session.StatusCallback() {
// callback when session changes state
#Override
public void call(Session session, SessionState state,
Exception exception) {
if (session.isOpened()) {
new Request(session, "/163340583656/feed",
null, HttpMethod.GET,
new Request.Callback() {
public void onCompleted(
Response response) {
/* handle the result */
Log.i("PostFeedResponse", response.toString());
try {
GraphObject graphObj = response
.getGraphObject();
JSONObject json = graphObj
.getInnerJSONObject();
JSONArray jArray = json
.getJSONArray("data");
for (int i = 0; i < jArray.length(); i++) {
JSONObject currObj = jArray.getJSONObject(i);
final String feedId = currObj.getString("id");
if (currObj.has("message")) {
feedMessage = currObj.getString("message");
} else if (currObj.has("story")) {
feedMessage = currObj.getString("story");
} else {
feedMessage = "Posted a something";
}
JSONObject fromObj = currObj.getJSONObject("from");
String from = fromObj.getString("name");
HashMap<String, String> feed = new HashMap<String, String>();
feed.put(TAG_ID, feedId);
feed.put(TAG_MESSAGE, feedMessage);
feed.put(TAG_NAME, from);
feedList.add(feed);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).executeAsync();
}
}
});
return null;
}
#Override
protected void onPostExecute(Void result)
{
super.onPostExecute(result);
Toast.makeText(getApplicationContext(), ""+feedList.size(), Toast.LENGTH_LONG).show();
adapter.notifyDataSetChanged();
}
}
}
I need advice about my code.
I'm trying to parse a JSON array generated by the PHP function json_encode().
My json:
{"data": [{"streamer":"froggen","yt_length":"25078"},{"streamer":"wingsofdeath","yt_length":"8979"},{"streamer":"guardsmanbob","yt_length":"4790"},{"streamer":"kaostv","yt_length":"4626"},{"streamer":"kungentv","yt_length":"3883"},{"streamer":"destiny","yt_length":"3715"},{"streamer":"zekent","yt_length":"3428"},{"streamer":"athenelive","yt_length":"1673"},{"streamer":"frommaplestreet","yt_length":"1614"},{"streamer":"keyorikeys","yt_length":"1410"},{"streamer":"riotgamesturkish","yt_length":"1397"},{"streamer":"vman7","yt_length":"1022"},{"streamer":"tiensinoakuma","yt_length":"967"},{"streamer":"affenklappe","yt_length":"748"},{"streamer":"teamkeyd","yt_length":"747"},{"streamer":"lagtvmaximusblack","yt_length":"683"},{"streamer":"lolgameru","yt_length":"665"},{"streamer":"gruntartv","yt_length":"585"},{"streamer":"entenzwerg","yt_length":"579"},{"streamer":"lolgameru_cauthonpro","yt_length":"506"},{"streamer":"basickz","yt_length":"488"},{"streamer":"ilysuiteheart","yt_length":"491"},{"streamer":"kireiautumn","yt_length":"485"},{"streamer":"ultimavv","yt_length":"471"}]}
Java class:
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
String response = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpPost = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
And my activity:
public class AndroidJSONParsingActivity extends ListActivity {
// url to make request
private static String url = "http://ololo.tv/vasa";
// JSON Node names
private static final String TAG_DATA = "data";
private static final String TAG_STREAMER = "streamer";
private static final String TAG_VIEWERS = "yt_length";
// contacts JSONArray
JSONArray data = null;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Hashmap for ListView
ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();
// Creating JSON Parser instance
JSONParser Parser = new JSONParser();
// getting JSON string from URL
JSONObject json = null;
json = Parser.getJSONFromUrl(url);
try {
// Getting Array of Contacts
data = json.getJSONArray(TAG_DATA);
// looping through All Contacts
for(int i = 0; i < data.length(); i++){
JSONObject c = data.getJSONObject(i);
// Storing each json item in variable
String streamer = c.getString(TAG_STREAMER);
String viewers = c.getString(TAG_VIEWERS);
//String link = c.getString();
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_STREAMER, streamer);
map.put(TAG_VIEWERS, viewers);
//map.put(TAG_URL, link);
// adding HashList to ArrayList
dataList.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(this, dataList,
R.layout.list_item,
new String[] { TAG_STREAMER, TAG_VIEWERS /*TAG_URL*/ }, new int[] {
R.id.streamer, R.id.viewers /*R.id.url*/ });
setListAdapter(adapter);
// selecting single ListView item
ListView lv = getListView();
// Launching new screen on Selecting Single ListItem
lv.setOnItemClickListener(new OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String name = ((TextView) view.findViewById(R.id.streamer)).getText().toString();
String viewers_count = ((TextView) view.findViewById(R.id.viewers)).getText().toString();
//String url = ((TextView) view.findViewById(R.id.url)).getText().toString();
// Starting new intent
Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
in.putExtra(TAG_STREAMER, name);
in.putExtra(TAG_VIEWERS, viewers_count);
//in.putExtra(TAG_PHONE_MOBILE, url);
startActivity(in);
}
});
}
}
I tried using breakpoints, and see that when I put a breakpoint after GetEntity, the program doesn't get there because it crashed early, or something.
This my async task.
public class ParsingTask extends AsyncTask<String, Void, Void>{
JSONParser Parser = new JSONParser();
protected Void doInBackground(String... urls) {
ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();
JSONObject json = Parser.getJSONFromUrl(url);
try {
// Getting Array of Contacts
data = json.getJSONArray(TAG_DATA);
// looping through All Contacts
for(int i = 0; i < data.length(); i++){
JSONObject c = data.getJSONObject(i);
// Storing each json item in variable
String streamer = c.getString(TAG_STREAMER);
String viewers = c.getString(TAG_VIEWERS);
//String link = c.getString();
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_STREAMER, streamer);
map.put(TAG_VIEWERS, viewers);
//map.put(TAG_URL, link);
// adding HashList to ArrayList
dataList.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(this, dataList,
R.layout.list_item,
new String[] { TAG_STREAMER, TAG_VIEWERS /*TAG_URL*/ }, new int[] {
R.id.streamer, R.id.viewers /*R.id.url*/ });
setListAdapter(adapter);
return null;
}
protected void onProgressUpdate() {
}
protected void onPostExecute() {
}
}
ListAdapter error, seems like something wrong in "this". This my version how cut off code, where it stop return variables. Sorry for bad english, but i hope you understand me :)
Add my php json maker. Mb problem there?!
<?php
mysql_connect("localhost","root","");
if (!mysql_select_db("ololo")) {
echo "Unable to select ololo: " . mysql_error();
}
$sql=mysql_query("select streamer, yt_length from pm_videos where category='1'");
if(!$sql) exit("Error - ".mysql_error().", ".$tmp_q);
while($row=mysql_fetch_assoc($sql)){
$output[]=$row;
}
$json = json_encode($output);
header('Content-Type: application/json');
print "{\"data\": ${json}}";
mysql_close();
?>
You programm crashes because you are running
json = Parser.getJSONFromUrl(url);
in the UI Thread context. You have to use an AsyncTask
Code looks good. The only problem is that
public class ParsingTask extends AsyncTask<String, Void, ArrayList<HashMap<String, String>>>{
JSONParser Parser = new JSONParser();
protected Void doInBackground(String... urls) {
ArrayList<HashMap<String, String>> dataList = new ArrayList<HashMap<String, String>>();
JSONObject json = Parser.getJSONFromUrl(url);
try {
// Getting Array of Contacts
data = json.getJSONArray(TAG_DATA);
// looping through All Contacts
for(int i = 0; i < data.length(); i++){
JSONObject c = data.getJSONObject(i);
// Storing each json item in variable
String streamer = c.getString(TAG_STREAMER);
String viewers = c.getString(TAG_VIEWERS);
//String link = c.getString();
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_STREAMER, streamer);
map.put(TAG_VIEWERS, viewers);
//map.put(TAG_URL, link);
// adding HashList to ArrayList
dataList.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
/**
* Updating parsed JSON data into ListView
* */
return dataList;
}
protected void onPostExecute(ArrayList<HashMap<String, String>> dataList) {
ListAdapter adapter = new SimpleAdapter(AndroidJSONParsingActivity.this, dataList,
R.layout.list_item,
new String[] { TAG_STREAMER, TAG_VIEWERS /*TAG_URL*/ }, new int[] {
R.id.streamer, R.id.viewers /*R.id.url*/ });
setListAdapter(adapter);
}
Have you heard about gson (docs)?
public static final class Content {
#SerializedName("streamer") // you don't need to specify this, JFYI
String streamer;
#SerializedName("yt_length") // you don't need to specify this, JFYI
String yt_length;
}
public static final class Data {
#SerializedName("data")
List<Content> data;
}
public static void main (String[] args) {
Gson gson = new GsonBuilder().create();
Data data = gson.fromJson(jsonString, Data.class);
}
And remember, you cannot call network operations on UI thread! this is reason of what you have for now.
json data
[
-{
Cat_Id: 21
Cat_Title: "Electronics"
Cat_Description: null
Cat_Status: 0
Cat_CreatedBy: 0
Cat_CreatedDate: "0001-01-01T00:00:00"
Cat_UpdatedBy: 0
Cat_UpdatedDate: "0001-01-01T00:00:00"
}
Category class
public class Category {
public int Cat_Id;
public String Cat_Title = null;;
public Category() {
}
public int getCat_Id() {
return Cat_Id;
}
public void setCat_Id(int Cat_Id) {
this.Cat_Id = Cat_Id;
}
}
BaseActivity
public class BaseActivity extends Activity {
public ProgressDialog progressDialog;
public SharedPreferences prefs;
public JSONObject jsonObject;
public JSONObject jsonObject1;
public static String pref_setting = "Category_setting";
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO Auto-generated method stub
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Loading..");
prefs = PreferenceManager.getDefaultSharedPreferences(this);
Preferences.AppContext = this;
}
protected void onStop() {
super.onStop();
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
}
Soap
public class Soap {
// public static String BaseURL = "";
public static String BaseURL = "";
public static String imgURL = "";
public static String getSoapResponseByGet(String postFixOfUrl)
throws ClientProtocolException, IOException {
if (Preferences.AppContext != null
&& Preferences.isOnline(Preferences.AppContext)) {
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(BaseURL + postFixOfUrl);
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
String xmlString = EntityUtils.toString(entity);
return xmlString.toString();
} else {
return "{\"error\":{\"no_internet\":\"No internet connection\"}}";
}
}
public static String getSoapResponse(String postFixOfUrl)
throws ClientProtocolException, IOException {
if (Preferences.AppContext != null
&& Preferences.isOnline(Preferences.AppContext)) {
HttpPost httpPost = new HttpPost(BaseURL + postFixOfUrl);
StringEntity se = new StringEntity("", HTTP.UTF_8);
se.setContentType("text/xml");
httpPost.setHeader("Content-Type", "text/xml;charset=utf-8");
httpPost.setEntity(se);
HttpClient httpClient = new DefaultHttpClient();
BasicHttpResponse httpResponse = (BasicHttpResponse) httpClient
.execute(httpPost);
HttpEntity r_Entity = httpResponse.getEntity();
String xmlString = EntityUtils.toString(r_Entity);
return xmlString.toString();
} else {
return "{\"error\":{\"no_internet\":\"No internet connection\"}}";
}
}
public static String getSoapResponseByPost(String postFixOfUrl,
ArrayList<NameValuePair> nameValuePairs)
throws ClientProtocolException, IOException {
if (Preferences.AppContext != null
&& Preferences.isOnline(Preferences.AppContext)) {
HttpPost httpPost = new HttpPost(BaseURL + postFixOfUrl);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
HttpClient httpClient = new DefaultHttpClient();
BasicHttpResponse httpResponse = (BasicHttpResponse) httpClient
.execute(httpPost);
HttpEntity r_Entity = httpResponse.getEntity();
String xmlString = EntityUtils.toString(r_Entity);
return xmlString.toString();
} else {
return "{\"error\":{\"no_internet\":\"No internet connection\"}}";
}
}
// ////////// api for Category //////////////
http://sharafdg.digitarabia.com/sharafdg/api/Category
public static String apiGetCategory() throws ClientProtocolException,
IOException {
String result = Soap.getSoapResponseByGet("api/Category");
Log.e("SOAP", result);
return result;
}
public static String apiGetstore(int catid, int brandid, int modelid,
String variant) throws ClientProtocolException, IOException {
String result = Soap.getSoapResponseByGet("api/stores/?catid=" + catid
+ "&brandid=" + brandid + "&modelid=" + modelid + "&variant="
+ variant);
Log.e("SOAPSTORE", "api/stores/?catid=" + catid);
Log.e("SOAPSTORE", "api/stores/?&brandid=" + brandid);
Log.e("SOAPSTORE", "api/stores/?&modelid=" + modelid);
Log.e("SOAPSTORE", "api/stores/?&variant=" + variant);
return result;
}
-------------- post method hoy to -----------------
http://kallapp.madword-media.co.uk/company.php?category_id=11
http://kallapp.madword-media.co.uk/categories.php
public static String apiGetCategory() throws ClientProtocolException,
IOException {
ArrayList<NameValuePair> alNameValuePairs = new
ArrayList<NameValuePair>();
String result = Soap.getSoapResponseByPost("categories.php",
alNameValuePairs);
return result;
}
public static String apiGetcompanies(String category_id)
throws ClientProtocolException, IOException {
ArrayList<NameValuePair> alNameValuePairs = new
ArrayList<NameValuePair>();
// NameValuePair nameValuePairs = new BasicNameValuePair("",
// category_id);
// alNameValuePairs.add(nameValuePairs);
String result = Soap.getSoapResponse("company.php?category_id="
+ category_id);
Log.e("SOAP", result);
return result;
}
public static String apiGetDepaName(String category_id, String
company_id)
throws ClientProtocolException, IOException {
ArrayList<NameValuePair> alNameValuePairs = new
ArrayList<NameValuePair>();
NameValuePair nameValuePair = new BasicNameValuePair("category_id",
category_id);
alNameValuePairs.add(nameValuePair);
nameValuePair = new BasicNameValuePair("company_id", company_id);
alNameValuePairs.add(nameValuePair);
String result =
Soap.getSoapResponseByPost("department.php?",alNameValuePairs);
return result;
}
Category_list
public class Category_list extends BaseActivity {
int currentCategoryid;
private ArrayList<Category> cat = new ArrayList<Category>();
ArrayList<String> list = new ArrayList<String>();
Spinner spinner;
Button btncompare;
private int catid;
/** Called when the activity is first created. */
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO Auto-generated method stub
setContentView(R.layout.activity_webservices);
spinner = (Spinner) findViewById(R.id.spinner);
btncompare = (Button) findViewById(R.id.btncompare);
spinner.setOnItemSelectedListener(new OnItemSelected());
new getCategoryTask().execute();
btncompare.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(getBaseContext(), Store.class);
intent.putExtra("catid", catid);
startActivity(intent);
}
});
}
public class OnItemSelected implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// ((TextView) arg0.getChildAt(0)).setTextColor(Color.GREEN);
catid = cat.get(arg2).Cat_Id;
String cateid = String.valueOf(catid);
Log.e("cateid_category", cateid);
// new getBrandTask().execute();
}
public void onNothingSelected(AdapterView<?> arg0) {
}
}
private class getCategoryTask extends AsyncTask<Void, Void, Void> {
Category category;
String categoryJsonStr;
public getCategoryTask() {
category = new Category();
}
protected void onPreExecute() {
super.onPreExecute();
// progressDialog.show();
}
#Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
-----------------------admin email-pass-------------
JSONObject jsonObject = new JSONObject(userJsonStr);//
jsonUserArray.getJSONObject(i);
currentUserid = jsonObject.getInt("Use_Id");
if (currentUserid > 0) {
if (!jsonObject.isNull("Use_Id")) {
id = jsonObject.getInt("Use_Id");
}
}
--------------------kallapp---------
try {
Log.i("categoryJsonStr", categoryJsonStr);
JSONObject jsonObject = new JSONObject(categoryJsonStr);
JSONArray jsonCatArray = jsonObject.getJSONArray("categories");
for (int i = 0; i < jsonCatArray.length(); i++) {
Category objcategory = new Category();
jsonObject = jsonCatArray.getJSONObject(i);
--------------------------------------------------------------
try {
// categoryJsonStr = Soap.apiGetCategory();
Log.e("categoryJsonStr", categoryJsonStr);
JSONArray jsonCatArray = new JSONArray(categoryJsonStr);
Category category = new Category();
// category.Cat_Id = -1;
category.Cat_Title = "Select Category";
cat.add(category);
list.add(category.Cat_Title);
for (int i = 0; i < jsonCatArray.length(); i++) {
Category objcategory = new Category();
JSONObject jsonObject = jsonCatArray.getJSONObject(i);
currentCategoryid = jsonObject.getInt("Cat_Id");
if (!jsonObject.isNull("Cat_Title")) {
objcategory.setCat_Title(jsonObject
.getString("Cat_Title"));
}
if (!jsonObject.isNull("Cat_Id")) {
objcategory.setCat_Id(jsonObject.getInt("Cat_Id"));
}
cat.add(objcategory);
list.add(objcategory.Cat_Title);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}
public void onPostExecute(Void result) {
super.onPostExecute(result);
// progressDialog.dismiss();
spinner.setAdapter(new ArrayAdapter<String>(Category_list.this,
android.R.layout.simple_spinner_item, list));
spinner.setSelection(0, true);
}
}
}
-------------more than one item fill--------
store_lists.add(objStore_list);
public void onPostExecute(Void result) {
super.onPostExecute(result);
store_adapter = new Store_adapter(Store.this, store_lists);
lv_store.setAdapter(store_adapter);
store_adapter.notifyDataSetChanged();
}
Preferences
public class Preferences {
public static Context AppContext = null;
public static String categoryid;
public static boolean isOnline(Context c) {
ConnectivityManager cm = (ConnectivityManager) c
.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo() != null
&& cm.getActiveNetworkInfo().isConnectedOrConnecting();
}
}
Store_adapter
private Context mContext;
private int ImageCount;
private ArrayList<Store_list> store_lists = new ArrayList<Store_list>();
public ImageLoader imageLoader;
ImageView imgsave, imgpackage, img_up_arrow, img_dun_arrow;
TextView txtsave;
RelativeLayout relatv;
public Store_adapter(Context c, ArrayList<Store_list> store_lists) {
mContext = c;
this.store_lists = store_lists;
this.ImageCount = store_lists.size();
imageLoader = new ImageLoader(c);
}
#Override
public int getCount() {
// TODO Auto-generated method stub
// ImageCount = store_lists.size();
return this.ImageCount;
}
#Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
#Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
this.ImageCount = store_lists.size();
}
public void remove(int position) {
store_lists.remove(position);
}
#Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View vi = inflater.inflate(R.layout.storelist, parent, false);
TextView name = (TextView) vi.findViewById(R.id.txtprise);
ImageView imgview = (ImageView) vi.findViewById(R.id.imgve);
Store_list list = store_lists.get(position);
imageLoader.DisplayImage(list.Store_logo, imgview);
name.setText(String.valueOf(list.Mod_Price));
return vi;
}
}
menifestfile
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"
/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
/>
public static String getSoapResponse(String postFixOfUrl) {
try {
if (General.AppContext != null
&& General.isOnline(General.AppContext)) {
HttpGet httpget = new HttpGet(BaseURL + postFixOfUrl);
Log.i("SOAP", "URI:" + BaseURL + postFixOfUrl);
httpget.setHeader("Content-Type",
"application/json;charset=utf-8");
HttpClient httpclient = new DefaultHttpClient();
BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient
.execute(httpget);
HttpEntity r_entity = httpResponse.getEntity();
String xmlString = EntityUtils.toString(r_entity);
return xmlString.toString();
} else {
// return
// "[{\"erorr\":{\"no_internet\":\"No internet connection\"}}]";
if (General.AppActivity != null) {
General.AppActivity.runOnUiThread(new Runnable() {
#Override
public void run() {
Toast.makeText(
General.AppContext,
General.AppContext
.getResources()
.getString(
R.string.no_internet_connection),
Toast.LENGTH_SHORT).show();
}
});
}
return null;
}
} catch (Exception e) {
HandleException.catchException(e, true);
}
return null;
}
// post method
public static String getSoapResponseByPost(String postFixOfUrl,
ArrayList<NameValuePair> nameValuePairs)
throws ClientProtocolException, IOException {
try {
if (General.AppContext != null
&& General.isOnline(General.AppContext)) {
HttpPost httppost = new HttpPost(BaseURL + postFixOfUrl);
Log.i("SOAP", "URI:" + BaseURL + postFixOfUrl);
// httppost.setHeader("Content-Type",
// "text/html;charset=utf-8");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,
"UTF-8"));
HttpClient httpclient = new DefaultHttpClient();
BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient
.execute(httppost);
HttpEntity r_entity = httpResponse.getEntity();
String xmlString = EntityUtils.toString(r_entity);
return xmlString.toString();
} else {
// return
// "[{\"erorr\":{\"no_internet\":\"No internet connection\"}}]";
if (General.AppActivity != null) {
General.AppActivity.runOnUiThread(new Runnable() {
#Override
public void run() {
Toast.makeText(
General.AppContext,
General.AppContext
.getResources()
.getString(
R.string.no_internet_connection),
Toast.LENGTH_SHORT).show();
}
});
}
return null;
}
} catch (Exception e) {
HandleException.catchException(e, true);
}
return null;
}
public static String getSoapResponseForImage(String postFixOfUrl,
List<NameValuePair> nameValuePairs,
List<NameValuePair> filenameValuePairs) {
String xmlString = null;
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(BaseURL + postFixOfUrl);
try {
MultipartEntity entity = new MultipartEntity();
for (int index = 0; index < filenameValuePairs.size(); index++) {
File myFile = new File(filenameValuePairs.get(index).getValue());
if (myFile.exists()) {
FileBody fileBody = new FileBody(myFile);
entity.addPart(filenameValuePairs.get(index).getName(),
fileBody);
}
}
for (int index = 0; index < nameValuePairs.size(); index++) {
entity.addPart(nameValuePairs.get(index).getName(),
new StringBody(nameValuePairs.get(index).getValue(),
Charset.forName("UTF-8")));
}
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost, localContext);
HttpEntity r_entity = response.getEntity();
xmlString = EntityUtils.toString(r_entity);
} catch (IOException e) {
e.printStackTrace();
}
Log.d("SOAP ", "Result : " + xmlString.toString());
return xmlString.toString();
}
public class ParsedResponse {
public Object o;
public boolean error = false;
}
public class General {
public static Context AppContext = null;
public static Activity AppActivity = null;
public static boolean isOnline(Context c) {
ConnectivityManager cm = (ConnectivityManager) c
.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo() != null
&& cm.getActiveNetworkInfo().isConnectedOrConnecting();
}}
public class BaseActivity extends Activity {
protected SharedPreferences prefs;
public ProgressDialog progressDialog;
General.AppContext = getApplicationContext();
General.AppActivity = BaseActivity.this;
prefs = PreferenceManager.getDefaultSharedPreferences(this);}
public class ErrorMgmt {
private Boolean error;
private String errorMessage;
private String exceptionMessage;
public ErrorMgmt(String exceptionMessage) {
error = false;
errorMessage = "";
this.exceptionMessage = exceptionMessage;
}
public ErrorMgmt() {
error = false;
errorMessage = "";
exceptionMessage = "";
}
public String getErrorMessage() {
if (error) {
if (errorMessage.equals("")) {
return exceptionMessage;
} else {
return errorMessage;
}
}
return null;
}
#SuppressWarnings("rawtypes")
public Boolean strError(String JsonResponse) {
this.error = false;
errorMessage = "";
try {
JSONObject objJson = new JSONObject(JsonResponse);
String strJson = objJson.getString("JsonResponse");
if(!strJson.equals("Please enter valid email")) {
this.error = true ;
errorMessage = "";
} else {
this.error = false;
}
} catch (JSONException e) {
this.error = true;
errorMessage = "";
HandleException.catchException(e, true);
}
return this.error;
}
#SuppressWarnings("rawtypes")
public Boolean isObjError(String JsonResponse) {
this.error = false;
errorMessage = "";
try {
JSONObject objJson = new JSONObject(JsonResponse);
if (objJson != null && !objJson.isNull("error") ) {
this.error = true;
Iterator IError = objJson.keys();
errorMessage = "";
while (IError.hasNext()) {
String key = (String) IError.next();
errorMessage += objJson.getString(key) + "\n";
}
} else if (objJson != null && !objJson.isNull("statusCode")) {
Integer statusCode = objJson.getInt("statusCode");
if (statusCode > 200) {
this.error = true;
} else {
this.error = false;
}
} else {
this.error = false;
}
} catch (JSONException e) {
this.error = true;
errorMessage = "";
HandleException.catchException(e, true);
}
return this.error;
}
#SuppressWarnings("rawtypes")
public Boolean isError(String JsonResponse) {
this.error = false;
errorMessage = "";
try {
JSONArray arrJson = new JSONArray(JsonResponse);
if (!arrJson.isNull(0) && !arrJson.getJSONObject(0).isNull("erorr")) {
this.error = true;
JSONObject objError = arrJson.getJSONObject(0);
Iterator IError = objError.keys();
errorMessage = "";
while (IError.hasNext()) {
String key = (String) IError.next();
errorMessage += objError.getString(key) + "\n";
}
} else if (!arrJson.isNull(0)
&& !arrJson.getJSONObject(0).isNull("statusCode")) {
Integer statusCode = arrJson.getJSONObject(0).getInt(
"statusCode");
if (statusCode > 200) {
this.error = true;
} else {
this.error = false;
}
} else {
this.error = false;
}
} catch (JSONException e) {
this.error = true;
errorMessage = "";
HandleException.catchException(e, true);
}
return this.error;
}
public void SetForsedError(Boolean val) {
error = true;
}
}
// Api for register with Email
public static ParsedResponse apiRegister(String name, String email,
String password) throws Exception {
ArrayList<NameValuePair> alNameValuePairs = new ArrayList<NameValuePair>();
NameValuePair nameValuePair = new BasicNameValuePair("name", name);
alNameValuePairs.add(nameValuePair);
nameValuePair = new BasicNameValuePair("email", email);
alNameValuePairs.add(nameValuePair);
nameValuePair = new BasicNameValuePair("password", password);
alNameValuePairs.add(nameValuePair);
// nameValuePair = new BasicNameValuePair("fb_uid", "");
// alNameValuePairs.add(nameValuePair);
String result = Soap.getSoapResponseByPost("user/register",
alNameValuePairs);
Log.e("apiRegister", result);
ErrorMgmt errMgmt = new ErrorMgmt(General.AppContext.getResources()
.getString(R.string.error_loading_data));
ParsedResponse p = new ParsedResponse();
p.error = false;
if (result != null && !result.equals("")) {
JSONObject jObject = new JSONObject(result);
String code = "";
if (!jObject.isNull("statusCode")) {
code = jObject.getString("statusCode");
}
if (code.equals("200")) {
JSONArray jsonArray = jObject.getJSONArray("User");
if (jsonArray.length() > 0) {
ArrayList<UserData> arrayList = new ArrayList<UserData>();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
UserData objUserData = new UserData();
if (!jsonObject.isNull("uid")) {
objUserData.uid = jsonObject.getString("uid");
}
if (!jsonObject.isNull("name")) {
objUserData.name = jsonObject.getString("name");
}
if (!jsonObject.isNull("email")) {
objUserData.email = jsonObject.getString("email");
}
if (!jsonObject.isNull("password")) {
objUserData.password = jsonObject
.getString("password");
}
if (!jsonObject.isNull("created_date")) {
objUserData.created_date = jsonObject
.getString("created_date");
}
if (!jsonObject.isNull("status")) {
objUserData.status = jsonObject.getString("status");
}
if (!jsonObject.isNull("fb_uid")) {
objUserData.fb_uid = jsonObject.getString("fb_uid");
}
if (!jsonObject.isNull("account_type")) {
objUserData.account_type = jsonObject
.getString("account_type");
}
if (!jsonObject.isNull("profile_img")) {
objUserData.profile_img = jsonObject
.getString("profile_img");
}
if (!jsonObject.isNull("birthdate")) {
objUserData.birthdate = jsonObject
.getString("birthdate");
}
if (!jsonObject.isNull("city")) {
objUserData.city = jsonObject.getString("city");
}
JSONArray jsonArray2 = jsonObject
.getJSONArray("usersubscribe");
if (jsonArray2.length() > 0) {
for (int i1 = 0; i1 < jsonArray2.length(); i1++) {
JSONObject jsonObject2 = jsonArray2
.getJSONObject(i1);
if (!jsonObject2.isNull("isSubscribe")) {
objUserData.isSubscribe = jsonObject2
.getString("isSubscribe");
}
if (!jsonObject2.isNull("amount")) {
objUserData.amount = jsonObject2
.getString("amount");
}
}
}
arrayList.add(objUserData);
p.o = arrayList;
}
} else {
errMgmt = new ErrorMgmt(General.AppActivity.getResources()
.getString(R.string.err_norecords));
errMgmt.SetForsedError(true);
p.o = errMgmt;
p.error = true;
}
}
if (code.equals("401")) {
errMgmt = new ErrorMgmt(General.AppActivity.getResources()
.getString(R.string.allready_regi));
errMgmt.SetForsedError(true);
p.o = errMgmt;
p.error = true;
}
} else {
errMgmt = new ErrorMgmt(General.AppActivity.getResources()
.getString(R.string.err_norecords));
errMgmt.SetForsedError(true);
p.o = errMgmt;
p.error = true;
}
return p;
}
// Login with Facebook
private class GetFacebookLogin extends AsyncTask<Void, Void, Void> {
private ParsedResponse p = null;
private String message = "";
private Boolean error = false;
#Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
progressDialog.show();
}
#Override
protected Void doInBackground(Void... params) {
try {
p = new ParsedResponse();
p = Soap.apiUserLoginFacebook(fbID);
if (p.error) {
ErrorMgmt errmgmt = (ErrorMgmt) p.o;
message = errmgmt.getErrorMessage();
error = true;
} else {
arrayList.clear();
arrayList.addAll((ArrayList<UserData>) p.o);
error = false;
}
} catch (Exception e) {
message = "problem in loading data";
error = true;
}
return null;
}
#Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
progressDialog.dismiss();
if (error) {
new AlertDialog.Builder(Register_Login_Screen.this)
.setMessage(message)
.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog,
int which) {
dialog.dismiss();
}
}).show();
} else {
UserData objUserData = new UserData();
for (int i = 0; i < arrayList.size(); i++) {
objUserData = arrayList.get(i);
}
String profileImage = "";
try {
URL image_value = new URL("http://graph.facebook.com/"
+ fbID + "/picture?height=150&width=150");
profileImage = String.valueOf(image_value);
Log.e("fb_image_path", "" + image_value);
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Editor e = prefs.edit();
e.putBoolean(General.PREFS_login, true);
e.putString(General.PREFS_Uid, objUserData.uid);
e.putString(General.PREFS_name, objUserData.name);
e.putString(General.PREFS_email, objUserData.email);
e.putString(General.PREFS_fb_uid, objUserData.fb_uid);
e.putString(General.PREFS_logintype, General.PREFS_valuefblogin);
if (objUserData.profile_img != null
&& !objUserData.profile_img.equals("")) {
e.putString(General.PREFS_profile_img,
objUserData.profile_img);
} else {
e.putString(General.PREFS_profile_img, profileImage);
}
e.putString(General.PREFS_account_type,
objUserData.account_type);
e.putString(General.PREFS_birthdate, objUserData.birthdate);
e.putString(General.PREFS_city, objUserData.city);
e.putString(General.PREFS_subscribed, objUserData.isSubscribe);
e.putString(General.PREFS_amount, objUserData.amount);
String[] strings = null;
for (int i = 0; i < objUserData.screenerArr.size(); i++) {
String queString = objUserData.screenerArr.get(i);
strings = queString.split(",");
String question1 = strings[0];
e.putString("RosaRosa_screener_question" + (i + 1),
question1);
e.putBoolean("RosaRosa_screener_ans" + (i + 1), true);
String ans1 = strings[1];
e.putString(
"RosaRosa_screener_question" + (i + 1) + "_ans",
ans1);
Log.e("question", "" + question1 + ans1);
}
e.commit();
Toast.makeText(Register_Login_Screen.this, R.string.succ_login,
Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Register_Login_Screen.this,
Personal_Stylist_Activity.class);
startActivity(intent);
finish();
}
}
}
public class PackageTabActivity extends ListActivity{
HashMap<String,Object> hm ;
ArrayList<HashMap<String,Object>> applistwithicon ;
private static final String APP_NAME = "app_name";
private static final String APP_ICON = "app_icon";
private static final String APP_SIZE = "app_size";
Method getPackageSizeInfo = null;
PackageManager pm ;
#Override
public void onCreate(Bundle icicle){
super.onCreate(icicle);
pm = getPackageManager();
applistwithicon = new ArrayList<HashMap<String,Object>>();
try {
getPackageSizeInfo = pm.getClass().getMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class);
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
}
new AppDetails().execute();
}
private boolean isSystemPackage(PackageInfo pkgInfo) {
return ((pkgInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) ? true
: false;
}
class AppDetails extends AsyncTask<Void, Void, ArrayList<HashMap<String , Object>>>
{
private long app_apk_size;
ProgressDialog mDialog;
#Override
public void onPreExecute()
{
mDialog = new ProgressDialog(PackageTabActivity.this);
mDialog.setCancelable(true);
mDialog.setMessage("Loading... " );
mDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mDialog.setProgress(0);
mDialog.show();
}
#Override
protected ArrayList<HashMap<String, Object>> doInBackground(
Void... params) {
ArrayList<HashMap<String,Object>> app = new ArrayList<HashMap<String,Object>>();
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
long [] size = new long[packs.size()];
for(int i=0;i<packs.size();i++) {
PackageInfo p = packs.get(i);
if(!isSystemPackage(p))
{
/* String package_name = p.applicationInfo.packageName;
appname[i] = p.applicationInfo.loadLabel(getPackageManager()).toString();
icon[i] = p.applicationInfo.loadIcon(getPackageManager());
size[i] = GetSize(package_name);
// Log.v("Test", "app_name = " +appname[i]+" app_size = "+size[i]);*/
app= GetSize(p);
}
}
//
return app;
}
private ArrayList<HashMap<String, Object>> GetSize(final PackageInfo pInfo)
{
try
{
getPackageSizeInfo.invoke(pm, pInfo.applicationInfo.packageName, new IPackageStatsObserver.Stub()
{
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException
{
app_apk_size= pStats.codeSize/1024;
if(app_apk_size!=0)
{
// If I uncomment-out the below commented-out lines, I get
// an incorrect result:
// hm = new HashMap<String, Object>();
// hm.put(APP_SIZE, app_apk_size);
// hm.put(APP_NAME, pInfo.applicationInfo.loadLabel(pm));
Log.v("apksize", "appsize = "+app_apk_size+"appname = "+pInfo.applicationInfo.loadLabel(pm));
// applistwithicon.add(hm);
}
}
});
}
catch(IllegalAccessException e) {}
catch(IllegalArgumentException r) {}
catch(InvocationTargetException w){}
return applistwithicon;
}
#Override
public void onPostExecute(ArrayList<HashMap<String, Object>> result)
{
mDialog.dismiss();
CustomAdapterList myAdapter = new CustomAdapterList(result,PackageTabActivity.this );
setListAdapter(myAdapter);
}
}
}
But if I uncomment-out the commented-out lines, the wrong result gets logged.
Does anyone know why?
I don't know what pInfo.applicationInfo.loadLabel(pm) does, but try to put the result in a var instead of calling method twice.