2015-09-19 2 views
0

У меня есть json-файл в Интернете. Этот файл содержит поле «изображение», это поле имеет URL-адрес для изображения. Вопрос. Как я могу поместить изображения в ListView с 2 текстовыми полями? Как поместить текстовые поля, я уже знаю, но как поместить изображения ... Я видел решения с AsyncTask, но у меня есть один класс, расширенный AsyncTask. Класс MainActivity ниже, возможно, это может быть helpul.Изображение в ListView

public class MainActivity extends ListActivity { 
private Context context; 
    private static String url = "https://fierce-citadel-4259.herokuapp.com/hamsters"; 
    private static final String TITLE = "title"; 
    private static final String DESCRIPTION = "description"; 
    private static final String IMAGE = "image"; 
    ArrayList<HashMap<String,String>> jsonlist = new ArrayList<HashMap<String, String>>(); 
    ListView lv; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     new ProgressTask(MainActivity.this).execute(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    private class ProgressTask extends AsyncTask<String,Void,Boolean> { 
     private ProgressDialog dialog; 
     private ListActivity activity; 
     public ProgressTask(MainActivity activity) { 
      this.activity = activity; 
      context = activity; 
      dialog = new ProgressDialog(context); 
     } 
private Context context; 
     protected void onPreExecute(){ 
      this.dialog.setMessage("Progress start"); 
      this.dialog.show(); 
     } 
     protected void onPostExecute(final Boolean success){ 
      if(dialog.isShowing()){ 
       dialog.dismiss(); 
      } 
      ListAdapter adapter = new SimpleAdapter(MainActivity.this,jsonlist, R.layout.list_item,new String[]{TITLE,DESCRIPTION,IMAGE},new int[]{R.id.title,R.id.description,R.id.image}); 
setListAdapter(adapter); 


     } 

     protected Boolean doInBackground(String... args) { 
      JSONParser jParser = new JSONParser(); 
      JSONArray json = jParser.getJSONFromUrl(url); 
      for(int i =0;i<json.length();i++){ 
       try{ 
        JSONObject c = json.getJSONObject(i); 
        String vtitle = c.getString(TITLE); 
        String vdescription = c.getString(DESCRIPTION); 
        String vimage = c.getString(IMAGE); 
HashMap<String,String > map = new HashMap<>(); 
        map.put(TITLE,vtitle); 
        map.put(DESCRIPTION,vdescription); 
        map.put(IMAGE,vimage); 
        jsonlist.add(map); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
      return null; 
     } 
    } 
} 

ответ

1

Я рекомендую вам использовать Пикассо (http://square.github.io/picasso/). Это довольно легко. В Android вы можете использовать ImageView для отображения изображения. Это элемент, который вы должны передать в качестве параметра для выражения Picasso.

Надеюсь, это поможет!

+0

спасибо, я постараюсь начать сделку с Пикассо. –

0

Вы можете загружать изображения в ImageView с, но поскольку ImageView s перерабатываются с ListView, есть некоторые особые соображения.

Вот статья, которая даст вам рекомендации для загрузки образа коды для конкретной ситуации у вас есть:

Multithreading For Performance | Android Developers Blog

Вы должны также проверить библиотеку изображений Пикассо.

+0

спасибо, я прочитаю это. –

Смежные вопросы