2015-03-23 3 views
0

Я хочу отображать изображения с URL-адресов, эти URL-адреса получаются из базы данных mysql вместе с другой информацией, например, именем пользователя, заголовком сообщения и сообщением. Мне уже удалось сделать, что URL-адрес получен из базы данных и отображается как текст в сообщении.Показать изображение из URL в ImageView?

Теперь я изменил тип из TextView в ImageView:

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/url" 
    android:layout_gravity="center_horizontal" /> 

Я не знаю, как поступить.

Это мой код:

public class ReadComments extends ListActivity { 


// Progress Dialog 
private ProgressDialog pDialog; 

//php read comments script 

//localhost : 
//testing on your device 
//put your local ip instead, on windows, run CMD > ipconfig 
//or in mac's terminal type ifconfig and look for the ip under en0 or en1 
// private static final String READ_COMMENTS_URL = "http://xxx.xxx.x.x:1234/webservice/comments.php"; 

//testing on Emulator: 
private static final String READ_COMMENTS_URL = "http://www.eywow.com/webservice/comments.php"; 

//testing from a real server: 
//private static final String READ_COMMENTS_URL = "http://www.mybringback.com/webservice/comments.php"; 

//JSON IDS: 
private static final String TAG_SUCCESS = "success"; 
private static final String TAG_TITLE = "title"; 
private static final String TAG_POSTS = "posts"; 
private static final String TAG_POST_ID = "post_id"; 
private static final String TAG_USERNAME = "username"; 
private static final String TAG_MESSAGE = "message"; 
private static final String TAG_URL = "url"; 


//it's important to note that the message is both in the parent branch of 
//our JSON tree that displays a "Post Available" or a "No Post Available" message, 
//and there is also a message for each individual post, listed under the "posts" 
//category, that displays what the user typed as their message. 


//An array of all of our comments 
private JSONArray mComments = null; 
//manages all of our comments in a list. 
private ArrayList<HashMap<String, String>> mCommentList; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //note that use read_comments.xml instead of our single_post.xml 
    setContentView(R.layout.read_comments); 



} 





@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    //loading the comments via AsyncTask 
    new LoadComments().execute(); 
} 

public void addComment(View v) 
{ 
    Intent i = new Intent(ReadComments.this, AddComment.class); 
    startActivity(i); 
} 

public void startButton(View v) 
{ 
    Intent a = new Intent(ReadComments.this, UploadToServer.class); 
    startActivity(a); 
} 

/** 
* Retrieves recent post data from the server. 
*/ 
public void updateJSONdata() { 

    // Instantiate the arraylist to contain all the JSON data. 
    // we are going to use a bunch of key-value pairs, referring 
    // to the json element name, and the content, for example, 
    // message it the tag, and "I'm awesome" as the content.. 

    mCommentList = new ArrayList<HashMap<String, String>>(); 

    // Bro, it's time to power up the J parser 
    JSONParser jParser = new JSONParser(); 
    // Feed the beast our comments url, and it spits us 
    //back a JSON object. Boo-yeah Jerome. 
    JSONObject json = jParser.getJSONFromUrl(READ_COMMENTS_URL); 

    //when parsing JSON stuff, we should probably 
    //try to catch any exceptions: 
    try { 

     //I know I said we would check if "Posts were Avail." (success==1) 
     //before we tried to read the individual posts, but I lied... 
     //mComments will tell us how many "posts" or comments are 
     //available 
     mComments = json.getJSONArray(TAG_POSTS); 

     // looping through all posts according to the json object returned 
     for (int i = 0; i < mComments.length(); i++) { 
      JSONObject c = mComments.getJSONObject(i); 

      //gets the content of each tag 
      String title = c.getString(TAG_TITLE); 
      String content = c.getString(TAG_MESSAGE); 
      String username = c.getString(TAG_USERNAME); 
      String url = c.getString(TAG_URL); 


      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 

      map.put(TAG_TITLE, title); 
      map.put(TAG_MESSAGE, content); 
      map.put(TAG_USERNAME, username); 
      map.put(TAG_URL, url); 

      // adding HashList to ArrayList 
      mCommentList.add(map); 

      //annndddd, our JSON data is up to date same with our array list 
     } 

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



/** 
* Inserts the parsed data into the listview. 
*/ 
private void updateList() { 
    // For a ListActivity we need to set the List Adapter, and in order to do 
    //that, we need to create a ListAdapter. This SimpleAdapter, 
    //will utilize our updated Hashmapped ArrayList, 
    //use our single_post xml template for each item in our list, 
    //and place the appropriate info from the list to the 
    //correct GUI id. Order is important here. 
    ListAdapter adapter = new SimpleAdapter(this, mCommentList, 
      R.layout.single_post, new String[] { TAG_TITLE, TAG_MESSAGE, 
      TAG_USERNAME, TAG_URL }, new int[] { R.id.title, R.id.message, 
      R.id.username, R.id.url }); 

    // I shouldn't have to comment on this one: 
    setListAdapter(adapter); 

    // Optional: when the user clicks a list item we 
    //could do something. However, we will choose 
    //to do nothing... 
    ListView lv = getListView(); 
    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 

      // This method is triggered if an item is click within our 
      // list. For our example we won't be using this, but 
      // it is useful to know in real life applications. 

     } 
    }); 


} 

class PostLike{ 




} 



public class LoadComments extends AsyncTask<Void, Void, Boolean> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pDialog = new ProgressDialog(ReadComments.this); 
     pDialog.setMessage("Loading Comments..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 
    @Override 
    protected Boolean doInBackground(Void... arg0) { 
     //we will develop this method in version 2 
     updateJSONdata(); 
     return null; 

    } 


    @Override 
    protected void onPostExecute(Boolean result) { 
     super.onPostExecute(result); 
     pDialog.dismiss(); 
     //we will develop this method in version 2 
     updateList(); 
    } 
} 
} 
+0

попробовать это [UniversalImageLoader] (https://github.com/nostra13/Android-Universal-Image-Loader) – Harry

+0

Try Пикассо библиотека – EpicPandaForce

+0

Можете ли вы помочь мне решить эту проблему? Я не знаю, как реализовать Picasso, чтобы заставить его работать. – Hendrik04

ответ

0

Хорошо, я добавил его и включал .jar, но он не работает, приложение просто падает, я думаю, что это соответствующая часть, чтобы решить эту проблему:

try { 


     mComments = json.getJSONArray(TAG_POSTS); 

     // looping through all posts according to the json object returned 
     for (int i = 0; i < mComments.length(); i++) { 
      JSONObject c = mComments.getJSONObject(i); 

      //gets the content of each tag 
      String title = c.getString(TAG_TITLE); 
      String content = c.getString(TAG_MESSAGE); 
      String username = c.getString(TAG_USERNAME); 
      String url = c.getString(TAG_URL); 


      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 

      map.put(TAG_TITLE, title); 
      map.put(TAG_MESSAGE, content); 
      map.put(TAG_USERNAME, username); 
      map.put(TAG_URL, url); 


      // PART TO GET IMAGES - "Can not resolve context" 

      ImageView imageView = (ImageView) findViewById(R.id.url); 
      Picasso.with(context).load(url).into(imageView); 



      // adding HashList to ArrayList 
      mCommentList.add(map); 

      //annndddd, our JSON data is up to date same with our array list 
     } 

EDIT

Когда Я начал создавать приложение, я создал 2 сообщения с прямыми путями файлов изображений, где они хранятся на устройстве, они отображаются правильно: Screenshot

загруженные изображения не отображаются, у них есть URL, как это:

"http://www.eywow.com/webservice/uploads/name.jpg"

+0

Вы используете eclipse? – Azad

+0

Нет, я использую последнюю версию Android Studio. – Hendrik04

+0

Часть Пикассо признана правильной, я думаю, мне просто нужно добавить ее по-другому в мой код. – Hendrik04

1

Существует много способов, но эта библиотека делает вашу работу легко много:

Нажмите на Picasso и читать документацию, это очень просто вам нужно чтобы написать только одну строку кода:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 

Но, пожалуйста, в следующий раз, когда вы зададите вопрос, укажите чистый и короткий код. Удачи.

В вашем случае:

String url = "..."; 
ImageView imageView = (ImageView) findViewById(R.id.url); 
Picasso.with(context).load(url).into(imageView); 

Но убедитесь, что вы загружаете файл JAR и включить его в проект, если этот код не будет работать.

+0

Спасибо за ваш ответ, как я могу добавить это? URL-адреса из базы данных mysql находятся в форме строки с именем «url», идентификатор изображения - «url». Это верно? Picasso.with (контекст) .load (URL) .into (URL); – Hendrik04

+0

Не работает, пожалуйста, проверьте мой ответ. – Hendrik04

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