dongzaijiao4863 2015-11-04 01:19
浏览 128
已采纳

Android + json通过id获取图像

I can select and show all the images from the db. Now I am tring to filter them by id. How do I get images from db by id?

Is there a way to compare the string "imovel_id" inside the AsyncTask with the "imovel_id" json response selected from the db?

Or is it better to get the string "imovel_id" via request sent from the android app and then select all the images by "imovel_id"?

I tried that on the below code sending the string from the AsyncTask, getting it on php request and then using the query with WHERE clausule but I had no success. I get a null value.

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 + "
");
            }
            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 script

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);

Adding the id inside the json array and then comparing it inside the parseResult method with the string "imovel_id" from the textview could be a solution?

I thought it would be easy sending the string by nameValuePairs as I have already done and use a WHERE in the query to filter but it seems that´s not working so easily.

Thanks in advance.

  • 写回答

1条回答 默认 最新

  • douwen9534 2015-11-05 01:04
    关注

    I made some changes in my 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();
        }
    }
    

    Also changed $i_id = $_REQUEST["imovel_id"]; to $i_id = $_POST["imovel_id"];

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程