2017-12-11 10 views
1

Main Activity:가져올 수 없습니다 이미지

public class MainActivity extends AppCompatActivity { 

      // ImageView iv; 
      public static StringBuffer finalparsedData; 
      public static GridView myGrid; 
      private static final String TAG = MainActivity.class.getSimpleName(); 
      ArrayList<String> values = null; 

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

       myGrid=(GridView)findViewById(R.id.grid_view); 

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

        @Override 
        public void onClick(View v) {  
         new JSONTask().execute("https://api.flickr.com/services/rest/?method=flickr.photos.getRecent&" + 
           "api_key=46e71c8d2b35ba8c9c333a462ec8aea7&per_page=3&format=json&nojsoncallback=10"); 
        } 
       }); 
       values = new ArrayList<>(); 

      } 
     /*static boolean isAirplaneModeOn(Context context) { 
      ContentResolver contentResolver = context.getContentResolver(); 
      return Settings.System.getInt(contentResolver, AIRPLANE_MODE_ON, 0) != 0; 
     }*/ 

      public class JSONTask extends AsyncTask<String, Void, String> { 

       String photoid; 
       int farm; 
       String server; 
       String secret; 

       @Override 
       protected String doInBackground(String... params) { 
        HttpURLConnection connection = null; 
        BufferedReader reader = null; 


        StringBuffer buffer = null; 
        JSONArray parentarray = null; 

        try { 
         URL url = new URL(params[0]); 
         connection = (HttpURLConnection) url.openConnection(); 
         connection.connect(); 

         InputStream stream = connection.getInputStream(); 
         reader = new BufferedReader(new InputStreamReader(stream)); 
         buffer = new StringBuffer(); 
         String line = ""; 
         while ((line = reader.readLine()) != null) { 
          buffer.append(line); 

         } 
         String finalJson = buffer.toString(); 

         JSONObject parentObject = new JSONObject(finalJson); 
         //JSONObject initialObject = new JSONObject("photos"); 
         JSONObject initialObject = parentObject.getJSONObject("photos"); 
         parentarray = initialObject.getJSONArray("photo"); 
         finalparsedData = new StringBuffer(); 

         for (int i = 0; i < parentarray.length(); i++) { 

          JSONObject finalObject = parentarray.getJSONObject(i); 
          photoid = finalObject.optString("id"); 
          farm = finalObject.optInt("farm"); 
          server = finalObject.optString("server"); 
          secret = finalObject.optString("secret"); 
          finalparsedData.append("https://farm" + farm + ".staticflickr.com/" + server + "/" + photoid+ "_" + secret + ".jpg" +"\n\n"); 
          values.add(String.valueOf((finalparsedData))); 

         }  
         return "done"; 
        } catch (MalformedURLException e) { 
         e.printStackTrace(); 
         return "error"; 
        } catch (IOException e) { 
         e.printStackTrace(); 
         return "error"; 
        } catch (JSONException e) { 
         e.printStackTrace(); 
         return "error"; 
        } finally { 
         if (connection != null) { 
          connection.disconnect(); 
         } 

         try { 
          if (reader != null) { 
           reader.close(); 
           return "done"; 

          } 

         } catch (IOException e) { 
          e.printStackTrace(); 
          return "error"; 
         } 
        } 
       } 

       @Override 
       protected void onPostExecute(String result) { 

        switch (result){ 
         case "done": 
          MyImageAdapter adapter = new MyImageAdapter(MainActivity.this, values); 
          myGrid.setAdapter((ListAdapter) adapter); 
          break; 

        } 

       } 
      } 
     } 

MyAdapterClass:

public class MyImageAdapter extends BaseAdapter { 

    ArrayList<String> values; 
    Context mContext; 

    public MyImageAdapter(Context mContext, ArrayList<String> values) { 
     this.values = values; 
     this.mContext = mContext; 
    } 

    @Override 
    public int getCount() { 
     return values.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     ViewHolder holder; 
; 
     if (row == null){ 
      LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.grid,parent,false); 
      holder = new ViewHolder(); 
      holder.imageView = (ImageView) row.findViewById(R.id.image_View); 
      row.setTag(holder); 
     } else { 
      holder = (ViewHolder) row.getTag(); 
     } 

     String image = values.get(position); 

     Picasso.with(mContext).load(image).into(holder.imageView); 

     return row; 
    } 
    public class ViewHolder { 

     ImageView imageView; 
    } 
} 

가 난 단지 한 이미지가 표시됩니다 10 개 개의 이미지 중, gridview에로드 할 이미지 중 문제가있어와 나머지는 "이 이미지를 더 이상 볼 수 없습니다"

+0

Api에서 데이터를 가져오고 있습니까? 그렇다면 url이 유효하지 않을 수 있습니다. 즉,이 URL에서는 Image를 사용할 수 없습니다. 얻는 URL의 유효성을 확인하십시오. – ADM

+0

예 데이터를 받고 URL도 유효합니다. Log.d를 사용하여 URL을 확인할 때 모든 이미지의 URL을 표시합니다. 브라우저에서 URL을 확인하면 해당 이미지가 표시됩니다. –

+0

"이 이미지는 더 이상 사용할 수 없습니다"이것은 URL을 공개적으로 사용할 수 없음을 의미합니다. 그들은 브라우저에서 열 었는가? – ADM

답변

1

하하, 어리석은 실수.

. 
. 
. 
for (int i = 0; i < parentarray.length(); i++) { 

    JSONObject finalObject = parentarray.getJSONObject(i); 
    photoid = finalObject.optString("id"); 
    farm = finalObject.optInt("farm"); 
    server = finalObject.optString("server"); 
    secret = finalObject.optString("secret"); 
    String fullPath = "https://farm" + farm + ".staticflickr.com/" + server + "/" + photoid+ "_" + secret + ".jpg"; 

    values.add(fullPath); 
} 
. 
. 
. 

StringBuffer을 사용할 필요가 없습니다. 변수는 보통 String이어야합니다. :)

+0

확실히 작동 할 것입니다 .... – Dhruv

+0

예, 그 고맙습니다. 지난 2 일간 붙어있었습니다. –

+0

그 이유는 여기 있습니다. , 진드기를 클릭하여이 대답을 수락하십시오 ... – Dhruv