滑动不从 url 加载图像
Glide not loads image from url
我有 ListView
,我有 ImageView
。我需要从 url 获取图像并显示在 ImageView
中,但这不起作用,图像不可见。在那个 ListView
中,我也有一个 TextView
和 CheckBox
,但你不需要它,因为它有效。我正在使用 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();
}
});
}
}
好的,这是代码。我完成了调试,Image url 它成功获取,但 glide 没有加载它。感谢阅读。
好的,这是布局。
<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>
将请求选项与滑行结合使用
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);
您可以使用 Glide
或 Picasso
。来自 activity 的代码将是:
毕加索
Picasso.get().load(url).resize(50, 50).centerCrop().into(imageView)
滑行
Glide.with (context)
.load ( "http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
.into (imageView);
尝试在 https 中使用 http。我认为这是服务器问题。
我完全是 Android 初学者,我的问题是我是 missing the INTERNET permission
(经过一个小时的麻烦后我可以在 Logcat 选项卡中阅读)。
所以尝试将此添加到您的 AndroidManifest.xml
:
<manifest xlmns:android...>
...
<uses-permission android:name="android.permission.INTERNET" />
<application ...
</manifest>
我刚刚添加了 <uses-permission android:name="android.permission.INTERNET" />
并且最终成功了。
我有 ListView
,我有 ImageView
。我需要从 url 获取图像并显示在 ImageView
中,但这不起作用,图像不可见。在那个 ListView
中,我也有一个 TextView
和 CheckBox
,但你不需要它,因为它有效。我正在使用 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();
}
});
}
}
好的,这是代码。我完成了调试,Image url 它成功获取,但 glide 没有加载它。感谢阅读。
好的,这是布局。
<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>
将请求选项与滑行结合使用
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);
您可以使用 Glide
或 Picasso
。来自 activity 的代码将是:
毕加索
Picasso.get().load(url).resize(50, 50).centerCrop().into(imageView)
滑行
Glide.with (context)
.load ( "http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
.into (imageView);
尝试在 https 中使用 http。我认为这是服务器问题。
我完全是 Android 初学者,我的问题是我是 missing the INTERNET permission
(经过一个小时的麻烦后我可以在 Logcat 选项卡中阅读)。
所以尝试将此添加到您的 AndroidManifest.xml
:
<manifest xlmns:android...>
...
<uses-permission android:name="android.permission.INTERNET" />
<application ...
</manifest>
我刚刚添加了 <uses-permission android:name="android.permission.INTERNET" />
并且最终成功了。