Android+json通过id获取图像


Android + json get images by id

我可以选择并显示数据库中的所有图像。现在我正在按id筛选它们。如何按id从数据库中获取图像?

有没有办法将AsyncTask中的字符串"imovel_id"与从数据库中选择的"imovel_id"json响应进行比较?

还是最好通过android应用程序发送的请求获得字符串"imovel_id",然后通过"imovel_id"选择所有图像?

我在下面的代码中尝试过从AsyncTask发送字符串,在php请求中获得它,然后使用带有WHERE子句的查询,但没有成功。我得到一个空值。

public class AsyncHttpTask extends AsyncTask<String, Void, Integer> {
    @Override
    protected Integer doInBackground(String... params) {
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("imovel_id", i_id));
        try {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://meuwebsite.com/panel/json_images.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            inputStream = entity.getContent();
            Log.e("pass 1", "connection success ");
        } catch (Exception e) {
            Log.e("Fail 1", e.toString());
            Toast.makeText(getApplicationContext(), "Invalid IP Address",
                    Toast.LENGTH_LONG).show();
        }
        try {
            BufferedReader reader = new BufferedReader
                    (new InputStreamReader(inputStream, "UTF-8"));
            StringBuilder sb = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                sb.append(line + "'n");
            }
            inputStream.close();
            result = sb.toString();
            Log.e("pass 2", "connection success ");
        } catch (Exception e) {
            Log.e("Fail 2", e.toString());
        }
        try {
            JSONObject json_data = new JSONObject(result);
            i_id = (json_data.getString("imovel_id"));
            Log.e("pass 1", "id do imovel = " + i_id);
        } catch (Exception e) {
            Log.e("Fail 3", e.toString());
        }

        Integer result = 0;
        try {
            // Create Apache HttpClient
            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse httpResponse = httpclient.execute(new HttpGet(params[0]));
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            // 200 represents HTTP OK
            if (statusCode == 200) {
                String response = streamToString(httpResponse.getEntity().getContent());
                parseResult(response);
                result = 1; // Successful
            } else {
                result = 0; //"Failed
            }
        } catch (Exception e) {
            Log.d(TAG, e.getLocalizedMessage());
        }
        return result;
    }
    @Override
    protected void onPostExecute(Integer result) {
        // Download complete. Lets update UI
        if (result == 1) {
            mGridAdapter.setGridData(mGridData);
        } else {
            Toast.makeText(GridViewActivity.this, "Failed to fetch data!", Toast.LENGTH_SHORT).show();
        }
        //Hide progressbar
        mProgressBar.setVisibility(View.GONE);
    }
}

String streamToString(InputStream stream) throws IOException {
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));
    String line;
    String result = "";
    while ((line = bufferedReader.readLine()) != null) {
        result += line;
    }
    // Close stream
    if (null != stream) {
        stream.close();
    }
    return result;
}
/**
 * Parsing the feed results and get the list
 *
 * @param result
 */
private void parseResult(String result) {
    try {
        JSONObject response = new JSONObject(result);
        JSONArray posts = response.optJSONArray("posts");
        GridItem item;
        for (int i = 0; i < posts.length(); i++) {
            JSONObject post = posts.optJSONObject(i);
            item = new GridItem();
            item.setImage(post.getString("images"));
            mGridData.add(item);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

php脚本

include_once 'db_connect.php';
$i_id = $_REQUEST["imovel_id"];
$sql = "SELECT * FROM iMoveis WHERE imovel_id='$i_id'";
$result = mysqli_query($mysqli, $sql);
$response = array();
$images = array();

while($row = mysqli_fetch_assoc($result)){
 $images[] = array('images' => $row['img1']);
 $images[] = array('images' => $row['img2']);
 $images[] = array('images' => $row['img3']);
 $images[] = array('images' => $row['img4']);
 $images[] = array('images' => $row['img5']);
}
$response['posts'] = $images;
echo json_encode($response, JSON_UNESCAPED_SLASHES);

在json数组中添加id,然后在parseResult方法中将其与textview中的字符串"imovel_id"进行比较,这可能是一个解决方案吗?

我认为通过nameValuePairs发送字符串会很容易,就像我已经做过的那样,并在查询中使用WHERE进行过滤,但这似乎不太容易。

提前谢谢。

我在AsyncTask 中做了一些更改

public class AsyncHttpTask extends AsyncTask<String, Void, Integer> {
    @Override
    protected Integer doInBackground(String... params) {
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("imovel_id", i_id));

        Integer result = 0;
        try {
            // Create Apache HttpClient
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://meuwebsite.com/panel/json_images.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse httpResponse = httpclient.execute(httppost);
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            // 200 represents HTTP OK
            if (statusCode == 200) {
                String response = streamToString(httpResponse.getEntity().getContent());
                parseResult(response);
                result = 1; // Successful
            } else {
                result = 0; //"Failed
            }
        } catch (Exception e) {
            Log.d(TAG, e.getLocalizedMessage());
        }
        return result;
    }
    @Override
    protected void onPostExecute(Integer result) {
        // Download complete. Lets update UI
        if (result == 1) {
            mGridAdapter.setGridData(mGridData);
        } else {
            Toast.makeText(GridViewActivity.this, "Failed to fetch data!", Toast.LENGTH_SHORT).show();
        }
        //Hide progressbar
        mProgressBar.setVisibility(View.GONE);
    }
}

String streamToString(InputStream stream) throws IOException {
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));
    String line;
    String result = "";
    while ((line = bufferedReader.readLine()) != null) {
        result += line;
    }
    // Close stream
    if (null != stream) {
        stream.close();
    }
    return result;
}
/**
 * Parsing the feed results and get the list
 *
 * @param result
 */
private void parseResult(String result) {
    try {
        JSONObject response = new JSONObject(result);
        JSONArray posts = response.optJSONArray("posts");
        GridItem item;
        for (int i = 0; i < posts.length(); i++) {
            JSONObject post = posts.optJSONObject(i);
            item = new GridItem();
            item.setImage(post.getString("images"));
            mGridData.add(item);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

还将$i_id = $_REQUEST["imovel_id"];更改为$i_id = $_POST["imovel_id"];