2016-04-23 9 views
-1

Ich möchte eine App erstellen, die Bilder in einer Gridview mit der Picasso-Bibliothek anzeigt. Das ist mein Code. Das Bild wurde nicht geladen. Im Picasso-Protokoll, nach Aufforderung immer Fehler zu laden. Können Sie mir helfen? Bitte DankeBild in GridView mit Picasso anzeigen

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); 
      } 
     } 
    } 
} 

Antwort

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

mGridData leer ist, haben Sie nicht hinzugefügt Daten für diese Liste. Und Sie brauchen nicht den neuen Adapter zu initialisieren.

+0

wie mGridData zu initialisieren? kannst du mir sagen wie? Ich werde mit ihm verwechselt –

+0

ich hatte es initialisieren, aber es nur den Namen anzeigen, Bild nicht angezeigt wird, können Sie mir helfen? –

0

Sie haben keine Werte zu mGridData hinzugefügt, deshalb wird nichts angezeigt. Bevor Sie Werte an den Adapter übergeben, überprüfen Sie die Größe von 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

ich hatte es initialisieren, aber es zeigt nur den Namen, Bild wurde nicht angezeigt, können Sie mir helfen? –

0

Der Grund, warum Ihr GridView ist nichts zeigt, ist, weil die ArrayList<gridItem> Sie Ihre CustomGridViewAdapter sind vorbei leer ist.

Sie haben Ihre ArrayList<gridItem> in MainActivity initialisiert, aber haben Sie nie ein beliebiges Element zur Liste hinzugefügt.

Es gibt einige Dinge, die Sie in Ihrem Programm ändern müssen, damit es funktioniert. Da die Serverantwort in der ArrayList<HashMap<String, String>> nameList hinzugefügt wird, müssen Sie diese ArrayList an Ihre Adapter übergeben und dann die ArrayList-Elemente verwenden, um in die Raster textView und imageView Ihres Gitters zu binden.

In onPostExecute() initialisieren Ihren Adapter wie

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. 

Auch Ihr Adapter Konstruktor ändern,

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

ich hatte es initialisieren, aber es zeigt nur den Namen, Bild wurde nicht angezeigt, können Sie mir helfen? –