2013-04-17 2 views
0

mysql에서 PHP 으로 이미지를 가져 와서 asyntask <> 을 사용하여 가져 오는 중입니다. $ b64image 값이 내 안드로이드 코드에 포함되어 있습니다. ? 클래스를 가져 오기의 나비트 맵 값을 이미지 뷰로 변환합니다.

<?php 

include("db.php"); 

include("database.php"); 

//header("Content-Type: image/jpeg"); 



$skt=$_REQUEST['clientsocket']; 

$retrieve = SelectSingleRow("screendb"," clientsocket='$skt'",""); 

$val=$retrieve['img']; 

$response["img_val"]=$val; 

$b64image["base64_image"] = base64_encode($val); 

echo json_encode($b64image); 

>

은 다음과 같습니다 를이 오류가 표시되지하지만 이미지를 표시하지 않습니다.
$ b64image 값을 가져 오는 strbase64_image에 있습니다.

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONArray; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.ProgressDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Base64; 
import android.util.Log; 
import android.view.ContextThemeWrapper; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.ImageView; 


public class fetchimg extends Activity { 
    int flag; 
    int empid; 
    String username; 
    String password; 
    ImageView imageView; 
    EditText edUsername,edPassword; 

    private ProgressDialog pDialog; 

    JSONParser jParser = new JSONParser(); 
    JSONArray jarray; 

    ArrayList<HashMap<String, String>> productsList; 

    private static String url_faculty_login = "http://10.0.2.2/image/image_decode.php"; 
    private static final String TAG_EMPLOYEE = "employee_id"; 
    private static final String TAG_PID = "pid"; 
    private static final String TAG_NAME = "name"; 



    @Override 
    public void onCreate(Bundle savedInstanceState) { 


     super.onCreate(savedInstanceState); 
     setContentView(R.layout.showimage); 
    // setTitleColor(1); 
     imageView=(ImageView) findViewById(R.id.imgView); 

     Intent i=new Intent(); 


     edUsername=(EditText) findViewById(R.id.edUserName); 
     edPassword=(EditText) findViewById(R.id.edPassword); 
     String clear="clear"; 
     new LoadAllProducts().execute(); 




    } 



    class LoadAllProducts extends AsyncTask<String, String, String> { 
     private static final String Emp_id = "Emp_id"; 
     Bitmap bitmap; 
     String strbase64_image; 

     public String doInBackground(String... args) { 
      username="port=1892"; 
     // password=edPassword.getText().toString(); 

      List<NameValuePair> params = new ArrayList<NameValuePair>(); 

      params.add(new BasicNameValuePair("clientsocket", username)); 
     // params.add(new BasicNameValuePair("Password", password)); 



      JSONObject json = jParser.makeHttpRequest(url_faculty_login, "GET", params); 
      Log.d("base64image_encoded from php ", json.toString()); 

      strbase64_image=json.toString(); 

      bitmap =Base64ToImage(strbase64_image); 

     return null; 
    } 
     public Bitmap Base64ToImage(String base64String) { 
      byte[] imageAsBytes = Base64.decode(base64String.getBytes(), 
        Base64.DEFAULT); 
      Bitmap mybitmap = BitmapFactory.decodeByteArray(imageAsBytes, 0, 
        imageAsBytes.length); 
      return mybitmap; 
     } 
     @Override 
     protected void onPostExecute(String result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 
      runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        // TODO Auto-generated method stub 
        imageView.setImageBitmap(bitmap); 


       } 
      }); 

     } 

} 



} 
+0

당신은 PHP가 SQL 주입 공격에 책임이있을 수 있습니다. –

+0

onPostExecute의 runOnUiThread는 쓸모가 없습니다. 왜냐하면 onPostExecute가 ui 스레드에 있기 때문입니다. – njzk2

답변

0

귀하의 AsyncTask은 모두 엉망입니다. 따라서 왜 작동하지 않습니다.

doInBackground은 아무 것도 반환하지 않으므로 onPostExecute은 절대 호출되지 않으며 반환 유형이 잘못되었습니다.

대신이 하나를 사용하십시오 : 여기

class LoadAllProducts extends AsyncTask<Void, Void, Bitmap> { 
     private static final String Emp_id = "Emp_id"; 
     Bitmap bitmap; 
     String strbase64_image; 

     protected Bitmap doInBackground(Void... args) { 
      username = "port=1892"; 
      // password=edPassword.getText().toString(); 

      List<NameValuePair> params = new ArrayList<NameValuePair>(); 

      params.add(new BasicNameValuePair("clientsocket", username)); 
      // params.add(new BasicNameValuePair("Password", password)); 

      JSONObject json = jParser.makeHttpRequest(url_faculty_login, "GET", 
        params); 
      Log.d("base64image_encoded from php ", json.toString()); 

      strbase64_image = json.toString(); 

      bitmap = Base64ToImage(strbase64_image); 

      return bitmap; 
     } 

     private Bitmap Base64ToImage(String base64String) { 
      byte[] imageAsBytes = Base64.decode(base64String.getBytes(), 
        Base64.DEFAULT); 
      Bitmap mybitmap = BitmapFactory.decodeByteArray(imageAsBytes, 0, 
        imageAsBytes.length); 
      return mybitmap; 
     } 

     protected void onPostExecute(Bitmap result) { 

      // TODO Auto-generated method stub 
      imageView.setImageBitmap(bitmap); 

     } 
    } 

, 당신의 doInBackground 반환이 Bitmap을 검색 차례에 ImageView 업데이트 onPostExecute에에 전달합니다. postExecute가 이미 UI 스레드에서 실행되므로 runOnUiThread을 사용할 필요가 없습니다.

+0

잘못되었습니다. 질문의 doInBackground는 'null'을 반환합니다. onPostExecute가 호출됩니다. 귀하의 재 형식화가 훨씬 좋지만 문제 분석이 부정확하며 문제가 남아 있습니다. – njzk2

+0

만약 당신이 null을 리턴한다면, onPostExecute가 String을 기다리고있는 동안에는 아무것도 일어나지 않을 것입니다. 내가 코드를 실행하지 않았으므로 그 코드에서 틀릴 수도 있습니다. –

+0

문자열은'String toto = null; 에서처럼 null이 될 수 있습니다. – njzk2

0
strbase64_image=json.toString(); 

는 같아야 json 같은

strbase64_image=json.getString("base64_image"); 

양식에 나타낸 JSONObject 인이 PHP 코드에 연관 배열에 json_encode 의해 생성 될 때

{"base64_image": "AAAAAAA(... some BASE64 content ...)"} 

+0

빠른 응답을 주셔서 감사합니다 ... 작동합니다 – user2289464

관련 문제