我尝试显示来自url的图片,到目前为止,我已经成功了,但当我试图从用户的url加载instagram个人资料图片时,它不起作用。我想知道如何使用instagram API获取用户的图像,并使用毕加索将其加载到图像视图中。
发布于 2020-04-16 02:11:27
实际上,我使用的方法不需要访问令牌,您唯一需要的就是用户名。我会把下面的代码留给你
第1步: MainActivity.java
第一个getHDProfilePicFromUrl
///This function will return to you the url of the user profile picture
private String getHDProfilePicFromUrl(String url) throws ExecutionException, InterruptedException, JSONException {
JSONObject jObject;
String parsingUsername,username;
if(url.contains("?"))
{
parsingUsername = url.substring(0,url.lastIndexOf("?"))+"/";
}
else{
parsingUsername = url;
}
username = getBetweenStrings(parsingUsername,".com/","/");
String profileInfo = new getDataFromUrl(this).execute("https://www.instagram.com/"+username+"/?__a=1").get();
jObject= new JSONObject(profileInfo);
jObject = jObject.getJSONObject("graphql");
jObject = jObject.getJSONObject("user");
String response = jObject.getString("profile_pic_url_hd");
return response; }
第二个getBetweenStrings
private String getBetweenStrings( String text, String textFrom, String textTo) {
String result = "";
result = text.substring( text.indexOf(textFrom) + textFrom.length(), text.length());
result = result.substring(0,result.indexOf(textTo));
return result;
}
私有类getDataFromUrl扩展AsyncTask { Context mContext;public getDataFromUrl(Context mContext) { this.mContext = mContext;} @Override protected void onPreExecute() { super.onPreExecute();} @Override protected String doInBackground(String...arg0) { HttpHandler sh =新的HttpHandler();//请求url并获取响应字符串jsonStr = sh.makeServiceCall(arg0);log.e(标签,“来自url的响应:”+ jsonStr);if (jsonStr != null) { return jsonStr;} else {log.e(标签,“无法从服务器获取json.”);return null;}} @Override protected void onPostExecute(String s) { super.onPostExecute(s);String url = s.replace('|',',').split(",")1;Log.d(TAG,“链接:”+ url);} }
现在你可以获得一个用户个人资料图片网址,作为奖励,我将让你使用该网址的代码,并将图片放入ImageView。
第2步: main_activity.xml
第3步: DownloadImageTask.java
现在,您需要创建一个名为DownloadImageTask的外部类,完整代码必须如下所示:
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;
import java.io.InputStream;
public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
第4步: MainActivity.java
现在,最后一步是添加您的主要活动加载ImageView的代码片段,此代码将位于您的MainActivity.java内的OnCreate中
String url="https://www.instagram.com/juanjshb/";
ImageView = thumbnails = (ImageView)findItemById(R.id.imgProfilePic);
new DownloadImageTask(thumbnails).execute(getHDProfilePicFromUrl(url));
这就是全部,希望它能帮助我使用这个代码2年,希望它能帮上忙。
https://stackoverflow.com/questions/45513592
复制相似问题