printing an string array to listview - java

package com.fyp.khursani;
import java.util.ArrayList;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.apache.http.NameValuePair;
import test.fyp.khursani.library.JSONParser;
import com.fyp.khursani.activity.SingleListItem;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class ViewDishes extends ListFragment {
JSONParser jsonParser = new JSONParser();
private static String url_menu = "http://192.168.56.1/khursaani/get_menu_details.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_PID = "pid";
private static final String TAG_NAME = "menuItemName";
private static final String TAG_PRICE = "menuItemPrice";
private static final String TAG_DESC = "menuItemDescription";
private static final String TAG_UNIT = "menuItemUnit";
private static final String TAG_IMG = "menuItemImage";
private static final String TAG_MENU = "menu";
//progress dialogue
private ProgressDialog pDialog;
JSONArray events = null;
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_viewdishes, container, false);
// storing string resources into Array
// String[] adobe_products = getResources().getStringArray(R.array.adobe_products);
// Binding resources Array to ListAdapter
// this.setListAdapter(new ArrayAdapter<String>(getActivity(), R.layout.fragment_viewdishes, R.id.label, adobe_products));
new asyncmenu().execute();
return rootView;
}
class asyncmenu extends AsyncTask<String, String, String[]> {
protected void onPreExecute() {
super.onPreExecute();
}
protected String[] doInBackground(String... params) {
ArrayList<NameValuePair> postparameters2send = new ArrayList<NameValuePair>();
JSONObject json = jsonParser.makeHttpRequest(url_menu, "POST", postparameters2send);
Log.d("response from php", json.toString());
int status = 0;
try {
int success = json.getInt(TAG_SUCCESS);
JSONArray menu = null;
menu = json.getJSONArray(TAG_MENU);
String[] menuarray = new String[100];
for (int i = 0; i < menu.length(); i++) {
JSONObject c = menu.getJSONObject(i);
menuarray[i] = c.getString(TAG_NAME);
Log.d("menu", menuarray[i]);
}
return menuarray;
} catch (JSONException e) {
e.printStackTrace();
}
String[] menuarray = new String[10];
return menuarray;
}
protected void onPostExecute(String[] result) {
Log.d("onPostExecute", result[0]);
ViewDishes.this.setListAdapter(new ArrayAdapter<String>(getActivity(), R.layout.fragment_viewdishes, R.id.label, result));
}
}
}
In this file above , there was previously an array R.array.adobe_products which looked like this :
String[] adobe_products = getResources().getStringArray(R.array.adobe_products);
xml file :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="adobe_products">
<item>Tandoori Chicken</item>
<item>Chicken Tikka</item>
<item>Sheikh Kebab</item>
<item>Tandoori Prawn</item>
<item>Chicken Curry</item>
<item>Chicken Do Pizza</item>
<item>Nepal Ice</item>
<item>Corona Beer</item>
<item>Coca Cola</item>
<item>Ginger Ale</item>
<item>Vanilla Ice Cream</item>
<item>Mango Melba</item>
<item>Masala Chai</item>
</string-array>
</resources>
This was output to listfragment like this:
this.setListAdapter(new ArrayAdapter<String>(getActivity(), R.layout.fragment_viewdishes, R.id.label, adobe_products));
I now have an array of strings named result (in function onPostExecute) that is received after parsing a json file from a remote server, which is a plain array (as opposed to adobe_products, which is a fancy xml).
The array adobe_products is displayed as is expected. To display the new array (result), i've tried passing the new array in place of `adobe_products like so:
ViewDishes.this.setListAdapter(new ArrayAdapter<String>(getActivity(), R.layout.fragment_viewdishes, R.id.label, result));
which doesn't seem to work[crashes].
LogCat output:
java.lang.NullPointerException
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
How can I display the array as a list of items?

I always prefer using an ArrayList instead of an Array (specially to populate List adapters, there's a reason they both end in "List" and not array), because they can grow after being declared.
Refer to this thread.

Related

Connect to MySQL?

I used this code to connect to MySQL using WAMP.
But it doesn't work
package com.first.ismael.material_drawer;
import android.app.Activity;
import android.app.Fragment;
import android.app.ListFragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.*;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
/**
* Created by ismae_000 on 11/20/2015.
*/
public class all_meals extends Fragment {
public ProgressDialog pDialog ;
// Creating JSON Parser object
JSONParser jParser = new JSONParser();
// url to get all products list
private static String url_all_products = "http://192.168.1.7/get_all_products.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_PRODUCTS = "component";
private static final String TAG_PID = "id";
private static final String TAG_NAME = "name";
private static final String TAG_TYPE ="type";
ListView lv;
// products JSONArray
JSONArray products = null;
ArrayList<HashMap<String, String>> productsList;
// url to get all products list
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
#Nullable
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.all,
container, false);
productsList = new ArrayList<HashMap<String, String>>();
lv = (ListView)view.findViewById(R.id.listView2);
// Loading products in Background Thread
new LoadAllProducts().execute();
// Get listview
return view;
}
#Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
class LoadAllProducts extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
#Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Loading products. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* getting All products from url
* */
#Override
protected String doInBackground(String... args) {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);
// Check your log cat for JSON reponse
Log.d("All Products: ", json.toString());
try {
// Checking for SUCCESS TAG
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// products found
// Getting Array of Products
products = json.getJSONArray(TAG_PRODUCTS);
// looping through All Products
for (int i = 0; i < products.length(); i++) {
JSONObject c = products.getJSONObject(i);
// Storing each json item in variable
String id = c.getString(TAG_PID);
String name = c.getString(TAG_NAME);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_PID, id);
map.put(TAG_NAME, name);
// adding HashList to ArrayList
productsList.add(map);
}
} else {
// no products found
// Launch Add New product Activity
Toast.makeText(getActivity(),"There is nothing",Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
#Override
protected void onPostExecute(String file_url) {
pDialog.dismiss();
// updating UI from Background Thread
getActivity().runOnUiThread(new Runnable() {
public void run() {
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
getActivity(), productsList,
R.layout.list_item, new String[]{TAG_PID,
TAG_NAME},
new int[]{R.id.pid, R.id.name});
// updating listview
lv.setAdapter(adapter);
}
});
}
}
}
I used it in a Fragment.
Please help
If you are using WAMP means using localhost for database MySql. Ip address for localhost should 10.0.2.2 not 192.168.1.7
try to replace
_http://192.168.1.7/get_all_products.php
with
_http://10.0.2.2/get_all_products.php
and check your output get_all_products.php, that's should be json format
read this
- why do we use 10.0.2.2 to connect to local web server instead of using computer ip address in android client
check json format use this
- _http://jsonlint.com

android.content.res.Resources$NotFoundException: String resource ID #0x2

This is ma java code which gets data from json object
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class OutboxActivity extends Activity {
// Progress Dialog
private ProgressDialog pDialog;
// Creating JSON Parser object
JSONParser jsonParser = new JSONParser();
ArrayList<HashMap<String, String>> outboxList;
/*************************************************************************************************/
List<String> too = new ArrayList<String>();
List<String> sub = new ArrayList<String>();
List<String> datel = new ArrayList<String>();
/**********************************************************************/
// products JSONArray
JSONArray outbox = null;
// Outbox JSON url
private static final String OUTBOX_URL = "http://www.bitfutura.in/outbox123.json";
// ALL JSON node names
private static final String TAG_MESSAGES = "messages";
private static final String TAG_ID = "id";
private static final String TAG_TO = "to";
private static final String TAG_SUBJECT = "subject";
private static final String TAG_DATE = "date";
SQLiteDatabase dbs;
ListView list;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbs=openOrCreateDatabase("mycar.db",MODE_PRIVATE,null);
dbs.execSQL("create table if not exists Outbox(id varchar,top varchar,subject varchar,messsage" +
" varchar,date varchar)");
// Hashmap for ListView
outboxList = new ArrayList<HashMap<String, String>>();
// Loading OUTBOX in Background Thread
new LoadOutbox().execute();
}
/**
* Background Async Task to Load all OUTBOX messages by making HTTP Request
* */
class LoadOutbox extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
#Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(OutboxActivity.this);
pDialog.setMessage("Loading Outbox ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* getting Outbox JSON
* */
protected String doInBackground(String... args) {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
JSONObject json = jsonParser.makeHttpRequest(OUTBOX_URL, "GET",
params);
// Check your log cat for JSON reponse
Log.d("Outbox JSON: ", json.toString());
try {
outbox = json.getJSONArray(TAG_MESSAGES);
// looping through All messages
dbs.execSQL("DELETE FROM Outbox");
for (int i = 0; i < outbox.length(); i++) {
JSONObject c = outbox.getJSONObject(i);
/***************************************************/
/************************************************/
// Storing each json item in variable
String id = c.getString(TAG_ID);
String to = c.getString(TAG_TO);
String subject = c.getString(TAG_SUBJECT);
String date = c.getString(TAG_DATE);
/****************************************************************/
too.add(to);
sub.add(subject);
datel.add(date);
/*********************************************************************/
String shu="'"+id+"','"+to+"','"+subject+"','"+date+"','"+date+"'";
dbs.execSQL("insert into Outbox values("+shu+")");
// subject taking only first 23 chars
// to fit into screen
if(subject.length() > 23){
subject = subject.substring(0, 22) + "..";
}
// 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_TO, to);
map.put(TAG_SUBJECT, subject);
map.put(TAG_DATE, date);
// adding HashList to ArrayList
outboxList.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all products
pDialog.dismiss();
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
/**
* Updating parsed JSON data into ListView
* */
String[] toa = new String[too.size()];
toa = too.toArray(toa);
String[] suba = new String[sub.size()];
suba = sub.toArray(suba);
String[] datea = new String[datel.size()];
datea = datel.toArray(datea);
/*
ListAdapter adapter = new SimpleAdapter(
OutboxActivity.this, outboxList,
R.layout.outbox_list_item, new String[] { TAG_SUBJECT, TAG_TO, TAG_DATE },
new int[] { R.id.subject, R.id.to, R.id.date });
// updating listview
setListAdapter(adapter);
*/
EventAdapter adapter=new EventAdapter(OutboxActivity.this,toa,suba,datea);
list=(ListView)findViewById(R.id.list);
list.setAdapter(adapter);
try {
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
int Slecteditem = position;
Toast.makeText(getApplicationContext(), Slecteditem, Toast.LENGTH_SHORT).show();
}
});
}catch(Exception ae)
{
Toast.makeText(getApplicationContext(),ae.getMessage(), Toast.LENGTH_LONG).show();
}
}
});
}
}
}
This is my Event adapter class
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class EventAdapter extends ArrayAdapter<String> {
private final Activity context;
private final String[] itemname;
private final String[] itemname2;
private final String[] itemname3;
public EventAdapter(Activity context, String[] itemname,String[] itemname3,String[] itemname2) {
super(context, R.layout.myevent, itemname);
// TODO Auto-generated constructor stub
this.context=context;
this.itemname=itemname;
this.itemname3=itemname3;
this.itemname2=itemname2;
}
public View getView(int position,View view,ViewGroup parent) {
LayoutInflater inflater=context.getLayoutInflater();
View rowView=inflater.inflate(R.layout.myevent, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.item);
TextView extratxt1 = (TextView) rowView.findViewById(R.id.textView1);
TextView extratxt2 = (TextView) rowView.findViewById(R.id.textView2);
txtTitle.setText(itemname[position]);
extratxt1.setText(itemname2[position]);
extratxt2.setText(itemname3[position]);
return rowView;
};
}
This is my Activitymain xml code for list view
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<ListView
android:id="#+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</RelativeLayout>
The list view successfully get gets updated but when i click an option in list view that shows up an toast,the position i clicked it shows an error
android.content.res.Resources$NotFoundException: String resource ID #0x2
at android.content.res.Resources.getText(Resources.java:274)
at android.widget.Toast.makeText(Toast.java:277)
at com.dk.sample.folder.residemenu.OutboxActivity$LoadOutbox$1$1.onItemClick(OutboxActivity.java:200)
at android.widget.AdapterView.performItemClick(AdapterView.java:300)
at android.widget.AbsListView.performItemClick(AbsListView.java:1143)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3044)
at android.widget.AbsListView.onTouchUp(AbsListView.java:3845)
at android.widget.AbsListView.onTouchEvent(AbsListView.java:3617)
at android.view.View.dispatchTouchEvent(View.java:8388)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2424)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2158)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2314)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1692)
at android.app.Activity.dispatchTouchEvent(Activity.java:2739)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2275)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2172)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2430)
int Slecteditem = position;
Toast.makeText(getApplicationContext(), Slecteditem, Toast.LENGTH_SHORT).show();
You are using the item position for the message argument. Toast doesn't know about your adapter and thinks you are giving it a string resource ID, but fails to find a string with that ID (in this case 2). You either need to use an actual string resource id, or an actual String.
Since your adapter extends ArrayAdapter, you could use adapter.getItem(position) instead (which I suspect is what you intended to do).

android json parser load more data

Because my json source is sometimes too long, and my android app crashes if it takes too long to load, i want to modify my code, so that when the user scrolls down to automaticaly load data or if is more simple, i would ike to add a button "Load More". Here is my existing code. What is the part i must modify for adding autoload or maybe a "Load More" button? Thanks!
package com.radioxxx.aacplay;
import android.app.DownloadManager;
import android.app.Fragment;
import android.app.ListFragment;
import android.app.ProgressDialog;
import android.content.Context;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class FazeNoi extends ListFragment {
JSONParser2 jsonParser = new JSONParser2();
private ProgressDialog pDialog;
ArrayList<HashMap<String, String>> tracksList;
JSONArray albums = null;
String nume_piesa, cale;
String titlu;
private static final String URL_ALBUMS = "http://www.radioxxx.ro/json-news";
private static final String TAG_TITLU = "Titlu";
private static final String TAG_POZA = "FazeNoiID";
private static final String TAG_NUME = "CMSdate";
private static final String TAG_CALE = "URL";
#Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
tracksList = new ArrayList<HashMap<String, String>>();
new LoadTracks().execute();
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_fazenoi, container, false);
return rootView;
}
class LoadTracks extends AsyncTask<String, String, String> {
#Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("Se incarca ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected String doInBackground(String... args) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
//params.add(new BasicNameValuePair(TAG_ID, album_id));
String json = jsonParser.makeHttpRequest(URL_ALBUMS, "GET",
params);
Log.d("Track List JSON: ", json);
try {
JSONArray albums = new JSONArray(json);
for (int i = 0; i < albums.length(); i++) {
JSONObject c = albums.getJSONObject(i);
//String poza = c.getJSONArray("PozaPrincipalaMedia").getJSONObject(0).getString("thumb");
String track_no = String.valueOf(i + 1);
String poza = c.getJSONObject("PozaPrincipalaMedia").getString("thumb");
String idpoza = c.getJSONObject("PozaPrincipalaMedia").getString("id");
String nume = c.getString(TAG_TITLU);
String cale = c.getString(TAG_CALE);
HashMap<String, String> map = new HashMap<String, String>();
map.put("track_no", track_no + ".");
map.put(TAG_POZA, poza);
map.put(TAG_NUME, nume);
map.put(TAG_CALE, cale);
tracksList.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
getActivity().runOnUiThread(new Runnable() {
public void run() {
ListAdapter adapter = new SimpleAdapter(
getActivity(), tracksList,
R.layout.list_faze, new String[] {TAG_POZA, "track_no", TAG_NUME }, new int[] {
R.id.list_image,
R.id.track_no, R.id.nume_piesa });
setListAdapter(adapter);
//TextView text = (TextView) getActivity().findViewById(R.id.version);
//text.setText(titlu);
}
});
}
}
}
I'm going to post my comment as an answer, I believe it's the easiest way to quickly solve your problem. If you can control how much JSON is being sent on the server side, then make requests from your java app for page 1, page 2 etc.
Page 1,page 2,etc... could just send out small portions of the JSON you need, then attach a listener (button/scrollview) to request the next page, so on an so forth. Hope this helps!

How should I switch to new activity from a listview that contains an array of data?

I want to switch to a new activity from the listview that contains an array of data from a mysql database?
File: TampilGambarActivity.java
package com.tes.menu;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
//import android.content.Intent;
import android.os.Bundle;
//import android.view.View;
import android.widget.ListView;
//import android.widget.Toast;
public class TampilkanGambarActivity extends Activity {
static String in_idmenu = "id_menu";
static String in_jenismenu = "jenis_menu";
static String in_image_menu = "image_menu";
JSONArray str_json = null;
public String lo_Koneksi,isi ;
ListView list;
LazyAdapter adapter;
ArrayList<HashMap<String, String>> data_map = new ArrayList<HashMap<String, String>>();
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Koneksi lo_Koneksi = new Koneksi();
isi = lo_Koneksi.isi_koneksi();
String link_url = isi+"menu.php";
JSONParser jParser = new JSONParser();
JSONObject json = jParser.AmbilJson(link_url);
try {
str_json = json.getJSONArray("menu");
for(int i = 0; i < str_json.length(); i++){
JSONObject ar = str_json.getJSONObject(i);
String id_menu = ar.getString("id_menu");
String image_menu = ar.getString("image_menu");
String jenis_menu = ar.getString("jenis_menu");
HashMap<String, String> map = new HashMap<String, String>();
map.put(in_idmenu, id_menu);
map.put(in_image_menu, image_menu);
map.put(in_jenismenu, jenis_menu);
data_map.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
list=(ListView)findViewById(R.id.list);
adapter=new LazyAdapter(this, data_map);
list.setAdapter(adapter);
}
}
Set your Listview on Item Click Listener
listView.setOnItemClickListener(this);
The method should look like this.
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
//you can send data here based on the position
}
Of course let the class implement the listener, and then within the onItem click use the Intent
Intent intent = new Intent(this, LazyAdapter.class);
intent.putExtra("hashMap", map);
startActivity(intent);
Get the data from the Second activity
Intent intent = getIntent();
HashMap<String, String> hashMap = (HashMap<String, String>)intent.getSerializableExtra("hashMap");
Now you have the data in the second activity, use it the same way.

Errors in Android project

I'm having problems working my way through an old tutorial, essentially i'm trying to pull the data returned in JSON format from www.amazingjobs.co.uk/app/marc/api/candidates/ into a listview.
I literally started learning android/java 24 hours ago so its likely it may be very simple but I just can't quite seem to figure it out, lines with errors are in bold!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import com.google.gson.Gson;
public class Searchjobs extends Activity {
// url to make request
private static String url = "http://www.amazingjobs.co.uk/app/marc/api/candidates/";
// JSON Node names
private static final String TAG_RESULTS = "results";
// Jobs JSONArray
JSONArray jobs = null;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_searchjobs);
Button Searchbutton = (Button) findViewById(R.id.Searchbutton);
Searchbutton.setOnClickListener(searchClick);
}
private OnClickListener searchClick = new OnClickListener() {
public void onClick(View v) {
// Hashmap for ListView
ArrayList<HashMap<String, String>> JobList = new ArrayList<HashMap<String, String>>();
// Creating JSON Parser instance
JSONParser jParser = new JSONParser();
// getting JSON string from URL
JSONObject json = jParser.getJSONFromUrl("http://www.amazingjobs.co.uk/app/marc/api/candidates/");
// Getting Array of Contacts
try {
jobs = json.getJSONArray(TAG_RESULTS);
for(int i = 0; i < jobs.length();i++){
JSONObject j = jobs.getJSONObject(i);
String title = j.getString("job_title");
HashMap<String, String> map = new HashMap<String, String>();
map.put("Title", title);
JobList.add(map);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
**ListAdapter adapter = new SimpleAdapter(this, JobList,R.layout.list_item,
new String[] { "Title" }, new int[] {R.id.title});**
**ERROR: The constructor SimpleAdapter(new View.OnClickListener(){}, ArrayList<HashMap<String,String>>, int, String[], int[]) is undefined**
**setListAdapter(adapter);
The method setListAdapter(ListAdapter) is undefined for the type new View.OnClickListener(){}**
// selecting single ListView item
**ListView lv = getListView();**
**ERROR: The method getListView() is undefined for the type new View.OnClickListener(){}**
lv.setOnItemClickListener(new OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
}
});
};
};
EDIT Ok new code is below, errors are, which seems odd because the activity errors relate to an activity that definately exists, have tried restart/clean in eclipse too.
Description Resource Path Location Type
activity_searchjobs cannot be resolved or is not a field Searchjobs.java /AmazingJobs/src/app/android/amazingjobs line 47 Java Problem
activity_searchjobs cannot be resolved or is not a field Searchjobs.java /AmazingJobs/src/app/android/amazingjobs line 105 Java Problem
Searchbutton cannot be resolved or is not a field Searchjobs.java /AmazingJobs/src/app/android/amazingjobs line 48 Java Problem
list_item cannot be resolved or is not a field Searchjobs.java /AmazingJobs/src/app/android/amazingjobs line 83 Java Problem
public class Searchjobs extends ListActivity {
// url to make request
private static String url = "http://www.amazingjobs.co.uk/app/marc/api/candidates/";
// JSON Node names
private static final String TAG_RESULTS = "results";
// Jobs JSONArray
JSONArray jobs = null;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_searchjobs);
Button Searchbutton = (Button) findViewById(R.id.Searchbutton);
Searchbutton.setOnClickListener(searchClick);
}
private OnClickListener searchClick = new OnClickListener() {
public void onClick(View v) {
// Hashmap for ListView
ArrayList<HashMap<String, String>> JobList = new ArrayList<HashMap<String, String>>();
// Creating JSON Parser instance
JSONParser jParser = new JSONParser();
// getting JSON string from URL
JSONObject json = jParser.getJSONFromUrl("http://www.amazingjobs.co.uk/app/marc/api/candidates/");
// Getting Array of Contacts
try {
jobs = json.getJSONArray(TAG_RESULTS);
for(int i = 0; i < jobs.length();i++){
JSONObject j = jobs.getJSONObject(i);
String title = j.getString("job_title");
HashMap<String, String> map = new HashMap<String, String>();
map.put("Title", title);
JobList.add(map);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ListAdapter adapter = new SimpleAdapter(getApplication(), JobList,R.layout.list_item,
new String[] { "Title" }, new int[] {R.id.title});
setListAdapter(adapter);
// selecting single ListView item
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
}
});
};
};
You need to extend ListActivity not Activity to make methods like getListView() avaialable or just replace it with findViewById() if you do not want to use ListActivity (it's not mandatory).
ListAdapter adapter = new SimpleAdapter(this, JobList,R.layout.list_item,
new String[] { "Title" }, new int[] {R.id.title});
should be changed to:
ListAdapter adapter = new SimpleAdapter(getApplicationContext(), JobList,R.layout.list_item,
new String[] { "Title" }, new int[] {R.id.title});
Second,
ListView lv = getListView();
will be resolved if you extend ListActivity instead of Activity.

Categories

Resources