2016-09-28 2 views
3

Мое приложение закрывается каждый раз, когда я пытаюсь увидеть изображения. Можете ли вы объяснить, почему?Crash with Glide on android app

Возможно, проблема связана с строкой Glide.with(getApplicationContext()), может быть, это неверно. Но для Android Studio у меня нет ошибок:

Все остальные элементы в порядке, проблема только в скольжении.

public class MainActivity extends AppCompatActivity { 

    private final String url= "MY ARRAY"; 
    ... 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ... 
     new gson().execute(url); 
    } 

    public class gson extends AsyncTask<String,String, List<MovieModel> >{ 

    .... 
public class Adapter extends ArrayAdapter{ 
    private List<MovieModel> movieModelList; 
    private int resource; 
    private LayoutInflater inflater; 
    public Adapter(Context context, int resource, List<MovieModel> objects) { 
     super(context, resource, objects); 
     movieModelList = objects; 
     this.resource = resource; 
     inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
    } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     if(convertView == null){ 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(resource, null); 
      holder.fruitsfoto = (ImageView)convertView.findViewById(R.id.fruits); 
      holder.fruitsname = (TextView)convertView.findViewById(R.id.name); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     ImageView imageView = (ImageView) findViewById(R.id.pics); 
     final ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar); 
try { 
Glide.with(MainActivity.this)//getApplicationContext() 
     .load(ModelList.get(position).getImage()) 
     .listener(new RequestListener<String, GlideDrawable>() { 
    @Override 
    public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { 
     return false; 
    } 
    @Override 
    public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { 
     progressBar.setVisibility(View.GONE); 
     return false; 
    } 
}) 
     .into(imageView); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
holder.fruitsname.setText(ModelList.get(position).getName()); 
return convertView; 
      } 
     } 
    } 

Обновление: Изображения не следуют за массивом. Нужно решение.

public Adapter(Context context, int resource, List<MovieModel> objects) { 
     super(context, resource, objects); 
     ModelList = objects; 
     this.resource = resource; 
     inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
    } 
..... 
    try { 
    Glide.with(MainActivity.this)//getApplicationContext() 
      .load(ModelList.get(position).getFruits()) 
      .into(imageView); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

Edit:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = null; 
    if(convertView == null){ 
     holder = new ViewHolder(); 
     convertView = inflater.inflate(resource, null); 
     holder.fruitsfoto = (ImageView)convertView.findViewById(R.id.fruits); 
     holder.fruitsname = (TextView)convertView.findViewById(R.id.name); 
1)holder.image = (TextView)convertView.findViewById(R.id.pics); 
2)ImageView imageView = (ImageView)convertView.findViewById(R.id.pics);    
convertView.setTag(holder); 
//the first cause a crash 
//the second return "Variable 'imageView is never used'" 

Это ошибка консоли:

09-28 17:19:42.079 30111-30111/app E/AndroidRuntime: FATAL EXCEPTION: main 
              Process: app, PID: 30111 
              java.lang.NullPointerException 
              at app$1.onResourceReady(MainActivity.java:309) 
              at app$1.onResourceReady(MainActivity.java:301) 
              at com.bumptech.glide.request.GenericRequest.onResourceReady(GenericRequest.java:522) 
              at com.bumptech.glide.request.GenericRequest.onResourceReady(GenericRequest.java:507) 
              at com.bumptech.glide.load.engine.EngineJob.handleResultOnMainThread(EngineJob.java:158) 
              at com.bumptech.glide.load.engine.EngineJob.access$100(EngineJob.java:22) 
              at com.bumptech.glide.load.engine.EngineJob$MainThreadCallback.handleMessage(EngineJob.java:202) 
              at android.os.Handler.dispatchMessage(Handler.java:98) 
              at android.os.Looper.loop(Looper.java:146) 
              at android.app.ActivityThread.main(ActivityThread.java:5511) 
              at java.lang.reflect.Method.invokeNative(Native Method) 
              at java.lang.reflect.Method.invoke(Method.java:515) 
              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
              at dalvik.system.NativeStart.main(Native Method) 
+2

сообщение LogCat ошибка – Nikhil

+1

Glide.with (getApplicationContext)() заменить Glide.with (MainActivity.this) –

+0

Если вы столкнулись с проблемой в отношении изображений ошибочно размещены, пожалуйста, не стесняйтесь поделиться код вашего Адаптер здесь. –

ответ

2

Пожалуйста, проверьте, если вы добавили INTERNET разрешение в манифесте приложения?

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="viewpager.nested.example.com.testapplicationforso"> 

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

    <application 
     ... 
    </application> 

</manifest> 

И да, это всегда хорошо иметь свой скользят изображение сегмент загрузки кода внутри try/catch заявления.

try { 
    Glide.with(getApplicationContext()).load(yourUrl).into(img); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Update:

О изображениях неправильно размещенных - я мог видеть, что в вашей getView функции, вы не нашли ImageView правильно. Вы должны найти ImageView внутри convertView, как и другие элементы в списке.

holder.image = (TextView)convertView.findViewById(R.id.pics); 

// Then load the image in holder.image 
Glide.with(MainActivity.this)//getApplicationContext() 
    .load(ModelList.get(position).getFruits()) 
    .into(holder.image); 
+0

Я изменяю код для своего решения: try {Glide.with (MainActivity.this) // getApplicationContext() .load (movieModelList.get (position) .getImage()) .into (imageView); } catch (Исключение e) { e.printStackTrace(); } Это работает, я вижу изображения, но у меня разные проблемы: Изображения с изображениями не следуют за списком массива: например, фотография яблока появляется в списке бананов, и если прокрутить вниз, это исчезло из банановый список и вместо этого появляется фотография банана. Почему я не вижу их в правильном порядке? – Question

+0

Я добавил комментарий по вашему вопросу. Пожалуйста, поделитесь своим кодом адаптера в вопросе. Попробуйте изменить свой вопрос с помощью кода адаптера. –

+0

Я изменил свое сообщение. – Question