【问题标题】:Glide not loads image from urlGlide 不从 url 加载图像
【发布时间】:2018-03-22 16:09:43
【问题描述】:

我有ListView,我有ImageView。我需要从 url 获取图像并在ImageView 中显示,但这不起作用,图像不可见。在那个ListView 我也有一个TextViewCheckBox,但你不需要它,因为它有效。我正在使用Glide。所以有什么问题?

我设置了 glide 占位符,它会加载占位符。我已经完成了调试,我看到 glide 获取了图像 URL。但是图片加载不出来。

好的,这是商品代码。

public class LanguageItem {

String imagePath;

LanguageItem(String imagePath,) {
    this.imagePath = imagePath;
}

public String getImagePath() {
    return imagePath;
}

还有 textView 和 checkbox

这里是适配器。

public class LanguageAdapter extends BaseAdapter {

private Context context;
private LayoutInflater lInflater;
private ArrayList<LanguageItem> objects;

LanguageAdapter(Context context, ArrayList<LanguageItem> itemObj) {
    this.context = context;
    objects = itemObj;
    lInflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

//amount of elements
@Override
public int getCount() {
    return objects.size();
}

//element by position
@Override
public Object getItem(int position) {
    return objects.get(position);
}

//id by position
@Override
public long getItemId(int position) {
    return position;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View view = convertView;
    if (view == null) {
        view = lInflater.inflate(R.layout.language_items, parent, false);
    }

    ImageView imageView = (ImageView) view.findViewById(R.id.imageView);

Glide.with(context).load(objects.get(position).getImagePath()).thumbnail(0.5f).crossFade().into(imageView);


    return view;
}

这是片段。我正在片段中做我的工作。

public class FragmentLanguage extends BaseFragment {

private static final String IMAGE = "IMAGE";
private ApiClient apiClient;
private ArrayList<LanguageItem> objS;
private LanguageAdapter adapter;

private View mainView;
private ListView listView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mainView = inflater.inflate(R.layout.languages, container, false);
    listView = (ListView) mainView.findViewById(R.id.language_list);

    apiClient = ApiClient.getInstance();

    //calling methods
    fillData();
    showResult();

    return mainView;
}

public void fillData() {

    objS = new ArrayList<>();

    getLanguageCall();

}

public void getLanguageCall() {
    Call<ResponseBody> getLanguage = apiClient.getLanguage(SharedPreferencesManager.getInstance().getAccessToken());
    getLanguage.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            if (response.isSuccessful()) {
                try {
                    String data = response.body().string();
                    JSONArray array = new JSONArray(data);


                    for (int i = 0; i < array.length(); i++) {
                        JSONObject object = array.getJSONObject(i);
                        String languageName = object.getString("name");
                        String path = object.getString("image_path");
                        String real_path = "https://supportop.eu-gb.mybluemix.net" + path.substring(1, path.length());


                        Toast.makeText(context, real_path, Toast.LENGTH_SHORT).show();
                        objS.add(new LanguageItem(languageName,real_path, false));
                    }
                    adapter = new LanguageAdapter(getActivity(), objS);
                    listView.setAdapter(adapter);

                } catch (IOException | JSONException e) {
                    e.printStackTrace();
                }
            } 
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Toast.makeText(context, "Error", Toast.LENGTH_SHORT).show();
        }
    });
}
}

好的,这是代码。我完成了调试并且它成功获取了图像 url,但滑行没有加载它。感谢您的阅读。

好的,这是布局。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/white"
android:orientation="horizontal">

<ImageView
    android:id="@+id/imageView"
    android:layout_width="45dp"
    android:layout_height="30dp"
    android:layout_gravity="center"
    android:layout_marginStart="20dp" />

这里是 listView 部分。

<ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/language_list"
    android:layout_marginTop="10dp"
    android:layout_below="@+id/linearLayout"
    android:layout_above="@+id/bottomNavigationView">

</ListView>

【问题讨论】:

  • 如果您只尝试Glide.with(context).load(objects.get(position).getImagePath()).into(imageView); 是否有效?无论如何,您确定您的图片网址是好的吗?你试过这个吗? Glide.with(context).load("https://a-valid-url/myimage.png").thumbnail(0.5f).crossFade().into(imageView);
  • 你能试试这个 Glide.with(mContext).load(Uri.fromFile(new File(objects.get(position).getImagePath())).into(imageView); & 你是使用任何缓存策略?
  • 不,我没有使用缓存策略

标签: java android retrofit2 android-glide


【解决方案1】:

尝试在 https 中使用 http。我认为这是服务器问题。

【讨论】:

    【解决方案2】:

    您可以使用GlidePicasso。从活动中,代码将喜欢:

    毕加索

      Picasso.get().load(url).resize(50, 50).centerCrop().into(imageView)
    

    滑翔

      Glide.with (context)
         .load ( "http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
         .into (imageView);
    

    【讨论】:

    • 最新的毕加索库有不同的语法!小心! Picasso.get().load("http://i.imgur.com/DvpvklR.png").into(imageView);
    【解决方案3】:

    我是一个完全的 Android 初学者,我的问题是我是 missing the INTERNET permission(经过一个小时的麻烦,我可以在 Logcat 选项卡中看到)。

    所以尝试将此添加到您的AndroidManifest.xml

    <manifest xlmns:android...>
     ...
     <uses-permission android:name="android.permission.INTERNET" />
     <application ...
    </manifest>
    

    【讨论】:

    • 嗨爸爸松饼。感谢您的回答。问题出在服务器端。图像来自 https 并且由于服务器而未加载图像。当我将其更改为 http 时,问题已解决。所以如果你也有这个问题,试着把http改成https或者反向。希望这对您将来有所帮助。谢谢。
    【解决方案4】:

    通过滑行使用请求选项

    RequestOptions options = new RequestOptions() 
            .centerCrop() 
            .placeholder(R.mipmap.ic_launcher_round)
            .error(R.mipmap.ic_launcher_round);
    Glide.with(this).load(image_url).apply(options).into(imageView);
    

    【讨论】:

      【解决方案5】:

      我刚刚添加了&lt;uses-permission android:name="android.permission.INTERNET" /&gt;,它终于奏效了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-13
        • 1970-01-01
        • 2016-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-04
        相关资源
        最近更新 更多