2015-04-08 3 views
0

Я пытаюсь отобразить изображения из пути, хранящегося в удаленной базе данных (mysql), в приложение Android в GridView. но я не знаю, как это сделать. это моя попытка, и я ценю вашу помощь.JSON to grid view (Невозможно декодировать поток: java.io.FileNotFoundException)

Это моя деятельность, где я извлечь URL из БД:

public class City_about extends Activity { 

TextView tv_Cityname; 
TextView tv_City_descr; 
GridView gridview; 
String StringCity_name,StringDescription; 
// JSON 
JSONParser jsonparser; 
JSONObject JSONObject; 
JSONArray jsonArray; 
ProgressDialog ProgressDialog; 
int value; 
private static final String TAG_MESSAGE = "message"; 
// Images 
String[] Image_id,Image_url,Caption; 
public ImageAdapter Adapter; 
Bitmap bitmap; 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
super.onCreate(savedInstanceState); 

setContentView(R.layout.activity_about_city); 

Intent i = this.getIntent(); 
StringCity_name = i.getStringExtra("City_name"); 
StringDescription = i.getStringExtra("Description"); 

// Views declaration 
tv_Cityname = (TextView)findViewById(R.id.tv_Cityname); 
tv_Cityname.setText(StringCity_name); 
tv_City_descr = (TextView)findViewById(R.id.tv_City_descr); 
tv_City_descr.setText(StringDescription); 
gridview = (GridView)findViewById(R.id.gv_pictures); 

jsonparser = new JSONParser(); 
new City_ImageTask().execute(); 


} // End of OnCreate 

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

@Override 
protected String doInBackground(String... params) { 
// TODO Auto-generated method stub 
List<NameValuePair> list = new ArrayList<NameValuePair>(); 
list.add(new BasicNameValuePair("City_name",StringCity_name.toString())); 
try {    
JSONObject = jsonparser.makeHttpRequest("http://192.168.1.8/Yourguideapplication/City_Images.php", "POST", list); 
Log.e("pass 1", "connection success "); 
} 
catch (Exception e) { 
Log.e("Fail 1", "Fail connection"); 
} 

try { 
value = JSONObject.getInt("value"); 
if (value==1){ 
jsonArray = JSONObject.getJSONArray("Images"); 
Image_url = new String[jsonArray.length()]; 
Caption = new String[jsonArray.length()]; 
for (int i = 0 ; i < jsonArray.length() ; i++) 
{ 
JSONObject object = jsonArray.getJSONObject(i); 
Image_url[i] = object.getString("Image_url"); 
Caption[i] = object.getString("Caption"); 
} 

} else { 
value = 0; 
} 
} catch (Exception e){ 
Log.d("ERORR",e.getMessage()); 
} 
return null; 
} 

@Override 
protected void onPostExecute(String result) { 
// TODO Auto-generated method stub 
super.onPostExecute(result); 
if (value == 1){ 
Adapter = new ImageAdapter(City_about.this,Image_url, Caption); 
gridview.setAdapter(Adapter); 
} else { 
Toast.makeText(City_about.this, "Error", Toast.LENGTH_LONG).show(); 
} 

} 
} 

} 

я уверен, PHP страницы отлично работает, и я восстановить URL-адрес

Мой адаптер:

// Image Adapter 
public class ImageAdapter extends BaseAdapter { 
String[] Image_id,Image_url,Caption; 
private Activity activity; 
Bitmap bitmap; 
ImageView imageView; 

public ImageAdapter(Activity activity, String[] Image_url, 
String[] Caption) { 
// TODO Auto-generated constructor stub 
super(); 
this.Image_url = Image_url; 
this.Caption = Caption; 
this.activity = activity; 
} 

@Override 
public int getCount() { 
// TODO Auto-generated method stub 
return Image_url.length; 
} 

@Override 
public Object getItem(int position) { 
// TODO Auto-generated method stub 
return Image_url[position]; 
} 

@Override 
public long getItemId(int position) { 
// TODO Auto-generated method stub 
return 0; 
} 

public static class ViewHolder 
{ 
public ImageView imgViewFlag; 
public TextView txtViewTitle; 
} 

// ImageView View 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
if (convertView == null) { 
imageView = new ImageView(activity); 
imageView.setLayoutParams(new GridView.LayoutParams(300, 300)); 
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
imageView.setPadding(5, 5, 5, 5); 
} else { 
imageView = (ImageView) convertView; 
} 
imageView.setImageURI(Uri.parse("http://192.168.1.8/Yourguideapplication/"+Image_url[position])); 
return imageView; 
} 
} 

Вход Cat show:

04-08 18:55:10.349: D/JSON Parser(2751): {"Images":[{"Image_id":"1","Image_url":"pics\/Riyadh\/RD1.jpg","Caption":"\u0645\u062f\u064a\u0646\u0629 \u0627\u0644\u0631\u064a\u0627\u0636 \u0644\u064a\u0644\u0627\u064b"},{"Image_id":"2","Image_url":"pics\/Riyadh\/RD2.jpg","Caption":"\u0642\u0635\u0631 \u0627\u0644\u0645\u0635\u0645\u0643"},{"Image_id":"3","Image_url":"pics\/Riyadh\/RD3.jpg","Caption":"\u0645\u062f\u064a\u0646\u0629 \u0627\u0644\u0631\u064a\u0627\u0636."},{"Image_id":"4","Image_url":"pics\/Riyadh\/RD4.jpg","Caption":"\u0628\u0631\u062c \u0627\u0644\u0645\u0645\u0644\u0643\u0629"}],"value":1} 
04-08 18:55:10.349: E/pass 1(2751): connection success 
04-08 18:55:10.449: E/BitmapFactory(2751): Unable to decode stream: java.io.FileNotFoundException: /http:/192.168.1.8/Yourguideapplication/pics/Riyadh/RD1.jpg: open failed: ENOENT (No such file or directory) 
04-08 18:55:10.449: I/System.out(2751): resolveUri failed on bad bitmap uri: http://192.168.1.8/Yourguideapplication/pics/Riyadh/RD1.jpg 
04-08 18:55:10.449: E/BitmapFactory(2751): Unable to decode stream: java.io.FileNotFoundException: /http:/192.168.1.8/Yourguideapplication/pics/Riyadh/RD1.jpg: open failed: ENOENT (No such file or directory) 
04-08 18:55:10.449: I/System.out(2751): resolveUri failed on bad bitmap uri: http://192.168.1.8/Yourguideapplication/pics/Riyadh/RD1.jpg 
04-08 18:55:10.449: E/BitmapFactory(2751): Unable to decode stream: java.io.FileNotFoundException: /http:/192.168.1.8/Yourguideapplication/pics/Riyadh/RD1.jpg: open failed: ENOENT (No such file or directory) 
04-08 18:55:10.449: I/System.out(2751): resolveUri failed on bad bitmap uri: http://192.168.1.8/Yourguideapplication/pics/Riyadh/RD1.jpg 

Я вижу в эмуляторе пустую картинку «Ничего не видно», я думаю, проблема в том, что она добавляет дополнительные «/» до http

из предыдущего вопроса здесь Я считаю, что решение заключается в создании отдельной AsyncTask для загрузки изображений , я просто не могу понять, как

помогите мне пожалуйста

ответ

0

Вам просто нужно использовать любой Loader изображения в адаптере. Вы также можете использовать Picasso Image Loader. Read Вам просто нужно загрузить банку и добавить это как внешний банку в свой проект. Тогда

@Override public void getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
    imageView = new ImageView(activity); 
    imageView.setLayoutParams(new GridView.LayoutParams(300, 300)); 
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    imageView.setPadding(5, 5, 5, 5); 
    } else { 
    imageView = (ImageView) convertView; 
    } 
    String url = "http://192.168.1.8/Yourguideapplication/"+Image_url[position]); 
    Picasso.with(context).load(url).into(imageView); 
    return imageView;   
     } 

Для загрузки изображений вы можете передать URL и изображения вид Пикассо погрузчика с помощью

Picasso.with(context).load(url).into(imageView); 

Нет необходимости устанавливать URI в этом случае

+0

Спасибо, решать проблемы с помощью Пикассо :) – Sara1994

Смежные вопросы