I am having a problem getting this code to work.
Basically I Go from one list activity to another and pass the text from a list item through the intent of the activity to the new list view, then retrieve that text in the new list activity and then preform a http request based on value of that list item.
Log Cat
04-05 17:47:32.370: E/AndroidRuntime(30135): FATAL EXCEPTION: main
04-05 17:47:32.370: E/AndroidRuntime(30135): java.lang.ClassCastException:android.widget.LinearLayout
04-05 17:47:32.370: E/AndroidRuntime(30135): at com.thickcrustdesigns.ufood.CatogPage$1.onItemClick(CatogPage.java:66)
04-05 17:47:32.370: E/AndroidRuntime(30135): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
04-05 17:47:32.370: E/AndroidRuntime(30135): at android.widget.ListView.performItemClick(ListView.java:3731)
04-05 17:47:32.370: E/AndroidRuntime(30135): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1959)
04-05 17:47:32.370: E/AndroidRuntime(30135): at android.os.Handler.handleCallback(Handler.java:587)
04-05 17:47:32.370: E/AndroidRuntime(30135): at android.os.Handler.dispatchMessage(Handler.java:92)
04-05 17:47:32.370: E/AndroidRuntime(30135): at android.os.Looper.loop(Looper.java:130)
04-05 17:47:32.370: E/AndroidRuntime(30135): at android.app.ActivityThread.main(ActivityThread.java:3691)
04-05 17:47:32.370: E/AndroidRuntime(30135): at java.lang.reflect.Method.invokeNative(Native Method)
04-05 17:47:32.370: E/AndroidRuntime(30135): at java.lang.reflect.Method.invoke(Method.java:507)
04-05 17:47:32.370: E/AndroidRuntime(30135): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
04-05 17:47:32.370: E/AndroidRuntime(30135): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
04-05 17:47:32.370: E/AndroidRuntime(30135): at dalvik.system.NativeStart.main(Native Method)
ListActivity 1
package com.thickcrustdesigns.ufood;
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
public class CatogPage extends ListActivity {
ListView listView1;
Button btn_bk;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.definition_main);
btn_bk = (Button) findViewById(R.id.btn_bk);
listView1 = (ListView) findViewById(android.R.id.list);
ArrayList<NameValuePair> nvp = new ArrayList<NameValuePair>();
nvp.add(new BasicNameValuePair("request", "categories"));
ArrayList<JSONObject> jsondefs = Request.fetchData(this, nvp);
String[] defs = new String[jsondefs.size()];
for (int i = 0; i < jsondefs.size(); i++) {
try {
defs[i] = jsondefs.get(i).getString("Name");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
uFoodAdapter adapter = new uFoodAdapter(this, R.layout.definition_list,
defs);
listView1.setAdapter(adapter);
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
TextView tv = (TextView) view;
String p = tv.getText().toString();
Intent i = new Intent(getApplicationContext(), Results.class);
i.putExtra("category", p);
startActivity(i);
}
});
btn_bk.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
Intent i = new Intent(getApplicationContext(),
UFoodAppActivity.class);
startActivity(i);
}
});
}
}
**ListActivity 2**
package com.thickcrustdesigns.ufood;
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ListView;
public class Results extends ListActivity {
ListView listView1;
enum Category {
Chicken, Beef, Chinese, Cocktails, Curry, Deserts, Fish, ForOne {
public String toString() {
return "For One";
}
},
Lamb, LightBites {
public String toString() {
return "Light Bites";
}
},
Pasta, Pork, Vegetarian
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.definition_main);
listView1 = (ListView) findViewById(android.R.id.list);
Bundle data = getIntent().getExtras();
String category = data.getString("category");
Category cat = Category.valueOf(category);
String value = null;
switch (cat) {
case Chicken:
value = "Chicken";
break;
case Beef:
value = "Beef";
break;
case Chinese:
value = "Chinese";
break;
case Cocktails:
value = "Cocktails";
break;
case Curry:
value = "Curry";
break;
case Deserts:
value = "Deserts";
break;
case Fish:
value = "Fish";
break;
case ForOne:
value = "ForOne";
break;
case Lamb:
value = "Lamb";
break;
case LightBites:
value = "LightBites";
break;
case Pasta:
value = "Pasta";
break;
case Pork:
value = "Pork";
break;
case Vegetarian:
value = "Vegetarian";
}
ArrayList<NameValuePair> nvp = new ArrayList<NameValuePair>();
nvp.add(new BasicNameValuePair("request", "category"));
nvp.add(new BasicNameValuePair("cat", value));
ArrayList<JSONObject> jsondefs = Request.fetchData(this, nvp);
String[] defs = new String[jsondefs.size()];
for (int i = 0; i < jsondefs.size(); i++) {
try {
defs[i] = jsondefs.get(i).getString("Name");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
uFoodAdapter adapter = new uFoodAdapter(this, R.layout.definition_list,
defs);
listView1.setAdapter(adapter);
}
}
Request
package com.thickcrustdesigns.ufood;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;
public class Request {
@SuppressWarnings("null")
public static ArrayList<JSONObject> fetchData(Context context,
ArrayList<NameValuePair> nvp) {
ArrayList<JSONObject> listItems = new ArrayList<JSONObject>();
InputStream is = null;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(
"http://co350-11d.projects02.glos.ac.uk/php/database.php");
httppost.setEntity(new UrlEncodedFormEntity(nvp));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection" + e.toString());
}
// convert response to string
String result = "";
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
InputStream stream = null;
StringBuilder sb = null;
while ((result = reader.readLine()) != null) {
sb.append(result + "\n");
}
stream.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
try {
JSONArray jArray = new JSONArray(result);
for (int i = 0; i < jArray.length(); i++) {
JSONObject jo = jArray.getJSONObject(i);
listItems.add(jo);
}
} catch (Exception e) {
Toast.makeText(context.getApplicationContext(), "None Found!",
Toast.LENGTH_LONG).show();
}
return listItems;
}
}
package com.thickcrustdesigns.ufood;
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ListView;
public class Results extends ListActivity {
ListView listView1;
enum Category {
Chicken, Beef, Chinese, Cocktails, Curry, Deserts, Fish, ForOne {
public String toString() {
return "For One";
}
},
Lamb, LightBites {
public String toString() {
return "Light Bites";
}
},
Pasta, Pork, Vegetarian
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.definition_main);
listView1 = (ListView) findViewById(android.R.id.list);
Bundle data = getIntent().getExtras();
String category = data.getString("category");
Category cat = Category.valueOf(category);
String value = null;
switch (cat) {
case Chicken:
value = "Chicken";
break;
case Beef:
value = "Beef";
break;
case Chinese:
value = "Chinese";
break;
case Cocktails:
value = "Cocktails";
break;
case Curry:
value = "Curry";
break;
case Deserts:
value = "Deserts";
break;
case Fish:
value = "Fish";
break;
case ForOne:
value = "ForOne";
break;
case Lamb:
value = "Lamb";
break;
case LightBites:
value = "LightBites";
break;
case Pasta:
value = "Pasta";
break;
case Pork:
value = "Pork";
break;
case Vegetarian:
value = "Vegetarian";
}
ArrayList<NameValuePair> nvp = new ArrayList<NameValuePair>();
nvp.add(new BasicNameValuePair("request", "category"));
nvp.add(new BasicNameValuePair("cat", value));
ArrayList<JSONObject> jsondefs = Request.fetchData(this, nvp);
String[] defs = new String[jsondefs.size()];
for (int i = 0; i < jsondefs.size(); i++) {
try {
defs[i] = jsondefs.get(i).getString("Name");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
uFoodAdapter adapter = new uFoodAdapter(this, R.layout.definition_list,
defs);
listView1.setAdapter(adapter);
}
}
Basically I changed the way it was retrieving the data to send by using the position parameter of the onitemclick to get the item from the array being used to populate the listview.
Your problem is probably here at TextView tv = (TextView) view;
you are casting LinearLayout
to TextView
((TextView) view).getText().toString();
but that didn't work either - Will Janes 2012-04-05 23:35