Android Glide库已在AsyncTask.doInBackground中停止
我有一个从数据库中检索到的图像URL,我想在图像视图中显示它。为此,我使用Glide库,但在运行Android Glide库已在AsyncTask.doInBackground中停止,android,android-asynctask,fragment,android-glide,Android,Android Asynctask,Fragment,Android Glide,我有一个从数据库中检索到的图像URL,我想在图像视图中显示它。为此,我使用Glide库,但在运行doInBackground时出现了异常 public class Main extends Fragment implements OnClickListener { private static String url = "http://timit.ir/select/select_pro"; private static final String TAG_SUCCESS = "
doInBackground
时出现了异常
public class Main extends Fragment implements OnClickListener {
private static String url = "http://timit.ir/select/select_pro";
private static final String TAG_SUCCESS = "success";
private static final String TAG_PRODUCTS = "product";
private static final String TAG_PID = "Pro_ID";
public static final String TAG_PIMAGE = "Url";
public static final String TAG_PNAME = "Pro_Name";
public static final String TAG_PRICE = "Price";
public static final String TAG_DESCRIPTION = "description";
public static final String TAG_OLDPRICE = "oldPrice";
public static final String TAG_COMPANYNAME = "companyName";
public List<Card> cardList;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.frag_main, container, false);
l1 = (LinearLayout)rootView.findViewById(R.id.horizontal1);
l2 = (LinearLayout)rootView.findViewById(R.id.horizontal2);
new LoadAllProducts().execute();
return rootView;
}
class LoadAllProducts extends AsyncTask<String, String, List<Card>> {
@Override protected List<Card> doInBackground(String... args) {
cardList = new ArrayList<Card>();
JSONObject json = jParser.makeHttpRequest(url, "GET", params);
// Check your log cat for JSON reponse
Log.d("All Products: ", json.toString());
try {
// Checking for SUCCESS TAG
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// products found
// Getting Array of Products
products = json.getJSONArray(TAG_PRODUCTS);
// looping through All Products
for (int i = 0; i < products.length(); i++) {
JSONObject c = products.getJSONObject(i);
Card card = new Card(getActivity());
Log.d("url:", c.getString(TAG_PIMAGE));
Glide.with(Main.this).load(c.getString(TAG_PIMAGE)).into(card.productThumbnailImage);
card.productId = c.getString(TAG_PID);
card.productName.setText(c.getString(TAG_PNAME));
card.price.setText(c.getString(TAG_PRICE));
card.description.setText(c.getString(TAG_DESCRIPTION));
card.companyName.setText(c.getString(TAG_COMPANYNAME));
card.oldPrice.setText(c.getString(TAG_OLDPRICE));
cardList.add(card);
}
return cardList;
}
} catch (JSONException e) {
e.printStackTrace();
}
return cardList;
}
@Override protected void onPostExecute(List<Card> lcard) {
super.onPostExecute(lcard);
if (lcard.size() != 0) {
for (int i = 0; i < lcard.size(); i++) {
l1.addView(lcard.get(i));
}
}
}
}
}
public类主扩展片段实现OnClickListener{
专用静态字符串url=”http://timit.ir/select/select_pro";
私有静态最终字符串标记_SUCCESS=“SUCCESS”;
私有静态最终字符串TAG_PRODUCTS=“product”;
私有静态最终字符串标记\u PID=“Pro\u ID”;
公共静态最终字符串标记_PIMAGE=“Url”;
公共静态最终字符串标记\u PNAME=“Pro\u Name”;
公共静态最终字符串TAG_PRICE=“PRICE”;
公共静态最终字符串标记\u DESCRIPTION=“DESCRIPTION”;
公共静态最终字符串标记_OLDPRICE=“OLDPRICE”;
公共静态最终字符串标记\u COMPANYNAME=“COMPANYNAME”;
公开名单和名片;
@覆盖CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(R.layout.frag_main,容器,假);
l1=(LinearLayout)rootView.findViewById(R.id.horizontal1);
l2=(LinearLayout)rootView.findViewById(R.id.horizontal2);
新建LoadAllProducts().execute();
返回rootView;
}
类LoadAllProducts扩展了AsyncTask{
@覆盖受保护列表doInBackground(字符串…参数){
cardList=newarraylist();
JSONObject json=jParser.makeHttpRequest(url,“GET”,参数);
//检查日志cat中的JSON响应
Log.d(“所有产品:,json.toString());
试一试{
//检查成功标签
int success=json.getInt(TAG_success);
如果(成功==1){
//发现的产品
//获取一系列产品
products=json.getJSONArray(TAG_products);
//在所有产品中循环
对于(int i=0;i
我的日志:
07-02 11:38:59.506:D/url:(4967):
/iphone6plusthumnail.png
您不能在后台线程上调用.into(ImageView)
。
我很确定你的日志中有类似的内容:
E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: net.twisterrob.app, PID: 11027
java.lang.RuntimeException: An error occured while executing doInBackground()
...
Caused by:
java.lang.IllegalArgumentException: You must call this method on the main thread
...
要修复此问题,请将PIMAGE字符串存储在卡中,然后存储在onPostExecute中
:
Card card = lcard.get(i);
Glide.with(Main.this).load(card.imageUrl).into(card.productThumbnailImage);
请帮帮我。没有人能帮我解决这个问题???如果你发布了你提到的异常,包括你日志中的错误,你可能会更幸运!如果不显示错误是什么,你就不会得到答案。如果人们能够阅读你的代码并看到一些结构,这也会有很大帮助。很难相信你的应用程序中真的有这么乱七八糟的代码。如果你真的这样做了,你应该看看“自动格式化代码”。我现在帮你修好了。