gpt4 book ai didi

java - Android - 使用 Picasso 从 JSON 获取图像

转载 作者:行者123 更新时间:2023-12-01 07:19:23 25 4
gpt4 key购买 nike

我正在学习如何使用 JSON 在 Android Studio 中创建新闻应用程序,到目前为止,除了获取图像之外,该应用程序都可以正常工作。我的代码有问题吗?有人可以帮助我吗?

我已经在我的 list 中使用了这些:

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

我也在我的 gradle 中使用了这个

compile 'com.squareup.picasso:picasso:2.5.2'

这是我的java

Detail.java

import...

public class Detail extends Activity{

public ImageLoader imageLoader;{
imageLoader = new ImageLoader(null);
}

JSONArray string_json = null;
String idkbj;
private ProgressDialog progressDialog;

JSONParser jsonParser = new JSONParser();
public static final String TAG_ID = "id";
public static final String TAG_CAT = "category";
public static final String TAG_TITLE = "title";
public static final String TAG_AUTHOR = "author";
public static final String TAG_DATE = "date";
public static final String TAG_CON = "content";
public static final String TAG_IMG = "featured_image";
public static final String TAG_DATE_CRE = "date_created";

private static final String url_kbj = "https://api.url_api_here";

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.single_list_item);

Intent i = getIntent();
idkbj = i.getStringExtra(TAG_ID);
Toast.makeText(getApplicationContext(), "id berita = " + idkbj, Toast.LENGTH_SHORT).show();
new GetDetail().execute();
}

class GetDetail extends AsyncTask<String,String, String>{
@Override
protected void onPreExecute(){
super.onPreExecute();
progressDialog = new ProgressDialog(Detail.this);
progressDialog.setMessage("loading...");
progressDialog.setIndeterminate(false);
progressDialog.setCancelable(true);
progressDialog.show();

}

protected String doInBackground(String... params){
try{
List<NameValuePair> params1 = new ArrayList<>();
params1.add(new BasicNameValuePair("id", idkbj));
final JSONObject json = jsonParser.makeHttpRequest(url_kbj + "/" + idkbj + "/", "GET", params1);
//Log.i("jsonda =", String.valueOf(json));
final JSONObject data = json.getJSONObject("data");
//Log.e("json2 =", String.valueOf(data));
runOnUiThread(new Runnable() {
@Override
public void run() {
ImageView thumb_img = (ImageView) findViewById(R.id.featured_image);
TextView title = (TextView) findViewById(R.id.title);
//TextView id = (TextView) findViewById(R.id.id);
TextView category = (TextView) findViewById(R.id.category);
TextView author = (TextView) findViewById(R.id.author);
TextView date = (TextView) findViewById(R.id.date);
TextView content = (TextView) findViewById(R.id.content);

try{

String cat_d = data.getString(TAG_CAT);
String tit_d = data.getString(TAG_TITLE);
String aut_d = data.getString(TAG_AUTHOR);
String con_d = data.getString(TAG_CON);
String url_detail_img = data.getString(TAG_IMG);

JSONObject date_cre = data.getJSONObject(TAG_DATE_CRE);
String date_d = date_cre.getString(TAG_DATE);

category.setText(cat_d);
title.setText(tit_d);
author.setText(aut_d);
content.setText(con_d);
date.setText(date_d);

Picasso.with(getApplicationContext())
.load(url_detail_img)
.error(R.drawable.temp_img)
.into(thumb_img);

Log.d("detail image = ", url_detail_img);
}
catch (JSONException e){
e.printStackTrace();
}
catch (Exception e){
e.printStackTrace();
}
}
});
}
catch (JSONException e){
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url){
progressDialog.dismiss();
}

}

}

我想要获取的 onClickItem 中的 JSON 对象示例:

{
"data":
{
"id": 3255,
"permalink": "http://kawaiibeautyjapan.com/article/3255/5-tips-diet-mudah-yang-bisa-kamu-lakukan-bersama-pasanganmu",
"slug": "5-tips-diet-mudah-yang-bisa-kamu-lakukan-bersama-pasanganmu",
"title": "5 Tips Diet Mudah yang Bisa Kamu Lakukan Bersama Pasanganmu",
"featured_image": "http://kawaiibeautyjapan.com/upload/article/pc/article_3255.jpg"}

}

当我尝试调试它时,它总是这样结束

enter image description here

编辑

我大概找到了问题所在。

在“featured_image”对象中,URL 使用 HTTP。

但是当我尝试点击它时,它变成了 HTTPS

有什么办法可以改变这个吗?

最佳答案

import...

public class Detail extends Activity{

public ImageLoader imageLoader;{
imageLoader = new ImageLoader(null);
}

JSONArray string_json = null;
String idkbj;
private ProgressDialog progressDialog;

JSONParser jsonParser = new JSONParser();
public static final String TAG_ID = "id";
public static final String TAG_CAT = "category";
public static final String TAG_TITLE = "title";
public static final String TAG_AUTHOR = "author";
public static final String TAG_DATE = "date";
public static final String TAG_CON = "content";
public static final String TAG_IMG = "featured_image";
public static final String TAG_DATE_CRE = "date_created";

private static final String url_kbj = "https://api.url_api_here";

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.single_list_item);

Intent i = getIntent();
idkbj = i.getStringExtra(TAG_ID);
Toast.makeText(getApplicationContext(), "id berita = " + idkbj, Toast.LENGTH_SHORT).show();
new GetDetail().execute();
}

class GetDetail extends AsyncTask<String,String, String>{
@Override
protected void onPreExecute(){
super.onPreExecute();
progressDialog = new ProgressDialog(Detail.this);
progressDialog.setMessage("loading...");
progressDialog.setIndeterminate(false);
progressDialog.setCancelable(true);
progressDialog.show();

}

protected String doInBackground(String... params){
try{
List<NameValuePair> params1 = new ArrayList<>();
params1.add(new BasicNameValuePair("id", idkbj));
final JSONObject json = jsonParser.makeHttpRequest(url_kbj + "/" + idkbj + "/", "GET", params1);
//Log.i("jsonda =", String.valueOf(json));
final JSONArray data = json.getJSONArray("data");
final JSONObject object = data.getJSONObject(0);
//Log.e("json2 =", String.valueOf(data));
runOnUiThread(new Runnable() {
@Override
public void run() {
ImageView thumb_img = (ImageView) findViewById(R.id.featured_image);
TextView title = (TextView) findViewById(R.id.title);
//TextView id = (TextView) findViewById(R.id.id);
TextView category = (TextView) findViewById(R.id.category);
TextView author = (TextView) findViewById(R.id.author);
TextView date = (TextView) findViewById(R.id.date);
TextView content = (TextView) findViewById(R.id.content);

try{

String cat_d = object.getString(TAG_CAT);
String tit_d = object.getString(TAG_TITLE);
String aut_d = object.getString(TAG_AUTHOR);
String con_d = object.getString(TAG_CON);
String url_detail_img = object.getString(TAG_IMG);

JSONObject date_cre = object.getJSONObject(TAG_DATE_CRE);
String date_d = date_cre.getString(TAG_DATE);

category.setText(cat_d);
title.setText(tit_d);
author.setText(aut_d);
content.setText(con_d);
date.setText(date_d);

Picasso.with(getApplicationContext())
.load(url_detail_img)
.error(R.drawable.temp_img)
.into(thumb_img);

Log.d("detail image = ", url_detail_img);
}
catch (JSONException e){
e.printStackTrace();
}
catch (Exception e){
e.printStackTrace();
}
}
});
}
catch (JSONException e){
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url){
progressDialog.dismiss();
}

}
}

关于java - Android - 使用 Picasso 从 JSON 获取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45320492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com