gpt4 book ai didi

android - fragment后台任务访问资源经常返回illegalStateException

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:30:30 24 4
gpt4 key购买 nike

我正在发出异步网络请求以获取评论和预告片。

如果存在评论和预告片,则将它们设置为 TextView 文本。如果不存在评论,那么我将 textview 测试设置为 "No reviews"(message_no_reviews),这是 strings.xml 文件中的预定义字符串变量。

现在为了在没有评论可用时显示该文本,我正在使用

getResources().getString(R.string.message_no_reviews)

问题是调用 getResources().getString(R.string.message_no_reviews) 返回 java.lang.IllegalStateException: Fragment MovieDetailFragment{1fdfd76} not attached to Activity 很多次,而调用 getResources().getString(R.string.api_key) 不会导致任何异常。

以下是代码 fragment 。

public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getReviews();
getTrailers();
}

public void getReviews(){


Call<JsonObject> getReviewsCall = apiService.getReview(movie.getId(),getResources().getString(R.string.api_key));


getReviewsCall.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Response<JsonObject> response, Retrofit retrofit) {

if (response.body() != null) {

JsonArray reviews=(JsonArray) response.body().get("results");
System.out.println(reviews);
if(reviews.size()>0) {
tvReviewText.setText(((JsonObject) reviews.get(0)).get("content").getAsString());
tvReviewAuthor.setText(((JsonObject) reviews.get(0)).get("author").getAsString());

}
else{

tvReviewAuthor.setText(getResources().getString(R.string.message_no_reviews));
tvReviewText.setText("");
}

}

}

@Override
public void onFailure(Throwable t) {

}

});


}

关于为什么会发生这种情况有什么想法吗?

下面是日志

 FATAL EXCEPTION: main
Process: com.vipin.www.popularmovies, PID: 21580
java.lang.IllegalStateException: Fragment MovieDetailFragment{1fdfd76} not attached to Activity
at android.support.v4.app.Fragment.getResources(Fragment.java:636)
at com.vipin.www.popularmovies.MovieDetailFragment$2.onResponse(MovieDetailFragment.java:168)
at retrofit.ExecutorCallAdapterFactory$ExecutorCallback$1.run(ExecutorCallAdapterFactory.java:86)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

最佳答案

您的 fragment 未附加到 Activity 意味着:您的 fragment 当时对用户不可见,因为您通过按钮进行了网络调用,它创建了另一个后台线程,然后您要么 backStack fragment 或将其从 Activity 中删除。因此,当响应到达 onResponse 方法时,其上下文不可用。

所以你应该使用:

Fragment.this.getResources().getString(R.string.message_no_reviews)); 

或者在 onCreate() 和 onDestroy() 中创建一个 bool 值,判断 fragment 是否被附加

关于android - fragment后台任务访问资源经常返回illegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36745309/

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