android linkify in listview - java

I have this code:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.romantic.aacplay.R;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.os.AsyncTask;
import android.os.Bundle;
// import android.text.Html;
// import android.text.Html;
import android.text.Html;
import android.util.Log;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;
public class PodCast extends ListActivity {
private ProgressDialog pDialog;
JSONParser jParser = new JSONParser();
ArrayList<HashMap<String, String>> productsList;
private static String url_all_products = "http://mysite.net/andro/pcast.php";
private static final String TAG_SUCCESS = "success";
private static final String TAG_PRODUCTS = "podcast";
private static final String TAG_LINK = "link";
private static final String TAG_NAME = "nume";
JSONArray products = null;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.poadcast);
GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[] {Color.RED,Color.BLACK});
View title = getWindow().findViewById(android.R.id.title);
View titleBar = (View) title.getParent();
titleBar.setBackgroundDrawable(gd);
productsList = new ArrayList<HashMap<String, String>>();
new LoadAllProducts().execute();
}
class LoadAllProducts extends AsyncTask<String, String, String> {
#Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(PodCast.this);
pDialog.setMessage("Se incarca. Asteapta...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected String doInBackground(String... args) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);
Log.d("Ultimele 10 piese: ", json.toString());
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
products = json.getJSONArray(TAG_PRODUCTS);
for (int i = 0; i < products.length(); i++) {
JSONObject c = products.getJSONObject(i);
String link = c.getString(TAG_LINK);
String name = c.getString(TAG_NAME);
HashMap<String, String> map = new HashMap<String, String>();
// String href = String.format(" %s ", link, name);
// String cici = Html.fromHtml(href).toString();
map.put(TAG_NAME, name);
map.put(TAG_LINK, "" + Html.fromHtml(link));
// map.put(TAG_LINK, link);
productsList.add(map);
}
} else {
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
runOnUiThread(new Runnable() {
public void run() {
ListAdapter adapter = new SimpleAdapter(
PodCast.this, productsList,
R.layout.list_item, new String[] {
TAG_NAME, TAG_LINK },
new int[] { R.id.link, R.id.name });
setListAdapter(adapter);
}
});
}
}
}
Now i'm trying to figure out how can i make the links in listview clickable. I`m trying to linkify a textview that is in found here:
protected void onPostExecute(String file_url) {
pDialog.dismiss();
runOnUiThread(new Runnable() {
public void run() {
ListAdapter adapter = new SimpleAdapter(
PodCast.this, productsList,
R.layout.list_item, new String[] {
TAG_NAME, TAG_LINK },
new int[] { R.id.link, R.id.name });
setListAdapter(adapter);
}
});
}
R.layout.list_item which is a different .xml layout for the listview.
So can you guys help me solve this? Thanks in advance!

I feel instead of using SimpleAdapter,Please extend the BaseAdapter and make the textview you are using as linkify.so it will automatically get click.
please refer:
Android dev blog

put this line to ur textview
android:autoLink="web"
i hope this will solve ur query

I wanted as well to create a linkeable textView on my list adapter so I used:
Linkify.addLinks(textViewLocationPhone, Linkify.PHONE_NUMBERS);
textViewLocationPhone.setLinksClickable(true);
and it worked.

Related

The simpleAdapter shows an error in the constructor

I am with a problem in my code . I tried many things in this code , However it does not fix . In the end the error is described. It is something related with constructor.
SelectActivityAnswer.java
package com.example.test;
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 java.util.List;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Fragment;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class SelectAnswerActivity extends Fragment {
final static String ARG_POSITION_ANSWER = "position";
private String jsonResult;
private String url = "http://myip/employee_details.php";
private ListView listView;
public SelectAnswerActivity() {
// Empty constructor required for fragment subclasses
}
//#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//SimpleAdapter simpleAdapter = new SimpleAdapter(this, null, 0, null, null);
View rootView = inflater.inflate(R.layout.activity_select_answer, container, false);
accessWebService();
// selectListAns = (ListView) rootView.findViewById(R.id.ans_list);
// novo code abaixo
// ListAdapterAns adapterAns = new ListAdapterAns(this,toppings);
// selectListAns.setAdapter(adapterAns);
// selectListAns.setOnItemClickListener(new AnsItemClickListener());
//View rootView = inflater.inflate(R.layout.activity_select_answer, container, false);
//int i = getArguments().getInt(ARG_PLANET_NUMBER);
//String planet = getResources().getStringArray(R.array.planets_array)[i];
//int imageId = getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()),
// "drawable", getActivity().getPackageName());
// ((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId);
// getActivity().setTitle(planet);
return rootView;
}
// Async Task to access the web
private class JsonReadTask extends AsyncTask<String, Void, String> {
#Override
protected String doInBackground(String... params) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(params[0]);
try {
HttpResponse response = httpclient.execute(httppost);
jsonResult = inputStreamToString(
response.getEntity().getContent()).toString();
}
catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private StringBuilder inputStreamToString(InputStream is) {
String rLine = "";
StringBuilder answer = new StringBuilder();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
try {
while ((rLine = rd.readLine()) != null) {
answer.append(rLine);
}
}
catch (IOException e) {
// e.printStackTrace();
//Toast.makeText(getApplicationContext(),
// "Error..." + e.toString(), Toast.LENGTH_LONG).show();
}
return answer;
}
#Override
protected void onPostExecute(String result) {
ListDrwaer();
}
}// end async task
public void accessWebService() {
JsonReadTask task = new JsonReadTask();
// passes values for the urls string array
task.execute(new String[] { url });
}
// build hash set for list view
public void ListDrwaer() {
List<Map<String, String>> employeeList = new ArrayList<Map<String, String>>();
try {
JSONObject jsonResponse = new JSONObject(jsonResult);
JSONArray jsonMainNode = jsonResponse.optJSONArray("emp_info");
for (int i = 0; i < jsonMainNode.length(); i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
String name = jsonChildNode.optString("employee name");
String number = jsonChildNode.optString("employee no");
String outPut = name + "-" + number;
employeeList.add(createEmployee("employees", outPut));
}
} catch (JSONException e) {
//Toast.makeText(getApplicationContext(), "Error" + e.toString(),
// Toast.LENGTH_SHORT).show();
}
SimpleAdapter simpleAdapter = new SimpleAdapter(this, employeeList,
R.id.content_list_ans,
new String[] { "employees" }, new int[] { android.R.id.text1 });
listView.setAdapter(simpleAdapter);
//Toast.makeText(getApplication(), "c", Toast.LENGTH_SHORT).show();
}
private HashMap<String, String> createEmployee(String name, String number) {
HashMap<String, String> employeeNameNo = new HashMap<String, String>();
employeeNameNo.put(name, number);
return employeeNameNo;
}
}
The line is:
SimpleAdapter simpleAdapter = new SimpleAdapter(this, employeeList,
R.id.content_list_ans,
new String[] { "employees" }, new int[] { android.R.id.text1 });
listView.setAdapter(simpleAdapter);
The error is :
The constructor SimpleAdapter(SelectAnswerActivity, List<Map<String,String>>, int, String[], int[]) is
undefined.
Is the problem this(context) ?
Try this, using Activity context instead of Fragment
SimpleAdapter simpleAdapter = new SimpleAdapter(getActivity(), employeeList,
R.id.content_list_ans,
new String[] { "employees" }, new int[] { android.R.id.text1 });
Your reference to the Context is wrong. You cannot have the activity context in the AsynTask class. You should try one of getApplicationContext() or getActivity() instead of this.
Also SelectAnswerActivity is not and Activity, its a Fragment. If it was activity you could have also used SelectAnswerActivity.this
You are referencing the context of the fragment, not the one of your Activity. Try changing that.

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).

How to "stylize" JSON API return?

So I have 4 strings that I got from a JSON API and was wondering how to style them? Eg: the 4 strings I have are max players, current players, a Boolean saying true or false if the server is online or offline, and the current ping. Right now it just displays like this:
35053
26690
true
205
But I want it to display like
26690/35053 players online
ping: 205
server online: true
So how would I go about doing that?
MainActivity.java:
package in.untie.hypixelmobile;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
public class MainActivity extends ListActivity {
private Context context;
private static String url = "http://api.razex.de/server/status/mc.hypixel.net:25565";
private static final String PMAX = "Max";
private static final Boolean ONLINE = false;
private static final String PING = "Ping";
private static final String PCURRENT = "Current";
ArrayList<HashMap<String, String>> jsonlist = new ArrayList<HashMap<String, String>>();
ListView lv;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new ProgressTask(MainActivity.this).execute();
}
private class ProgressTask extends AsyncTask<String, Void, Boolean> {
private ProgressDialog dialog;
private ListActivity activity;
private Context context;
public ProgressTask(ListActivity activity) {
this.activity = activity;
context = activity;
dialog = new ProgressDialog(context);
}
#Override
protected void onPreExecute() {
this.dialog.setMessage("Loading");
this.dialog.show();
}
#Override
protected void onPostExecute(Boolean result) {
if (dialog.isShowing()) {
dialog.dismiss();
}
ListAdapter adapter = new SimpleAdapter(context, jsonlist, R.layout.list_item, new String[]{PCURRENT, PMAX, ONLINE.toString(), PING}, new int[]{R.id.ping, R.id.max, R.id.online, R.id.current});
setListAdapter(adapter);
lv = getListView();
}
#Override
protected Boolean doInBackground(String... params) {
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromURL(url);
try {
String ping = json.getString("ping");
Boolean isonline = json.getBoolean("online");
JSONObject playersObject = json.getJSONObject("players");
String pmax = playersObject.getString("max");
String pcurrent = playersObject.getString("online");
HashMap<String, String> map = new HashMap<String, String>();
if (isonline) {
map.put(PING, ping);
map.put(ONLINE.toString(), isonline.toString());
map.put(PMAX, pmax);
map.put(PCURRENT, pcurrent);
jsonlist.add(map);
} else {
map.put(ONLINE.toString(), isonline.toString());
jsonlist.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
}
}
String.format() is commonly used for such tasks, e.g.
String.format("%d/%d players online\n\nping: %s\n\n server online: %s", PCURRENT, PMAX, PING, ONLINE.toString())
Read up on it here.
I guess this is what you want, result will be in jsonResults
package in.untie.hypixelmobile;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
public class MainActivity extends ListActivity {
private Context context;
private static String url = "http://api.razex.de/server/status/mc.hypixel.net:25565";
private static final String PMAX = "Max";
private static final Boolean ONLINE = false;
private static final String PING = "Ping";
private static final String PCURRENT = "Current";
ArrayList<HashMap<String, String>> jsonlist = new ArrayList<HashMap<String, String>>();
ListView lv;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new ProgressTask(MainActivity.this).execute();
}
private class ProgressTask extends AsyncTask<String, Void, Boolean> {
StringBuilder jsonResults = new StringBuilder();
private ProgressDialog dialog;
private ListActivity activity;
private Context context;
public ProgressTask(ListActivity activity) {
this.activity = activity;
context = activity;
dialog = new ProgressDialog(context);
}
#Override
protected void onPreExecute() {
this.dialog.setMessage("Loading");
this.dialog.show();
}
#Override
protected void onPostExecute(Boolean result) {
if (dialog.isShowing()) {
dialog.dismiss();
}
ListAdapter adapter = new SimpleAdapter(context, jsonlist, R.layout.list_item, new String[]{PCURRENT, PMAX, ONLINE.toString(), PING}, new int[]{R.id.ping, R.id.max, R.id.online, R.id.current});
setListAdapter(adapter);
lv = getListView();
}
#Override
protected Boolean doInBackground(String... params) {
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromURL(url);
try {
String ping = json.getString("ping");
Boolean isonline = json.getBoolean("online");
JSONObject playersObject = json.getJSONObject("players");
String pmax = playersObject.getString("max");
String pcurrent = playersObject.getString("online");
if (isonline) {
jsonResults.append(pcurrent+"/"+pmax+" players online");
jsonResults.append("ping: "+ping);
jsonResults.append("server online: "+ isonline.toString());
} else {
jsonResults.append("server online: "+ isonline.toString());
}
} catch (JSONException e) {
e.printStackTrace();
}
return false;
}
}
}

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