2014-08-28 52 views
0

我創建了一個活動,它通過JSON數據填充數組列表,以及當用戶單擊項目數組時,會顯示一個新活動,顯示與該項目有關的信息。有了幫助,我只能設法在該頁面上顯示字符串。通過JSON在ImageView中檢索圖像

換句話說,在我的單個項目中單擊我能夠檢索字符串,這是非常具有諷刺意味的,因爲我能夠通過數組列表中的JSON填充圖像。

在單項活動的佈局中,我創建了一個包含4張照片的水平幻燈片庫,但希望通過JSON數據填充這些圖像中的每一個。

下面是填充陣列的列表,並引用單項點擊活動

public class CasualEventsActivity extends Activity { 

     private static final String URL_WEB_SERVICE = "xxxxx"; 
     private GridView gv; 
     private ArrayList<Events_List> container; 
     private ArrayList<Events_List> items; 
     public Uri list_item_bac; 
     public String list_item_name; 
     public String list_item_description; 
     public String list_item_location; 
     public String single_list_item_description; 
     public String list_item_price; 


     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.events_list_layout); 
      gv = (GridView) findViewById(R.id.gridview); 
      container = new ArrayList<Events_List>(); 
      //download JSON 
      listDownload(); 


      GridView s = (GridView) findViewById(R.id.gridview); 
      s.setOnItemClickListener(new OnItemClickListener(){ 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        Intent intent = new Intent(CasualEventsActivity.this,CasualEventsSingleItemActivity.class); 

        intent.putExtra("list_item_name", container.get(position).getList_item_title()); 
        intent.putExtra("list_item_location", container.get(position).getList_item_location()); 
        intent.putExtra("single_list_item_description", container.get(position).getSingle_list_item_description()); 
        startActivity(intent); //start Activity 
       } 
      }); 
     } 
     public void listDownload(){ 
      RequestQueue volley = Volley.newRequestQueue(this); 
      JsonObjectRequest json = new JsonObjectRequest(Method.GET, URL_WEB_SERVICE, null, ResponseListener(), ErrorListener()); 
      volley.add(json); 
     } 

     private Response.Listener<JSONObject> ResponseListener() { 
      return new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        try { 
         //your JSON Array 
         JSONArray array = response.getJSONArray("list_item"); 
         for(int i = 0; i < array.length(); i++){ 
          container.add(convertirAnuncio(array.getJSONObject(i))); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
        gv.setAdapter(new AdapterEvents(getApplicationContext(),container)); 
        } 
       }; 
      }; 


     private Response.ErrorListener ErrorListener() { 
      return new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { } 
      }; 
     } 

     //object JSON 
     private final Events_List convertirAnuncio(JSONObject obj) throws JSONException { 
      long id = obj.getLong("id"); //id 
      String list_item_name = obj.getString("list_item_name"); 
      String list_item_location = obj.getString("list_item_location"); 
      String list_item_description = obj.getString("list_item_description"); 
      String single_list_item_description = obj.getString("single_list_item_description"); 
      Uri uri = Uri.parse(obj.getString("list_item_bac")); 
      return new Events_List(id, list_item_location, single_list_item_description,list_item_name,list_item_description,list_item_price, uri); 
     } 
    } 

單項活動

public class CasualEventsSingleItemActivity extends Activity { 

    // Declare Variables 
    String list_item_name; 
    String list_item_description; 
    String list_item_price; 
    String list_item_location; 

    String single_list_item_description; 




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





     Intent i = getIntent(); 
     list_item_name = i.getStringExtra("list_item_name"); 
     list_item_location = i.getStringExtra("list_item_location"); 

     // Uri uri = Uri.parse(obj.getString("list_item_bac")); 


     single_list_item_description = i.getStringExtra("single_list_item_description"); 

     TextView txtname = (TextView) findViewById(R.id.name); 
     TextView txtlocation = (TextView) findViewById(R.id.location); 
     TextView txtsdescription = (TextView) findViewById(R.id.sdescription); 


     ImageView hsvimage1 = (ImageView) findViewById(R.id.hsvimage1); 
     ImageView hsvimage2 = (ImageView) findViewById(R.id.hsvimage2); 
     ImageView hsvimage3 = (ImageView) findViewById(R.id.hsvimage3); 



     // Set results to the TextViews 
     txtname.setText(list_item_name); 
     txtlocation.setText(list_item_location); 
     txtsdescription.setText(single_list_item_description); 


     Button mConfirm2 = (Button)findViewById(R.id.bConfirm2); 
     mConfirm2.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       ParseUser currentUser = ParseUser.getCurrentUser(); 

       // Create the class and the columns 
       currentUser.saveInBackground(); 

       currentUser.put("ActivityName", list_item_name); 
       currentUser.saveInBackground(new SaveCallback() { 
        @Override 
        public void done(ParseException e) { 
         setProgressBarIndeterminateVisibility(false); 

         if (e == null) { 
          // Success! 
          Intent intent = new Intent(CasualEventsSingleItemActivity.this, usermatch.class); 
          intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
          intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
          startActivity(intent); 
         } 
         else { 
          AlertDialog.Builder builder = new AlertDialog.Builder(CasualEventsSingleItemActivity.this); 
          builder.setMessage(e.getMessage()) 
           .setTitle(R.string.signup_error_title) 
           .setPositiveButton(android.R.string.ok, null); 
          AlertDialog dialog = builder.create(); 
          dialog.show(); 
         } 
        } 
       }); 
       //CasualEventsSingleItemActivity.this.startActivity(new Intent(CasualEventsSingleItemActivity.this, MatchingActivity.class)); 
      } 
     }); 


    } 
} 

特別活動代碼,下面是一行在那裏我會要將JSON數據與ImageView相關聯

ImageView hsvimage1 = (ImageView) findViewById(R.id.hsvimage1); 
    ImageView hsvimage2 = (ImageView) findViewById(R.id.hsvimage2); 
    ImageView hsvimage3 = (ImageView) findViewById(R.id.hsvimage3); 

單個項目佈局活動代碼

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
     android:background="@drawable/blue_bac3" 
    android:gravity="center" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_marginLeft="15dp" 
     android:layout_marginTop="10dp" 

     android:layout_marginRight="15dp" 
     android:alpha="0.9" 
     android:paddingBottom="3dp" 
     android:shadowColor="#000000" 
     android:shadowDx="3" 
     android:shadowDy="3" 
     android:shadowRadius="0.01" 
     android:textColor="#82CAFF" 
     android:textSize="24sp" /> 

    <TextView 
     android:id="@+id/location" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/name" 
     android:layout_centerHorizontal="true" 
     android:layout_marginLeft="15dp" 
     android:layout_marginRight="15dp" 
     android:alpha="0.8" 
     android:paddingBottom="5dp" 
     android:shadowColor="#000000" 
     android:shadowDx="3" 
     android:shadowDy="3" 
     android:shadowRadius="0.01" 
     android:textAlignment="center" 
     android:textColor="#f2f2f2" 
     android:textSize="16sp" /> 

    <ImageView 
     android:id="@+id/dividertop" 
     android:layout_width="370dp" 
     android:layout_centerHorizontal="true" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/location" 
     android:alpha="0.6" 
     android:background="@drawable/divider11" 
     android:paddingBottom="3dp" /> 

    <ImageView 
     android:id="@+id/dividerbottom" 
     android:layout_width="370dp" 
       android:layout_centerHorizontal="true" 

     android:layout_height="wrap_content" 
     android:layout_below="@+id/vsvdescription" 
     android:alpha="0.6" 
     android:background="@drawable/divider11" 
     android:paddingBottom="3dp" /> 

    <ImageView 
     android:id="@+id/image_head" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:background="#000000" 
     android:padding="1dp" /> 

    <HorizontalScrollView 
     android:id="@+id/isgallery" 
     android:layout_width="370dp" 
     android:layout_height="90dp" 
     android:layout_centerHorizontal="true" 
     android:layout_below="@+id/dividerbottom" 
     android:layout_marginTop="8dp" 
     > 

      <LinearLayout 
       android:orientation="horizontal" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" > 

       <ImageView 
       android:id="@+id/hsvimage1" 
       android:layout_width="148dp" 
       android:layout_height="90dp" 
       android:layout_marginRight="6dp" 
       android:layout_alignParentRight="true" 
       android:background="#fff" 
       android:padding="1dp" /> 
       <ImageView 
       android:id="@+id/hsvimage2" 
       android:layout_width="148dp" 
       android:layout_height="90dp" 
       android:layout_marginRight="6dp" 
       android:layout_alignParentRight="true" 
       android:background="#000000" 
       android:padding="1dp" /> 
       <ImageView 
       android:id="@+id/hsvimage3" 
       android:layout_width="148dp" 
       android:layout_height="90dp" 
       android:layout_marginRight="6dp" 
       android:layout_alignParentRight="true" 
       android:background="#CCC" 
       android:padding="1dp" /> 
       <ImageView 
       android:id="@+id/hsvimage4" 
       android:layout_width="148dp" 
       android:layout_height="90dp" 
       android:layout_alignParentRight="true" 
       android:background="#000000" 
       android:padding="1dp" /> 
         </LinearLayout> 

        </HorizontalScrollView> 

    <Button 
     android:id="@+id/bConfirm2" 
     android:layout_width="90dp" 
     android:layout_height="50dp" 
     android:layout_below="@+id/isgallery" 
     android:layout_centerHorizontal="true" 
     android:alpha="0.7" 
     android:layout_marginTop="10dp" 
     android:background="@drawable/gray_bac" 
     android:text="Confirm" 
     android:textColor="#2B3856" 
     android:textStyle="bold" /> 

    <ScrollView 
     android:id="@+id/vsvdescription" 
     android:layout_width="370dp" 
     android:layout_height="250dp" 
     android:layout_marginTop="7dp" 
     android:layout_marginBottom="7dp" 
     android:padding="5dp"  

     android:layout_centerHorizontal="true" 
     android:layout_below="@+id/dividertop" 
     > 

      <RelativeLayout 
       android:orientation="vertical" 
       android:gravity="center" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" > 

    <TextView 
     android:id="@+id/sdescription" 
     android:layout_width="370dp" 
     android:layout_height="250dp" 
     android:gravity="center" 
     android:alpha="0.65" 
     android:textColor="#ffffff" 
     android:textSize="18sp" /> 

    </RelativeLayout> 
    </ScrollView> 

</RelativeLayout> 

管理的JSON字符串

public class Events_List { 
public long id; 
public String list_item_title; 
public String list_item_location; 
public String list_item_price; 
public Uri single_list_item_bac; 
public String list_item_description; 
public String single_list_item_description; 

public Uri url; 

public Events_List(long id, String list_item_location, String single_list_item_description, String list_item_title, String list_item_description, String list_item_price, Uri url){ 
    this.id = id; 
    this.list_item_title = list_item_title; 
    this.list_item_location = list_item_location; 
    this.list_item_description = list_item_description; 
    this.single_list_item_description = single_list_item_description; 
    this.list_item_price = list_item_price; 
    this.url = url; 
} 

public String getList_item_title() 
{ 
    return this.list_item_title; 
} 

public String getList_item_location() 
{ 
    return this.list_item_location; 
} 

public String getList_item_price() 
{ 
    return this.list_item_price; 
} 

public String getList_item_description() 
{ 
    return this.list_item_description; 
} 

public String getSingle_list_item_description() 
{ 
    return this.single_list_item_description; 
} 


} 

如果你需要進一步澄清的活動課,讓我知道。 在此先感謝

更新

public class CasualEventsSingleItemActivity extends Activity { 

    // Declare Variables 
    String list_item_name; 
    String list_item_description; 
    String list_item_price; 
    String list_item_location; 

    String single_list_item_description; 




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


     RequestQueue mRequestQueue = null; 
     ImageLoader mImageLoader = new ImageLoader(mRequestQueue, 
       new ImageLoader.ImageCache() { 
      private final LruCache<String, Bitmap> 
        cache = new LruCache<String, Bitmap>(20); 

      @Override 
      public Bitmap getBitmap(String url) { 
       return cache.get(url); 
      } 

      @Override 
      public void putBitmap(String url, Bitmap bitmap) { 
       cache.put(url, bitmap); 
      } 
     }); 


     Intent i = getIntent(); 
     list_item_name = i.getStringExtra("list_item_name"); 
     list_item_location = i.getStringExtra("list_item_location"); 



     single_list_item_description = i.getStringExtra("single_list_item_description"); 

     TextView txtname = (TextView) findViewById(R.id.name); 
     TextView txtlocation = (TextView) findViewById(R.id.location); 
     TextView txtsdescription = (TextView) findViewById(R.id.sdescription); 


     NetworkImageView hsvimage1 = (NetworkImageView) findViewById(R.id.hsvimage1); 
     NetworkImageView hsvimage2 = (NetworkImageView) findViewById(R.id.hsvimage2); 
     NetworkImageView hsvimage3 = (NetworkImageView) findViewById(R.id.hsvimage3); 

     // Get image URLs from your previous network request... 
     // I could not determine where this is stored from code in your question. 
     String url1 = "list_item_bac"; // e.g. http://example.com/images/image1.png 
     String url2 = "list_item_bac"; 
     String url3 = "list_item_bac"; 

     // Set the URL of the image that should be loaded into this view, and 
     // specify the ImageLoader that will be used to make the request. 
     hsvimage1.setImageUrl(url1, mImageLoader); 
     hsvimage2.setImageUrl(url2, mImageLoader); 
     hsvimage3.setImageUrl(url3, mImageLoader); 


     // Set results to the TextViews 
     txtname.setText(list_item_name); 
     txtlocation.setText(list_item_location); 
     txtsdescription.setText(single_list_item_description); 


     Button mConfirm2 = (Button)findViewById(R.id.bConfirm2); 
     mConfirm2.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       ParseUser currentUser = ParseUser.getCurrentUser(); 

       // Create the class and the columns 
       currentUser.saveInBackground(); 

       currentUser.put("ActivityName", list_item_name); 
       currentUser.saveInBackground(new SaveCallback() { 
        @Override 
        public void done(ParseException e) { 
         setProgressBarIndeterminateVisibility(false); 

         if (e == null) { 
          // Success! 
          Intent intent = new Intent(CasualEventsSingleItemActivity.this, usermatch.class); 
          intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
          intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
          startActivity(intent); 
         } 
         else { 
          AlertDialog.Builder builder = new AlertDialog.Builder(CasualEventsSingleItemActivity.this); 
          builder.setMessage(e.getMessage()) 
           .setTitle(R.string.signup_error_title) 
           .setPositiveButton(android.R.string.ok, null); 
          AlertDialog dialog = builder.create(); 
          dialog.show(); 
         } 
        } 
       }); 
       //CasualEventsSingleItemActivity.this.startActivity(new Intent(CasualEventsSingleItemActivity.this, MatchingActivity.class)); 
      } 
     }); 

    } 
} 
+0

¿該圖像如何在JSON中表示? – 2014-08-28 20:57:08

+0

圖像被稱爲字符串。例如,「list_item_image1」=>「image.jpg」, – John 2014-08-28 21:05:12

回答

1

我會用亂射的NetworkImageViewImageLoader將做所有在後臺爲你的辛勤工作。

首先,大家ImageViews改變NetworkImageViews:

  <com.android.volley.toolbox.NetworkImageView 
      android:id="@+id/hsvimage1" 
      ... /> 
      <com.android.volley.toolbox.NetworkImageView 
      android:id="@+id/hsvimage2" 
      ... /> 
      <com.android.volley.toolbox.NetworkImageView 
      android:id="@+id/hsvimage3" 
      ... /> 

接下來,創建一個ImageLoader的。您很可能希望創建一個單持有這樣的:

mImageLoader = new ImageLoader(Volley.newRequestQueue(this), 
      new ImageLoader.ImageCache() { 
     private final LruCache<String, Bitmap> 
       cache = new LruCache<String, Bitmap>(20); 

     @Override 
     public Bitmap getBitmap(String url) { 
      return cache.get(url); 
     } 

     @Override 
     public void putBitmap(String url, Bitmap bitmap) { 
      cache.put(url, bitmap); 
     } 
    }); 

然後,所有有剩下要做的就是設置URL每個NetworkImageView。

NetworkImageView hsvimage1 = (NetworkImageView) findViewById(R.id.hsvimage1); 
NetworkImageView hsvimage2 = (NetworkImageView) findViewById(R.id.hsvimage2); 
NetworkImageView hsvimage3 = (NetworkImageView) findViewById(R.id.hsvimage3); 

// Get image URLs from your previous network request... 
// I could not determine where this is stored from code in your question. 
String url1 = ...; // e.g. http://example.com/images/image1.png 
String url2 = ...; 
String url3 = ...; 

// Set the URL of the image that should be loaded into this view, and 
// specify the ImageLoader that will be used to make the request. 
hsvimage1.setImageUrl(url1, mImageLoader); 
hsvimage2.setImageUrl(url2, mImageLoader); 
hsvimage3.setImageUrl(url3, mImageLoader); 
+0

感謝您的詳細回覆。由於錯誤,我做了一些更改,如hsvimage1.setUrl(url1,mImageLoader);更改爲hsvimage1.setImageUrl(url1,mImageLoader);以及我不得不初始化mRequestQueue,雖然我認爲它等於null是錯誤的。至於字符串url,我用JSON字符串替換了...。從這個意義上說,在JSON數據中有一行代表圖像url,如「list_item_bac」=>「image.com/image.jpg」。我已經按照建議更新了佈局。我在我的初始文章的更新部分中添加了更新後的代碼。 謝謝 – John 2014-08-28 22:16:05

+1

我修復了你提到的使用Volley的錯誤。newRequestQueue(this)與您在CasualEventsActivity中做的一樣,是RequestQueue。希望工程。 – kjones 2014-08-29 00:34:57

+0

謝謝。你的幫助很大程度上解決了我的第一個問題,它在活動中顯示圖像,第二個問題解決了通過JSON數據顯示圖像的問題,而不是使用String url3 =「image.com/image.png」,我將String url3 =「list_image1」;,其中list_image1指向鏈接到圖片url的JSON字符串,以及可以在其中找到JSON鏈接的位置,例如website.com/json.php – John 2014-08-29 02:18:17