gpt4 book ai didi

java - 类转换异常错误 fragment

转载 作者:行者123 更新时间:2023-12-01 11:14:42 24 4
gpt4 key购买 nike

我做了这个教程http://javapapers.com/android/android-twitter-feed-reader/在 Eclipse 中并将我的项目移至工作室。有人可以帮助解释这些错误的含义以及我如何解决它们吗?我的logcat如下:

java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.ClassCastException: com.example.ishonours.witsbusapp.TwitterFragment cannot be cast to android.app.ListActivity
at com.example.ishonours.witsbusapp.TwitterAsyncTask.doInBackground(TwitterAsyncTask.java:24)
at com.example.ishonours.witsbusapp.TwitterAsyncTask.doInBackground(TwitterAsyncTask.java:15)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)

这是我的 TwitterAsyncTask 类:

import android.app.ListActivity;
import android.text.method.LinkMovementMethod;
import android.widget.ArrayAdapter;
import android.os.AsyncTask;
import android.widget.ListView;
import android.widget.TextView;

import com.example.ishonours.witsbusapp.TwitterAPI;
import com.example.ishonours.witsbusapp.TwitterTweet;

import java.util.ArrayList;

public class TwitterAsyncTask extends AsyncTask<Object, Void, ArrayList<TwitterTweet>> {
ListActivity callerActivity;

final static String TWITTER_API_KEY = "xxx";
final static String TWITTER_API_SECRET = "xxx";

@Override
protected ArrayList<TwitterTweet> doInBackground(Object... params) {
ArrayList<TwitterTweet> twitterTweets = null;
callerActivity = (ListActivity) params[1];
if (params.length > 0) {
TwitterAPI twitterAPI = new TwitterAPI(TWITTER_API_KEY,TWITTER_API_SECRET);
twitterTweets = twitterAPI.getTwitterTweets(params[0].toString());
}
return twitterTweets;
}

@Override
protected void onPostExecute(ArrayList<TwitterTweet> twitterTweets) {
ArrayAdapter<TwitterTweet> adapter =
new ArrayAdapter<TwitterTweet>(callerActivity, R.layout.twitter_tweets_list,
R.id.listTextView, twitterTweets);
callerActivity.setListAdapter(adapter);
ListView lv = callerActivity.getListView();
lv.setDividerHeight(0);
//lv.setDivider(this.getResources().getDrawable(android.R.color.transparent));
//lv.setBackgroundColor(callerActivity.getResources().getColor(R.color.Twitter_blue));
}
}

我应该提到我对此非常陌生。这些评论让我对这个错误有了一些看法。我仍然不太确定如何解决它。还有其他建议吗?

这是另一个类,TwitterFragment:

public class TwitterFragment extends ListFragment {

private static final String ARG_SECTION_NUMBER = "4";

private OnFragmentInteractionListener mListener;

public static TwitterFragment newInstance(int menuNumber) {
TwitterFragment fragment = new TwitterFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, menuNumber);
fragment.setArguments(args);
return fragment;
}

public TwitterFragment() {
}

//i added
final static String twitterScreenName = "WitsServices";
final static String TAG = "MainActivity";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//i added
AndroidNetworkUtility androidNetworkUtility = new AndroidNetworkUtility();
if (androidNetworkUtility.isConnected(this)) {
new TwitterAsyncTask().execute(twitterScreenName,this);
} else {
Log.v(TAG, "Network not Available!");
}


//setListAdapter(new ArrayAdapter<DummyContent.DummyItem>(getActivity(),
// android.R.layout.simple_list_item_1, android.R.id.text1, DummyContent.ITEMS));
}


@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
((MainActivity) activity).onSectionAttached(
getArguments().getInt(ARG_SECTION_NUMBER));
}

@Override
public void onDetach() {
super.onDetach();
mListener = null;
}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);

if (null != mListener) {
// Notify the active callbacks interface (the activity, if the
// fragment is attached to one) that an item has been selected.
//mListener.onFragmentInteraction(DummyContent.ITEMS.get(position).id);
}
}

public interface OnFragmentInteractionListener {
// TODO: Update argument type and name
public void onFragmentInteraction(String id);
}

}

最佳答案

当这条线运行时,

callerActivity = (ListActivity) params[1];

代码假定 params 数组中索引 1 处的对象可以转换为 ListActivity 类型。但它发现类型是 TwitterFragment - 不兼容的转换,因此您会收到此错误。

鉴于您采用任意对象数组作为输入,崩溃的可能原因是当您创建并调用 AsyncTask 时,您必须传入 TwitterFragment,而不是传递 ListActivity 类型的类。

关于java - 类转换异常错误 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31975021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com