Android studio项目:从服务器获取时图像不是提货

时间:2016-10-29 12:28:34

标签: java php android json xml

我正在使用此代码从我的服务器下载图像,但由于某种原因我无法显示它们。我告诉你我使用的代码。

主要活动

    MainActivity.java             
    import android.app.ProgressDialog;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.AsyncTask;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.Toast;

    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;

    public class MainActivity extends AppCompatActivity implements                 View.OnClickListener {
        private String imagesJSON;



    private static final String JSON_ARRAY ="result";
        private static final String IMAGE_URL = "url";


    private JSONArray arrayImages= null;
    private int TRACK = 0;
        private static final String IMAGES_URL = "http://imzzycool.biz.ht/PhotoUpload/getAllImages.php";

private Button buttonFetchImages;
private Button buttonMoveNext;
private Button buttonMovePrevious;
private ImageView imageView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imageView = (ImageView) findViewById(R.id.imageView);
    buttonFetchImages = (Button) findViewById(R.id.buttonFetchImages);
    buttonMoveNext = (Button) findViewById(R.id.buttonNext);
    buttonMovePrevious = (Button) findViewById(R.id.buttonPrev);
    buttonFetchImages.setOnClickListener(this);
    buttonMoveNext.setOnClickListener(this);
    buttonMovePrevious.setOnClickListener(this);
}


private void extractJSON(){
    try {
        JSONObject jsonObject = new JSONObject(imagesJSON);
        arrayImages = jsonObject.getJSONArray(JSON_ARRAY);
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

private void showImage(){
    try {
        JSONObject jsonObject = arrayImages.getJSONObject(TRACK);
        getImage(jsonObject.getString(IMAGE_URL));
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

private void moveNext() {
    if (TRACK < arrayImages.length()) {
        TRACK++;
        showImage();
    }
}

private void movePrevious() {
    if (TRACK > 0) {
        TRACK--;
        showImage();
    }
}

private void getAllImages() {
    class GetAllImages extends AsyncTask<String,Void,String> {
        ProgressDialog loading;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(MainActivity.this, "Fetching Data...","Please Wait...",true,true);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            loading.dismiss();
            imagesJSON = s;
            extractJSON();
            showImage();
        }

        @Override
        protected String doInBackground(String... params) {
            String uri = params[0];
            BufferedReader bufferedReader = null;
            try {
                URL url = new URL(uri);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                StringBuilder sb = new StringBuilder();

                bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));

                String json;
                while((json = bufferedReader.readLine())!= null){
                    sb.append(json+"\n");
                }

                return sb.toString().trim();

            }catch(Exception e){
                return null;
            }
        }
    }
    GetAllImages gai = new GetAllImages();
    gai.execute(IMAGES_URL);
}

private void getImage(String urlToImage){
    class GetImage extends AsyncTask<String,Void,Bitmap>{
        ProgressDialog loading;
        @Override
        protected Bitmap doInBackground(String... params) {
            URL url = null;
            Bitmap image = null;

            String urlToImage = params[0];
            try {
                url = new URL(urlToImage);
                image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return image;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(MainActivity.this,"Downloading Image...","Please wait...",true,true);
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            loading.dismiss();
            imageView.setImageBitmap(bitmap);
        }
    }
    GetImage gi = new GetImage();
    gi.execute(urlToImage);
}

@Override
public void onClick(View v) {
    if(v == buttonFetchImages) {
        getAllImages();
    }
    if(v == buttonMoveNext){
        moveNext();
    }
    if(v== buttonMovePrevious){
        movePrevious();
    }
}
}

使用正确的xml文件

activity_main.xml

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Fetch Images"
    android:id="@+id/buttonFetchImages" />

<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:id="@+id/imageView"
    android:src="@mipmap/ic_launcher"/>

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Previous"
        android:layout_weight="1"
        android:id="@+id/buttonPrev" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Next"
        android:layout_weight="1"
        android:id="@+id/buttonNext" />

</LinearLayout>

服务器代码(PHP)

getimage.php

    <?php
    require_once ('dbConnect.php');      

if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    $id = $_GET['id'];
    $sql = "SELECT * FROM photos WHERE id = '$id'";


    $r = mysqli_query($con,$sql);
    $result = mysqli_fetch_array($r);

    header('content-type: image/jpeg');

    echo base64_decode($result['image']);

    mysqli_close($con);
} else {
    echo "Error";
}

获取所有图像 getAllImages.php

require_once('dbConnect.php');

$sql = "SELECT id FROM photos";
$res = mysqli_query($con, $sql);
$result = array();
$url = "http://imzzycool.biz.ht/PhotoUpload/getImage.php?id=";

while ($row = mysqli_fetch_array($res)) {
    array_push($result, array('url' => $url . $row['id']));
}

echo json_encode(array("result"=>$result));

mysqli_close($con);

它只是替换了图像下载但图像不可见

0 个答案:

没有答案