-3

データベースmySQLから画像を取得してリストビューに表示したい(画像+テキストリストビュー)

私のコード:

       public void cek(){

           String url_select = "http://10.0.2.2/BloodGlucose/selectDoctor.php";

           HttpClient httpClient = new DefaultHttpClient();
           HttpPost httpPost = new HttpPost(url_select);

           //parameter
           ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();

           try {
              //add parameter
               httpPost.setEntity(new UrlEncodedFormEntity(param));

             HttpResponse httpRespose = httpClient.execute(httpPost);
             HttpEntity httpEntity = httpRespose.getEntity();

             //read content
             InputStream in = httpEntity.getContent();
             BufferedReader read = new BufferedReader(new InputStreamReader(in));

             String content = "";
             String line = "";

             while((line = read.readLine())!=null){
                content += line;
             }

             Log.d("ADBUG", "content: "+content);


             //json
             if(!content.equals("null")){




                try {
                   JSONArray jArr = new JSONArray(content);
                   for(int i=0;i<jArr.length();i++){
                      JSONObject jObj = jArr.getJSONObject(i);
                      String id = jObj.getString("_id");
                      String name = jObj.getString("name");
                      String dateofbirth = jObj.getString("dateofbirth");
                      String phone = jObj.getString("telp");
                      String address = jObj.getString("clinicaddress");
                      String file = jObj.getString("file");
                      String uname = jObj.getString("username_doctor");
                      String lulusan = jObj.getString("lulusan");
                      String clinicname = jObj.getString("clinicname");

                      names.add(name);
                      date.add(dateofbirth);
                      telp.add(phone);      
                      clinic.add(address);
                      usernamedoctor.add(uname);
                      namaklinik.add(clinicname);
                      graduate.add(lulusan);



                   }



setListAdapter(new DoctorArrayAdapter(this, names)); 

                } catch (JSONException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
                }

             }else{
                Toast.makeText(this, "Error", Toast.LENGTH_LONG).show();
             }

          } catch (ClientProtocolException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
          } catch (IOException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
          }
       }

DoctorArrayAdapterコード:

package research.android.bloodglucose;


import java.util.ArrayList;

import research.android.bloodglucose.R;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class DoctorArrayAdapter extends ArrayAdapter<String> {
    private final Context context;
    private final ArrayList<String> values;

    public DoctorArrayAdapter(Context context, ArrayList<String> names) {
        super(context, R.layout.list_row, names);
        this.context = context;
        this.values = names;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View rowView = inflater.inflate(R.layout.list_row, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.DoctorName);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.list_image);
        textView.setText(values.get(position));

        // Change icon based on name
        String s = values.get(position);

        System.out.println(s);

        /*if (s.equals("WindowsMobile")) {
            imageView.setImageResource(R.drawable.windowsmobile_logo);
        } else if (s.equals("iOS")) {
            imageView.setImageResource(R.drawable.ios_logo);
        } else if (s.equals("Blackberry")) {
            imageView.setImageResource(R.drawable.blackberry_logo);
        } else {
            imageView.setImageResource(R.drawable.android_logo);
        }*/

        return rowView;
    }
}

私のコードに何か問題がありますか?画像が表示されなかったので、テキストだけです、どうもありがとうございました

4

1 に答える 1

0

ハンディ、から拡張するクラスを作成する必要がありますArrayAdapter。次に、メソッドを実装しgetViewて、各アイテムで何をすべきかをリストに伝えます(画像とテキストを追加します)。

このリンクを確認してくださいAndroidリストビューの例

(カスタム ArrayAdapter の例)

(そして、1つのヒント、エラー部分は、MySQLからデータをフェッチするのではなく、リストビューを構築することから生じるため、誤解を招く質問からこの部分を削除してください)

これは、URL パスを持つ画像を取得する関数です。

public static Bitmap getURLImage(String path)
{

    try
    {
        URL aURL = new URL(path);
        final URLConnection conn = aURL.openConnection();
        conn.connect();
        final BufferedInputStream bis = new BufferedInputStream(
                conn.getInputStream());
        final Bitmap bm = BitmapFactory.decodeStream(bis);
        bis.close();
        return bm;
    }
    catch (Throwable e)
    {   
        Log.w("ERROR", "Error " + e.getMessage());
        return null;
    }
}

それからあなたはそうします(Android 4.0以降、メインスレッドからネットワーク接続を確立することは許可されていないため、スレッドから呼び出す必要があります。これは、に追加する必要がある部分ですgetView):

    new Thread() {
                public void run() {
                    try {
                        //mBitmap is an attirbute
                        mBitmap = getRemoteImage(link);
                        handler.sendEmptyMessage(COMPLETE);

                    } finally {

                    }
                };
            };



/**
in your handler u set the image to the bitmap that you fetched
*/
    private final Handler handler = new Handler(new Callback() {

            public boolean handleMessage(Message msg) {
                   imageView.setImageBitmap(mBitmap);
            }
    }
于 2012-09-10T07:31:12.557 に答える