2016-04-23 90 views
-1

我想使用picasso庫構建一個在gridview中顯示圖像的應用程序。這是我的代碼。圖像沒有加載。在畢加索日誌中,請求後始終會加載錯誤。你能幫幫我嗎?請謝謝使用Picasso在GridView中顯示圖像

UPDATE

CustomGridViewAdapter.Java

import android.app.Activity; 
import android.content.ClipData; 
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; 

import com.squareup.picasso.Picasso; 

import java.util.ArrayList; 

/** 
* Created by Nicky-PC on 4/9/2016. 
*/ 
public class CustomGridViewAdapter extends ArrayAdapter<gridItem> { 
    Context context; 
    int layoutResourceId; 
    ArrayList<gridItem> data = new ArrayList<gridItem>(); 

    public CustomGridViewAdapter(Context context, int layoutResourceId, 
           ArrayList<gridItem> data) { 
     super(context, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.data = data; 
    } 

    public void setGridData(ArrayList<gridItem> mGridData) 
    { 
     this.data=mGridData; 
     notifyDataSetChanged(); 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     RecordHolder holder; 

     if (row == null) { 
      LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 
      holder = new RecordHolder(); 
      holder.txtTitle = (TextView) row.findViewById(R.id.tvItem); 
      holder.imageItem = (ImageView) row.findViewById(R.id.imageView); 
      row.setTag(holder); 
     } else { 
      holder = (RecordHolder) row.getTag(); 
     } 
     gridItem item = data.get(position); 
     holder.txtTitle.setText(item.getBarang()); 
     Picasso.with(context). 
       load(item.getImageUrl()). 
       into(holder.imageItem); 
     return row; 
    } 

    static class RecordHolder { 
     TextView txtTitle; 
     ImageView imageItem; 
    } 
} 

MainActivity.Java

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

import android.app.Activity; 
import android.media.Image; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.util.Log; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.Toast; 

import com.squareup.picasso.Picasso; 

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

public class MainActivity extends ActionBarActivity { 
    JSONParser jParser= new JSONParser(); 
    ArrayList<HashMap<String, String>> nameList; 
    JSONArray names=null; 
    GridView data; 
    private static final String URL_TEST_BARANG= "http://lomapod.azurewebsites.net/readBarang.php"; 
    private static final String TAG_PESAN = "message"; 
    private static final String TAG_HASIL = "result"; 
    private static final String TAG_BARANG = "nama_barang"; 
    private static final String TAG_IMAGE= "image_name"; 
    ImageView imageview; 
    CustomGridViewAdapter mGridAdapter; 
    ArrayList<gridItem> mGridData; 
    public MainActivity() 
    {} 

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


     data=(GridView) findViewById(R.id.lvSeller); 
     nameList= new ArrayList<HashMap<String, String>>(); 
     imageview =(ImageView) findViewById(R.id.imageView); 
     mGridData=new ArrayList<>(); 
     mGridAdapter=new CustomGridViewAdapter(this,R.layout.grid_item,mGridData); 


     new AmbilDataJson("1").execute(); 
    } 


    public class AmbilDataJson extends AsyncTask<String,String,String> { 

     String id; 
     int sukses=0; 

     public AmbilDataJson(String id) { 
      this.id=id; 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected String doInBackground(String... args) { 

      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("id_penjual",id)); 
      try 
      { 

       JSONObject json = jParser.makeHttpRequest(URL_TEST_BARANG, "GET", params); 
       gridItem item=null; 
       if(json != null) 
       { 
        sukses = json.getInt(TAG_PESAN); 
        if(sukses == 0) 
        { 
         nameList = new ArrayList<HashMap<String,String>>(); 
         Log.d("Semua Nama: ", json.toString()); 
         names = json.getJSONArray(TAG_HASIL); 

         for(int i = 0; i < names.length();i++) 
         { 
          JSONObject c = names.getJSONObject(i); 
          String barang = c.getString(TAG_BARANG); 
          String image = "lomapod.esy.es/assets/"+c.getString(TAG_IMAGE); 

          item = new gridItem(); 
          item.setBarang(barang); 
          item.setImageUrl(image); 

          HashMap<String,String> map = new HashMap<String,String>(); 

          map.put(TAG_BARANG,barang); 
          map.put(TAG_IMAGE,image); 
          nameList.add(map); 
          mGridData.add(item); 
         } 
        } 
       } 
      }catch(JSONException e) 
      { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      if(sukses == 0) 
      { 
       CustomGridViewAdapter adapter = new CustomGridViewAdapter(
         MainActivity.this,R.layout.grid_item,mGridData); 
       if(mGridData.size()>0) 
       { 
        mGridAdapter.setGridData(mGridData); 
        data.setAdapter(adapter); 
       } 
       else 
        Toast.makeText(getApplicationContext(),"Error - No Data  Available", Toast.LENGTH_SHORT).show(); 

      } 
      else 
      { 
       Toast.makeText(MainActivity.this,"Failed",Toast.LENGTH_LONG); 
      } 
     } 
    } 
} 

回答

0
CustomGridViewAdapter adapter = new CustomGridViewAdapter(
        MainActivity.this,R.layout.grid_item,mGridData); 
      mGridAdapter.setGridData(mGridData); 
      data.setAdapter(adapter); 

mGridData是空的,您沒有添加該列表的數據。而且你不需要初始化新的適配器。

+0

如何初始化mGridData?你能告訴我怎麼樣?我很困惑它 –

+0

我已經初始化它,但它只顯示名稱,圖像沒有出現,你能幫我嗎? –

0

您沒有爲mGridData添加值,這就是爲什麼它沒有顯示任何內容。在將值傳遞給適配器之前,請檢查mGridData的大小。

`@Override 
    protected void onPostExecute(String s) { 
     if(sukses == 0) 
     { 
      CustomGridViewAdapter adapter = new CustomGridViewAdapter(
        MainActivity.this,R.layout.grid_item,mGridData); 
      if(mGridData.size()>0) 
       { 
      mGridAdapter.setGridData(mGridData); 
      data.setAdapter(adapter); 
      } 
      else 
      Toast.makeText(getApplicationContext(),"Error - No Data  Available", Toast.LENGTH_SHORT).show(); 

     }` 
+0

我已初始化它,但它只顯示名稱,圖像沒有出現,你能幫助我嗎? –

0

爲什麼你GridView沒有顯示任何東西的原因是因爲ArrayList<gridItem>要傳遞到您的CustomGridViewAdapter

您已初始化您的ArrayList<gridItem>MainActivity從未將任何項目添加到列表中。

在程序中需要更改某些內容才能使其正常工作。 由於您在ArrayList<HashMap<String, String>> nameList中添加了服務器響應,因此您需要將該ArrayList傳遞給您的Adapter,然後使用該ArrayList的項綁定到您的網格的textViewimageView

onPostExecute(),初始化適配器,

CustomGridViewAdapter adapter = new CustomGridViewAdapter(MainActivity.this,R.layout.grid_item, nameList); 
data.setAdapter(adapter);  
//you don't even need to call mGridAdapter.setGridData(mGridData) method. 

而且更改適配器的構造函數,

public CustomGridViewAdapter(Context context, int layoutResourceId, 
          ArrayList<HashMap<String, String>> nameList) { 
    .... 
} 
+0

我已初始化它,但它只顯示名稱,圖像沒有出現,你能幫我嗎? –