ClassCastException异常:android.widget.TextView不能转换为android.widget.ListView [英] ClassCastException: android.widget.TextView cannot be cast to android.widget.ListView
问题描述
我不知道为什么我收到这个类转换异常。我有吗[项目 - >清洁。好几次,仍然没有工作
有人请帮助我。
感谢你。
这是ScheduleFragment.java
公共类ScheduleFragment扩展片段{
公共静态最后弦乐preFS_NAME =preferencesValue;
公共ProgressDialog pDialog;
私人的ListView myListView;
//创建JSON解析器对象
JSONParser jParser =新JSONParser();
ArrayList的< HashMap的<字符串,字符串>> subjectList;
// URL获得所有科目列表
私有静态字符串url_all_subjects =http://192.168.1.12/android_project/get_subjects.php;
// JSON节点名称
私有静态最后弦乐TAG_SUCCESS =成功;
私有静态最后弦乐TAG_STUDENT =学生;
私有静态最后弦乐TAG_MATRIX_ID =matrix_id;
私有静态最后弦乐TAG_NAME =名;
//主题JSONArray
JSONArray学生= NULL;
公共ScheduleFragment(){}
@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,捆绑savedInstanceState)
{
查看rootView = inflater.inflate(R.layout.fragment_schedule,集装箱,假);
//把从登录页面的价值
TextView的tvmatrix =(TextView中)rootView.findViewById(R.id.textViewMatrix);
共享preferences设置= getActivity()getShared preferences(preFS_NAME,0)。
tvmatrix.setText(settings.getString(黑客帝国,A13123));
// ------------------------------------------------ -------------------------
// ------------------------------------创建LISTVIEW --------- --------------
在后台线程//加载主题
新LoadAllSubject()执行()。
//哈希映射为的ListView
subjectList =新的ArrayList< HashMap的<字符串,字符串>>();
myListView =(ListView控件)rootView.findViewById(R.id.textViewMatrix);
//在选择单一主题
myListView.setOnItemClickListener(新OnItemClickListener(){
@覆盖
公共无效onItemClick(适配器视图<>母公司视图中查看,
INT位置,长的id){
//从选择列表项获得价值
字符串matrix_id =((TextView中)view.findViewById(R.id.textViewMatrix))。gettext的()
的ToString();
//开始的新意图
意图=新的意图(getActivity()。getApplicationContext()
SingleSubject.class);
//发送矩阵ID为下一个活动
in.putExtra(TAG_MATRIX_ID,matrix_id);
//开始新的活动,期待一些回响应
startActivityForResult(在,100);
}
});
返回rootView;
}
/ **
*背景异步任务,以通过HTTP请求负载的所有产品
* * /
类LoadAllSubject扩展的AsyncTask<字符串,字符串,字符串> {
/ **
*在启动后台线程显示进度对话框
* * /
@覆盖
在preExecute保护无效(){
super.on preExecute();
pDialog = ProgressDialog.show(ScheduleFragment.this.getActivity(),进步,加载科目请稍候......,假);
pDialog.setIndeterminate(假);
pDialog.setCancelable(假);
}
/ **
*得到所有产品的网址
* * /
保护字符串doInBackground(字符串参数... args){
//大厦参数
名单<的NameValuePair> PARAMS =新的ArrayList<的NameValuePair>();
//从URL获取JSON字符串
JSONObject的JSON = jParser.makeHtt prequest(url_all_subjects,GET,则params);
//检查你的日志猫JSON效应初探
Log.d(所有主题:json.toString());
尝试 {
//检查成功TAG
INT成功= json.getInt(TAG_SUCCESS);
如果(成功== 1){
//对象体内发现
//获取主题的阵
学生= json.getJSONArray(TAG_STUDENT);
//遍历所有科目
的for(int i = 0; I< student.length();我++){
JSONObject的C = student.getJSONObject(我);
//保存在变量中的每个JSON项目
字符串matrix_id = c.getString(TAG_MATRIX_ID);
字符串名称= c.getString(TAG_NAME);
//创建新的HashMap
HashMap的<字符串,字符串>图=新的HashMap<字符串,字符串>();
//添加每个子节点HashMap中的key =>值
map.put(TAG_MATRIX_ID,matrix_id);
map.put(TAG_NAME,姓名);
//添加HashList到ArrayList中
subjectList.add(图)
}
} 其他 {
//没有找到对象
}
}赶上(JSONException E){
e.printStackTrace();
}
返回null;
}
/ **
*在完成后台任务之后关闭该进度对话框
* ** /
保护无效onPostExecute(字符串file_url){
super.onPostExecute(file_url);
让所有的产品之后//关闭该对话框
pDialog.dismiss();
//从后台线程更新UI
ListAdapter适配器=新SimpleAdapter(
getActivity(),subjectList,
R.layout.all_subject,新的String [] {TAG_MATRIX_ID,
TAG_NAME},
新的INT [] {R.id.matrix_id,R.id.name});
//更新列表视图
myListView.setAdapter(适配器);
}
}
}
这是all_subject.xml
<的TextView
机器人:ID =@ + ID / matrix_id
机器人:layout_width =FILL_PARENT
机器人:layout_height =WRAP_CONTENT
机器人:能见度=水涨船高/>
<! - 名称标签 - >
<的TextView
机器人:ID =@ + ID /名称
机器人:layout_width =FILL_PARENT
机器人:layout_height =WRAP_CONTENT
机器人:paddingTop =6dip
机器人:以下属性来=6dip
机器人:TEXTSIZE =17dip
机器人:TEXTSTYLE =黑体/>
这是fragment_schedule.xml
<的ListView
机器人:ID =@机器人:ID /列表
机器人:layout_width =FILL_PARENT
机器人:layout_height =WRAP_CONTENT/>
<的TextView
机器人:ID =@ + ID / textViewMatrix
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:layout_alignParentTop =真
机器人:layout_centerHorizontal =真
机器人:layout_marginTop =66dp
机器人:文本=大文本
机器人:textAppearance =:/>中的Android ATTR / textAppearanceLarge?
这是错误日志。
十二月三号至二十五号:14:06.177:W / dalvikvm(1129):主题ID = 1:螺纹退出与未捕获的异常(组= 0x40d09930)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):致命异常:主要
12月3日至25日:14:06.271:E / AndroidRuntime(1129):java.lang.RuntimeException的:无法启动的活动ComponentInfo {com.ultra.esc / com.ultra.esc.HomeActivity}:java.lang.ClassCastException:机器人.widget.TextView不能转换为android.widget.ListView
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.app.ActivityThread.access $ 600(ActivityThread.java:141)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1234)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.os.Handler.dispatchMessage(Handler.java:99)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.os.Looper.loop(Looper.java:137)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.app.ActivityThread.main(ActivityThread.java:5039)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在java.lang.reflect.Method.invokeNative(本机方法)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在java.lang.reflect.Method.invoke(Method.java:511)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在dalvik.system.NativeStart.main(本机方法)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):由:java.lang.ClassCastException:android.widget.TextView不能转换为android.widget.ListView
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在com.ultra.esc.ScheduleFragment.onCreateView(ScheduleFragment.java:88)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.app.Fragment.performCreateView(Fragment.java:1695)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.app.BackStackRecord.run(BackStackRecord.java:682)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.app.Activity.performStart(Activity.java:5113)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153)
12月3日至25日:14:06.271:E / AndroidRuntime(1129):11 ...更多
您有这样的
myListView =(ListView控件)rootView.findViewById(R.id.textViewMatrix);
大概ID textViewMatrix
是的TextView
。
的事实所证实你已经初始化的TextView具有相同id
TextView的tvmatrix =(TextView中)rootView.findViewById(R.id.textViewMatrix);
//看到ID textViewMatrix了一个TextView,并使用相同的初始化列表视图
您需要有一个的ListView
在 fragment_schedule.xml
<的ListView
机器人:ID =@ + ID / ListView1的
然后
myListView =(ListView控件)rootView.findViewById(R.id.listView1);
编辑:
更改此
<的ListView
机器人:ID =@机器人:ID /列表
//当你扩展ListFragment和膨胀来回片段的自定义布局你会使用这个ID。
到
<的ListView
机器人:ID =@ + ID /列表
然后
myListView =(ListView控件)rootView.findViewById(R.id.list);
I am not sure why I am getting this class cast exception. I have do [Project --> Clean] several times, still didnt work.
Someone please help me.
Thank you.
This is ScheduleFragment.java
public class ScheduleFragment extends Fragment {
public static final String PREFS_NAME="PreferencesValue";
public ProgressDialog pDialog;
private ListView myListView;
// Creating JSON Parser object
JSONParser jParser = new JSONParser();
ArrayList<HashMap<String, String>> subjectList;
// url to get all subjects list
private static String url_all_subjects = "http://192.168.1.12/android_project/get_subjects.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_STUDENT = "student";
private static final String TAG_MATRIX_ID = "matrix_id";
private static final String TAG_NAME = "name";
// subject JSONArray
JSONArray student = null;
public ScheduleFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_schedule, container, false);
//Bring the value from login page
TextView tvmatrix = (TextView)rootView.findViewById(R.id.textViewMatrix);
SharedPreferences settings = getActivity().getSharedPreferences(PREFS_NAME, 0);
tvmatrix.setText(settings.getString("matrix", "A13123"));
//-------------------------------------------------------------------------
//------------------------------------CREATING A LISTVIEW-----------------------
// Loading subject in Background Thread
new LoadAllSubject().execute();
// Hashmap for ListView
subjectList = new ArrayList<HashMap<String, String>>();
myListView = (ListView) rootView.findViewById(R.id.textViewMatrix);
// on selecting single subject
myListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String matrix_id = ((TextView) view.findViewById(R.id.textViewMatrix)).getText()
.toString();
// Starting new intent
Intent in = new Intent(getActivity().getApplicationContext(),
SingleSubject.class);
// sending matrix id to next activity
in.putExtra(TAG_MATRIX_ID, matrix_id);
// starting new activity and expecting some response back
startActivityForResult(in, 100);
}
});
return rootView;
}
/**
* Background Async Task to Load all product by making HTTP Request
* */
class LoadAllSubject extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = ProgressDialog.show(ScheduleFragment.this.getActivity(), "Progress", "Loading subjects. Please wait...", false);
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
}
/**
* getting All products from url
* */
protected String doInBackground(String... args) {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
JSONObject json = jParser.makeHttpRequest(url_all_subjects, "GET", params);
// Check your log cat for JSON reponse
Log.d("All Subjects: ", json.toString());
try {
// Checking for SUCCESS TAG
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// subject found
// Getting Array of Subject
student = json.getJSONArray(TAG_STUDENT);
// looping through All Subjects
for (int i = 0; i < student.length(); i++) {
JSONObject c = student.getJSONObject(i);
// Storing each json item in variable
String matrix_id = c.getString(TAG_MATRIX_ID);
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_MATRIX_ID, matrix_id);
map.put(TAG_NAME, name);
// adding HashList to ArrayList
subjectList.add(map);
}
} else {
// no subjects found
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
super.onPostExecute(file_url);
// dismiss the dialog after getting all products
pDialog.dismiss();
// updating UI from Background Thread
ListAdapter adapter = new SimpleAdapter(
getActivity(), subjectList,
R.layout.all_subject, new String[] { TAG_MATRIX_ID,
TAG_NAME},
new int[] { R.id.matrix_id, R.id.name });
// updating listview
myListView.setAdapter(adapter);
}
}
}
This is all_subject.xml
<TextView
android:id="@+id/matrix_id"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
<!-- Name Label -->
<TextView
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="6dip"
android:paddingLeft="6dip"
android:textSize="17dip"
android:textStyle="bold" />
This is fragment_schedule.xml
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/textViewMatrix"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="66dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
This is error log.
03-25 12:14:06.177: W/dalvikvm(1129): threadid=1: thread exiting with uncaught exception (group=0x40d09930)
03-25 12:14:06.271: E/AndroidRuntime(1129): FATAL EXCEPTION: main
03-25 12:14:06.271: E/AndroidRuntime(1129): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ultra.esc/com.ultra.esc.HomeActivity}: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.ListView
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.app.ActivityThread.access$600(ActivityThread.java:141)
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.os.Handler.dispatchMessage(Handler.java:99)
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.os.Looper.loop(Looper.java:137)
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.app.ActivityThread.main(ActivityThread.java:5039)
03-25 12:14:06.271: E/AndroidRuntime(1129): at java.lang.reflect.Method.invokeNative(Native Method)
03-25 12:14:06.271: E/AndroidRuntime(1129): at java.lang.reflect.Method.invoke(Method.java:511)
03-25 12:14:06.271: E/AndroidRuntime(1129): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-25 12:14:06.271: E/AndroidRuntime(1129): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-25 12:14:06.271: E/AndroidRuntime(1129): at dalvik.system.NativeStart.main(Native Method)
03-25 12:14:06.271: E/AndroidRuntime(1129): Caused by: java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.ListView
03-25 12:14:06.271: E/AndroidRuntime(1129): at com.ultra.esc.ScheduleFragment.onCreateView(ScheduleFragment.java:88)
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.app.Fragment.performCreateView(Fragment.java:1695)
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.app.BackStackRecord.run(BackStackRecord.java:682)
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.app.Activity.performStart(Activity.java:5113)
03-25 12:14:06.271: E/AndroidRuntime(1129): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153)
03-25 12:14:06.271: E/AndroidRuntime(1129): ... 11 more
You have this
myListView = (ListView) rootView.findViewById(R.id.textViewMatrix);
Probably id textViewMatrix
is a TextView
.
Confirmed by the fact you already initialize textview with the same id
TextView tvmatrix = (TextView)rootView.findViewById(R.id.textViewMatrix);
// see the id textViewMatrix its a textview and you use the same to initialize listview
You need to have a ListView
in your fragment_schedule.xml
<ListView
android:id="@+id/listView1
Then
myListView = (ListView) rootView.findViewById(R.id.listView1);
Edit :
Change this
<ListView
android:id="@android:id/list"
// you would use this id when you extend ListFragment and inflate a custom layout fro the fragment.
to
<ListView
android:id="@+id/list"
And then
myListView = (ListView) rootView.findViewById(R.id.list);
这篇关于ClassCastException异常:android.widget.TextView不能转换为android.widget.ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!