Android 从JSON加载毕加索中的图像

Android 从JSON加载毕加索中的图像,android,json,string,crud,picasso,Android,Json,String,Crud,Picasso,我想从MySQL数据库中存储的url加载毕加索中的图像。 但是返回的代码是JSON,我无法让它工作 当放置直接链接而不是TAG_图像时,它显示的图像没有任何问题(因此毕加索自己正在处理字符串) 如何将JSON解析为字符串,以便毕加索可以加载它 编辑 TAG_图像需要转换为字符串(由Punit回答) 代码: import ... public class ViewRecipeActivity extends Activity { TextView txtName; TextView txtTi

我想从MySQL数据库中存储的url加载毕加索中的图像。
但是返回的代码是JSON,我无法让它工作

当放置直接链接而不是TAG_图像时,它显示的图像没有任何问题(因此毕加索自己正在处理字符串)

如何将JSON解析为字符串,以便毕加索可以加载它

编辑 TAG_图像需要转换为字符串(由Punit回答)

代码:

import ...

public class ViewRecipeActivity extends Activity {

TextView txtName;
TextView txtTime;
TextView txtPrice;
TextView txtDesc;
ImageView imagePhoto;
TextView txtCreatedAt;

String pid;

// Progress Dialog
private ProgressDialog pDialog;

// JSON parser class
JSONParser jsonParser = new JSONParser();

// single product url
private static final String url_recipe_details = "phpfiletoloadall.php";

// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_RECIPE = "recipes";
private static final String TAG_PID = "pid";
private static final String TAG_NAME = "name";
private static final String TAG_TIME = "time";
private static final String TAG_PRICE = "price";
private static final String TAG_IMAGE = "image";
private static final String TAG_DESCRIPTION = "description";

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

    //toolbar back button
    ImageView btnBack = findViewById( R.id.btnBack );
    btnBack.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick (View view) {
            startActivity(new Intent(ViewRecipeActivity.this, ActivityTwo.class));
            finish();
            }
            }
    );


    BottomNavigationView bottomNavigationView = (BottomNavigationView)      findViewById(R.id.bottomNavView_Bar);
    BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
    Menu menu = bottomNavigationView.getMenu();
    MenuItem menuItem = menu.getItem(2);
    menuItem.setChecked(true);

    bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()){
                case R.id.ic_home:
                    Intent intent0 = new Intent(ViewRecipeActivity.this, MainActivity.class);
                    startActivity(intent0);
                    finish();
                    break;

                case R.id.ic_ingredients:
                    Intent intent1 = new Intent(ViewRecipeActivity.this, ActivityOne.class);
                    startActivity(intent1);
                    finish();
                    break;

                case R.id.ic_dining:

                    break;

                case R.id.ic_center_focus:
                    Intent intent3 = new Intent(ViewRecipeActivity.this, ActivityThree.class);
                    startActivity(intent3);
                    finish();
                    break;

                case R.id.ic_backup:
                    Intent intent4 = new Intent(ViewRecipeActivity.this, ActivityFour.class);
                    startActivity(intent4);
                    finish();
                    break;
            }


            return false;
        }
    });

    //Make network connect access (temp)
    StrictMode.ThreadPolicy policy = new
            StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    // Make textview scrollable
    TextView textView = (TextView) findViewById(R.id.inputDesc);
    textView.setMovementMethod(new ScrollingMovementMethod());

    // getting product details from intent
    Intent i = getIntent();

    // getting product id (pid) from intent
    pid = i.getStringExtra(TAG_PID);

    // Getting complete product details in background thread
    new GetProductDetails().execute();

    }
    /**
 * Background Async Task to Get complete product details
 * */
class GetProductDetails extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(ViewRecipeActivity.this);
        pDialog.setMessage("Loading recipe details. Please wait...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    /**
     * Getting product details in background thread
     * */
    protected String doInBackground(String... params) {


        // updating UI from Background Thread
        runOnUiThread(new Runnable() {
            public void run() {
                // Check for success tag
                int success;
                try {

                    // Building Parameters
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(new BasicNameValuePair("pid", pid));

                    // getting product details by making HTTP request
                    // Note that product details url will use GET request
                    JSONObject json = jsonParser.makeHttpRequest(
                            url_recipe_details, "GET", params);


                    // check your log for json response
                    Log.d("Single Recipe Details", json.toString());

                    // json success tag
                    success = json.getInt(TAG_SUCCESS);
                    if (success == 1) {
                        // successfully received product details
                        JSONArray productObj = json
                                .getJSONArray(TAG_RECIPE); // JSON Array

                        // get first product object from JSON Array
                        JSONObject product = productObj.getJSONObject(0);

                        // product with this pid found
                        // Edit Text
                        txtName = (TextView) findViewById(R.id.inputName);
                        txtDesc = (TextView) findViewById(R.id.inputDesc);
                        imagePhoto = (ImageView) findViewById( R.id.imagePhoto );

                        // display product data in EditText
                        txtName.setText(product.getString(TAG_NAME));
                        txtDesc.setText(product.getString(TAG_DESCRIPTION));
                        Picasso.get().load(TAG_IMAGE).into(imagePhoto);

                        Log.d("good", "shows recipe");
                    }else{
                        // product with pid not found
                        Log.d("bad", "recipe not found");
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

        return null;

    }

    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog once got all details
        pDialog.dismiss();
    }
}
}
导入。。。
公共类ViewRecipeActivity扩展了活动{
TextView-txtName;
TextView txtTime;
TextView txtPrice;
TextView-txtDesc;
图像视图图像照片;
TextView txtCreatedAt;
串pid;
//进度对话框
私人对话;
//JSON解析器类
JSONParser JSONParser=新的JSONParser();
//单一产品url
私有静态最终字符串url\u recipe\u details=“phpfiletoloadall.php”;
//JSON节点名称
私有静态最终字符串标记_SUCCESS=“SUCCESS”;
私有静态最终字符串标记_RECIPE=“recipes”;
私有静态最终字符串标记_PID=“PID”;
私有静态最终字符串标记_NAME=“NAME”;
私有静态最终字符串标记\u TIME=“TIME”;
私有静态最终字符串标记_PRICE=“PRICE”;
私有静态最终字符串TAG_IMAGE=“IMAGE”;
私有静态最终字符串标记_DESCRIPTION=“DESCRIPTION”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.view\u配方);
//工具栏后退按钮
ImageView btnBack=findViewById(R.id.btnBack);
btnBack.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
startActivity(新意图(ViewRecipeActivity.this、ActivityTwo.class));
完成();
}
}
);
BottomNavigationView BottomNavigationView=(BottomNavigationView)findViewById(R.id.BottomNavigationView_栏);
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
Menu Menu=bottomNavigationView.getMenu();
MenuItem MenuItem=menu.getItem(2);
menuItem.setChecked(true);
bottomNavigationView.setOnNavigationItemSelectedListener(新的bottomNavigationView.OnNavigationItemSelectedListener(){
@凌驾
公共布尔值onNavigationItemSelected(@NonNull MenuItem item){
开关(item.getItemId()){
案例R.id.ic_主页:
Intent intent0=新的Intent(ViewRecipeActivity.this,MainActivity.class);
起始触觉(intent0);
完成();
打破
案例R.id.ic_成分:
Intent intent1=新的Intent(viewcrecipeActivity.this、ActivityOne.class);
星触觉(intent1);
完成();
打破
案例R.id.ic_餐厅:
打破
案例R.id.ic\U中心\U焦点:
Intent intent3=新的Intent(viewcrecipeActivity.this、ActivityThree.class);
起始触觉(intent3);
完成();
打破
案例R.id.ic\U备份:
意向意向4=新意向(ViewRecipeActivity.this、ActivityFour.class);
起始触觉(强度4);
完成();
打破
}
返回false;
}
});
//进行网络连接访问(临时)
StrictMode.ThreadPolicy策略=新建
StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(策略);
//使文本视图可滚动
TextView TextView=(TextView)findViewById(R.id.inputDesc);
setMovementMethod(新的ScrollingMovementMethod());
//从intent获取产品详细信息
Intent i=getIntent();
//从intent获取产品id(pid)
pid=i.getStringExtra(标签\ pid);
//在后台线程中获取完整的产品详细信息
新建GetProductDetails().execute();
}
/**
*获取完整产品详细信息的后台异步任务
* */
类GetProductDetails扩展了AsyncTask{
/**
*在启动后台线程显示进度对话框之前
* */
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=新建进度对话框(viewcrecipeActivity.this);
setMessage(“正在加载配方详细信息。请稍候…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
}
/**
*在后台线程中获取产品详细信息
* */
受保护的字符串doInBackground(字符串…参数){
//从后台线程更新UI
runOnUiThread(新的Runnable(){
公开募捐{
//检查成功标签
成功;
试一试{
//建筑参数
List params=new ArrayList();
参数添加(新的BasicNameValuePair(“pid”,pid));
//通过发出HTTP请求获取产品详细信息
//请注意,产品详细信息url将使用GET请求
JSONObject json=jsonParser.makeHttpRequest(
url_配方_详细信息,“获取”,参数);
//检查日志中的json响应
Log.d(“单一配方详细信息”,json.toString());
//json成功标记
success=json.getInt(TAG_success);
如果(成功==1){
//已成功接收产品详细信息
JSONArray productObj=json
.getJSONArray(TAG_RECIPE);//JSON数组
//从JSON数组中获取第一个产品对象
JSONObject product=productObj.getJSONObject(0);
//找到具有此pid的产品
String imageUrl = product.getString(TAG_IMAGE);
Picasso.get().load(imageUrl).into(imagePhoto);
 if (success == 1) {
                    // successfully received product details
                    JSONArray productObj = json
                            .getJSONArray(TAG_RECIPE); // JSON Array

                    // get first product object from JSON Array
                    JSONObject product = productObj.getJSONObject(0);

                    // product with this pid found
                    // Edit Text
                    txtName = (TextView) findViewById(R.id.inputName);
                    txtDesc = (TextView) findViewById(R.id.inputDesc);
                    imagePhoto = (ImageView) findViewById( R.id.imagePhoto );

                    // display product data in EditText
                    txtName.setText(product.getString(TAG_NAME));
                    txtDesc.setText(product.getString(TAG_DESCRIPTION));
                    Picasso.get().load(product.getString(TAG_IMAGE)).into(imagePhoto);

                    Log.d("good", "shows recipe");
                }
 Picasso.with(this)
 .load(TAG_IMAGE)
 .error(R.mipmap.no_image_available)
 .into(imagePhoto);
   Picasso.with(this)
   .load(TAG_IMAGE)
   .into(imagePhoto);