从URL显示图像到ImageView?

时间:2015-03-23 10:50:57

标签: android imageview

我想显示来自网址的图片,这些网址是从mysql数据库中收到的,还有其他信息,如用户名,帖子标题和消息。我已经设法做到这一点,从数据库收到网址并在帖子中显示为文本。

现在我将类型从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();
    }
}
}

2 个答案:

答案 0 :(得分: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文件并将其包含在项目中,除非此代码不起作用。

答案 1 :(得分: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
        }

修改

当我开始构建应用程序时,我创建了2个帖子,其中包含图像的直接文件路径,它们存储在设备中,显示正确: Screenshot

上传的图片没有显示,他们有这样的网址:

&#34; http://www.eywow.com/webservice/uploads/name.jpg&#34;