【问题标题】:image loading using url in android在android中使用url加载图像
【发布时间】:2016-01-05 10:06:07
【问题描述】:

我正在尝试使用 url 加载图像。单个 url 工作正常。但我需要向此页面添加更多图像。我需要将此图像添加到列表视图中。请告诉我如何将字符串数组添加到此代码中。

import java.io.IOException;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class FareCrd extends Activity {



    String image_url="http://movito.nervov.com/img/ace-hd.png";
    String[] mString ={"http://movito.nervov.com/img/ace-hd.png",
            "http://movito.nervov.com/img/Movito_Logo_M.png"};

JSONArray jsonary;

    ListView list;
    private Activity activity;
    private String[] data;
    private static View inflater=null;
    //private String[] mStrings={"http://movito.nervov.com/img/ace-hd.png"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fare_crd);
        list=(ListView)findViewById(R.id.farelist);



        new ServConn().execute(); 



    }


private void parsedata(String data){
    //System.out.println(data);

        try {
            JSONObject json = new JSONObject(data);

            jsonary = json.getJSONArray("data");


            ListView list = (ListView) findViewById(R.id.farelist);

            list.setAdapter(new DriverOrderList(getApplicationContext(),
                    R.layout.farecrd, new JSONObject[jsonary.length()]));



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


    }

private class DriverOrderList extends ArrayAdapter<JSONObject> {

    int listViewResource;


    public DriverOrderList(Context context, int resource, JSONObject[] s) {
        super(context, resource, s);
        listViewResource = resource;


    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View row = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(listViewResource, parent, false);
        ImageLoader imgLoader = new ImageLoader(getApplicationContext());   
        JSONObject rowdata = new JSONObject();
        int loader = R.drawable.stub;


        try {


            rowdata = jsonary.getJSONObject(position);
            System.out.println(rowdata);

             ImageLoader imgLoader1 = new ImageLoader(getApplicationContext());
        ImageView img=(ImageView) row.findViewById(R.id.imgid);



        imgLoader.DisplayImage(image_url, loader, img);


        TextView nameTxt = (TextView) row.findViewById(R.id.truckname);         
        TextView idTxt = (TextView) row.findViewById(R.id.id);



        TextView minrttv =(TextView) row.findViewById(R.id.minimumRate);
        TextView kmrttxt =(TextView) row.findViewById(R.id.kilometerRate);
        TextView mindurtv=(TextView) row.findViewById(R.id.minimumDuration);
        TextView freewatintim = (TextView) row.findViewById(R.id.freeWaitingTime);
        TextView minuterttxt =(TextView) row.findViewById(R.id.minuteRate);
        TextView watingchrttv =(TextView)row.findViewById(R.id.waitingCharge);

        double freewt=(Double) rowdata.get("freeWaitingTime");
        double kmratetxt=(Double) rowdata.get("kilometerRate");
        double mindurtxt=(Double) rowdata.get("minimumDuration");
        double mindur= mindurtxt/60;
        double minkmrttxt=(Double) rowdata.get("minimumKilometer");     
        double minrttxt=(Double) rowdata.get("minimumRate");
        double mintrate=(Double) rowdata.get("minuteRate");
        double minutrat=mintrate/60;
        double watingchrtxt=(Double) rowdata.get("waitingCharge");
        double waitchgunittxt=(Double) rowdata.get("waitingChargeUnit");



            nameTxt.setText(rowdata.getString("truckModel"));
            minrttv.setText("Rs."+minrttxt+" /-");
            kmrttxt.setText("Rs."+kmratetxt+"/km after "+minkmrttxt+"km");
            mindurtv.setText("first"+mindur+"hr and "+minkmrttxt+"km");
            //minuterttxt.setText(minutrat+"/-");
            freewatintim.setText("first "+freewt+"min free");
            watingchrttv.setText("RS"+watingchrtxt+"after every "+waitchgunittxt+"min");

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



         return row;
    }

}



private class ServConn extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub

        System.out.println("do in backgrnd");
        HttpClient httpclient = new DefaultHttpClient();
        HttpGet httpget = new HttpGet("http://movito.nervov.com/v1/trucks/miniTruckCategories");

        httpget.setHeader(HTTP.CONTENT_TYPE, "application/json");
        String replyString = "";

        try {

            HttpResponse response = httpclient.execute(httpget);
            replyString = EntityUtils.toString(response
                    .getEntity());



        } catch (ClientProtocolException e) {

        System.out.println("ex: " + e);
        } catch (IOException e) {

        System.out.println("e: " + e);
        }


    return replyString;

}

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);

        System.out.println(result);
        result = "{\"data\":"+result+"}";


        parsedata(result);

    }
     @Override
        protected void onPreExecute() {}

        @Override
        protected void onProgressUpdate(Void... values) {}
}



}

【问题讨论】:

标签: android android-layout url android-imageview


【解决方案1】:

尝试使用 Glide 库而不是 od picasso 。它可能对您有帮助。请查看以下链接,这可能会帮助您。 http://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en

【讨论】:

    【解决方案2】:

    试试这个代码 我正在使用 Picasso 库来填充ImageView

    如果您使用的是 android studio,请使用以下代码将此库添加到您的 gradle 文件中

    compile 'com.squareup.picasso:picasso:2.5.2'
    

    使用以下代码,

    这是如何制作自定义 ListView 的完整示例,我没有包含您必须从 WebService 获取 JSON 数据的代码,因为我不想这样做让代码复杂一些,我会单独写一段代码,我会展示如何读取你感兴趣的数据。

    XML

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
    
        <ListView
            android:id="@+id/CustomListViewActivity_listView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
    

    single_item.xml 布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">
    
        <TextView
            android:id="@+id/single_item_textView"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="4dp"
            android:layout_weight="0.5"
            android:text="New Text" />
    
        <ImageView
            android:id="@+id/single_item_imageView"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_margin="4dp"
            android:layout_weight="0.5" />
    </LinearLayout>
    

    代码

    public class CustomListViewActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_custom_list_view);
    
    
            ArrayList<SingleItem> singleItems = new ArrayList<>();
            singleItems.add(new SingleItem("http://movito.nervov.com/img/ace-hd.png","first Text"));
            singleItems.add(new SingleItem("http://movito.nervov.com/img/Movito_Logo_M.png","Second Text"));
            singleItems.add(new SingleItem("http://movito.nervov.com/img/ace-hd.png","third Text"));
            singleItems.add(new SingleItem("http://movito.nervov.com/img/Movito_Logo_M.png","fourth Text"));
    
            ListView listView = (ListView)findViewById(R.id.CustomListViewActivity_listView);
            MyAdapter adapter = new MyAdapter(getApplicationContext(), R.layout.single_item,singleItems);
            listView.setAdapter(adapter);
    
    
        }
    
        private class MyAdapter extends ArrayAdapter {
    
            private ArrayList<SingleItem> singleItems;
            private LayoutInflater layoutInflater;
            private Context context;
            private View single_View;
    
            public MyAdapter(Context context, int resource, ArrayList<SingleItem> singleItems) {
                super(context, resource, singleItems);
                this.context = context;
                this.singleItems = singleItems;
                layoutInflater = LayoutInflater.from(this.context);
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View row = convertView;
                ViewHolder holder = null;
    
                if (row == null) {
                    row = layoutInflater.inflate(R.layout.single_item, parent, false);
    
                    holder = new ViewHolder();
                    holder.textView = (TextView) row.findViewById(R.id.single_item_textView);
                    holder.imageView = (ImageView) row.findViewById(R.id.single_item_imageView);
                    row.setTag(holder);
                } else {
                    holder = (ViewHolder) row.getTag();
                }
    
                final SingleItem singleItem = singleItems.get(position);
                holder.textView.setText("" + singleItem.getText());
                Picasso.with(context).load(""+singleItem.getUrl()).into(holder.imageView);
    
                return row;
            }
    
            private class ViewHolder {
                // Instance Variable (state or data)
                TextView textView;
                ImageView imageView;
            }
        }
    
        public class SingleItem {
    
            private String url;
    
            private String text;
    
            public SingleItem() {
            }
    
            public SingleItem(String url, String text) {
                this.url = url;
                this.text = text;
            }
    
            public String getUrl() {
                return url;
            }
    
            public void setUrl(String url) {
                this.url = url;
            }
    
            public String getText() {
                return text;
            }
    
            public void setText(String text) {
                this.text = text;
            }
        }
    }
    

    输出

    正如您将看到的那样,从提供给适当ImageView 的 URL 加载图像由 Picasso 负责,请确保在AndroidManifest.xml 中添加互联网权限

    <uses-permission android:name="android.permission.INTERNET" />
    

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 2020-03-31
      相关资源
      最近更新 更多