Java + Android взема на информация от MySQL

vinsbg

Registered
Здравейте,
Може ли някой ако може да ми помогне.
Опитвам се да изкарам от база данни снимка и информация в андроид приложение. Проблема е, че снимката не излиза като снимка, а само текст. Примерно /img/snimka.jpg .. това е пътя до снимката. Не мога да намеря и никакъв урок подходящ.
От тук правя връзката към php файла
Код:
public class Restaurants extends Activity {
	private String jsonResult;
	private String url = "http://link/app/GetRestaurants.php";
	private ListView listView;
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.restaurants);
		listView = (ListView) findViewById(R.id.listView1);
		accessWebService();
	}
 
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
 
	// Async Task to access the web
	private class JsonReadTask extends AsyncTask<String, Void, String> {
		@Override
		protected String doInBackground(String... params) {
			HttpClient httpclient = new DefaultHttpClient();
			HttpPost httppost = new HttpPost(params[0]);
			try {
				HttpResponse response = httpclient.execute(httppost);
				jsonResult = inputStreamToString(
						response.getEntity().getContent()).toString();
						return jsonResult;

			}
 
			catch (ClientProtocolException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return null;
		}
 
  private StringBuilder inputStreamToString(InputStream is) {
	  String rLine = "";
	  StringBuilder answer = new StringBuilder();
	  BufferedReader rd = new BufferedReader(new InputStreamReader(is));
 
	  try {
		  while ((rLine = rd.readLine()) != null) {
			  answer.append(rLine);
		  }
	  }
 
	  catch (IOException e) {
		  // e.printStackTrace();
		  Toast.makeText(getApplicationContext(),
				  "Error..." + e.toString(), Toast.LENGTH_LONG).show();
   	  }
	  return answer;
  }
 
  	@Override
  	protected void onPostExecute(String result) {
  		ListDrwaer();
  	}
 }// end async task
 
	public void accessWebService() {
		JsonReadTask task = new JsonReadTask();
		// passes values for the urls string array
		task.execute(new String[] { url });
	}
 
	// build hash set for list view
	public void ListDrwaer() {
		List<Map<String, String>> restaurantList = new ArrayList<Map<String, String>>();
 
		try {
			JSONObject jsonResponse = new JSONObject(jsonResult);
			JSONArray jsonMainNode = jsonResponse.optJSONArray("Restaurants");
 
			for (int i = 0; i < jsonMainNode.length(); i++) {
				JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
				String name = jsonChildNode.optString("Name");
				String menu = jsonChildNode.optString("Menu");
				String image = jsonChildNode.optString("Image");
				String outPut = image + " " + name + "- >" + menu;
				restaurantList.add(createRestaurants("restaurants", outPut, outPut));
			}
		} catch (JSONException e) {
			Toast.makeText(getApplicationContext(), "Error" + e.toString(),
					Toast.LENGTH_SHORT).show();
		}
 
		SimpleAdapter simpleAdapter = new SimpleAdapter(this, restaurantList,
				android.R.layout.simple_list_item_1,
				new String[] { "restaurants" }, new int[] { android.R.id.text1 });
				listView.setAdapter(simpleAdapter);
	}
 
	private HashMap<String, String> createRestaurants(String name, String menu, String image) {
		HashMap<String, String> restaurantNameMenu = new HashMap<String, String>();
		restaurantNameMenu.put(name, menu);
		return restaurantNameMenu;
	}
}
PHP файла
Код:
$con=mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");
$sql = "select * from Restaurants"; 
$result = mysql_query($sql);
$json = array();
 
if(mysql_num_rows($result)){
while($row=mysql_fetch_assoc($result)){
$json['Restaurants'][]=$row;
}
}
mysql_close($con);
echo json_encode($json);
Това получавам. На мястото на /img/rest1.jpg .. трябва да са снимките.
6318.jpg
 
Интересно ми е дали ти изкарва някакъв warning, ама предполагам не. До колкото гледам имаш една променлива тип String - image, с която визуализираш снимката,но тва не е ли пътя до снимката. Пробвай BufferedImage displayImage = null и после в един try{}catch{} я зареждаш displayImage = ImageIO.read(new File(image));
 
Не, няма warningi. Всичко си работи нормално и да, това е пътя в базата до снимката.

Ако може да помогнеш, къде и как точно да го напиша това, което предлагаш. Ясно ми е, че най-вероятно снимка трябва да се изведе по друг начин, но нямам предсата как точно.
 
http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/2d/images/examples/LoadImageApplet.java

Точката си остава за @mapka7a
 
Същност, 1-во да ти се извиня тъй като съм те подвел, въобще не включих че става въпрос за андроид, а там се прави с Bitmap

Виж тази тема дали ще ти помогне, ако не се оправиш пиши, ще се проваме да помогнем :)

http://stackoverflow.com/questions/8710515/reading-an-image-file-into-bitmap-from-sdcard-why-am-i-getting-a-nullpointerexc
 
Честно каза се затруднявам как да добавя тази Bitmap функция в кода, който имам.
Ще помоля за малко помощ?
 
Код:
public class Restaurants extends Activity {
   private String jsonResult;
   private String url = "http://link/app/GetRestaurants.php";
   private ListView listView;
   private BitmapFactory.Options options = new BitmapFactory.Options();
   options.inPreferredConfig = Bitmap.Config.ARGB_8888;
   private Bitmap bitmap;
 
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.restaurants);
      listView = (ListView) findViewById(R.id.listView1);
      accessWebService();
   }
 
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
   }
 
   // Async Task to access the web
   private class JsonReadTask extends AsyncTask<String, Void, String> {
      @Override
      protected String doInBackground(String... params) {
         HttpClient httpclient = new DefaultHttpClient();
         HttpPost httppost = new HttpPost(params[0]);
         try {
            HttpResponse response = httpclient.execute(httppost);
            jsonResult = inputStreamToString(
                  response.getEntity().getContent()).toString();
                  return jsonResult;

         }
 
         catch (ClientProtocolException e) {
            e.printStackTrace();
         } catch (IOException e) {
            e.printStackTrace();
         }
         return null;
      }
 
  private StringBuilder inputStreamToString(InputStream is) {
     String rLine = "";
     StringBuilder answer = new StringBuilder();
     BufferedReader rd = new BufferedReader(new InputStreamReader(is));
 
     try {
        while ((rLine = rd.readLine()) != null) {
           answer.append(rLine);
        }
     }
 
     catch (IOException e) {
        // e.printStackTrace();
        Toast.makeText(getApplicationContext(),
              "Error..." + e.toString(), Toast.LENGTH_LONG).show();
        }
     return answer;
  }
 
     @Override
     protected void onPostExecute(String result) {
        ListDrwaer();
     }
 }// end async task
 
   public void accessWebService() {
      JsonReadTask task = new JsonReadTask();
      // passes values for the urls string array
      task.execute(new String[] { url });
   }
 
   // build hash set for list view
   public void ListDrwaer() {
      List<Map<String, String>> restaurantList = new ArrayList<Map<String, String>>();
 
      try {
         JSONObject jsonResponse = new JSONObject(jsonResult);
         JSONArray jsonMainNode = jsonResponse.optJSONArray("Restaurants");
 
         for (int i = 0; i < jsonMainNode.length(); i++) {
            JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
            String name = jsonChildNode.optString("Name");
            String menu = jsonChildNode.optString("Menu");
            String image = jsonChildNode.optString("Image");
			bitmap = BitmapFactory.decodeFile(image, options);
            String outPut = selected_photo.setImageBitmap(bitmap) + " " + name + "- >" + menu;
            restaurantList.add(createRestaurants("restaurants", outPut, outPut));
         }
      } catch (JSONException e) {
         Toast.makeText(getApplicationContext(), "Error" + e.toString(),
               Toast.LENGTH_SHORT).show();
      }
 
      SimpleAdapter simpleAdapter = new SimpleAdapter(this, restaurantList,
            android.R.layout.simple_list_item_1,
            new String[] { "restaurants" }, new int[] { android.R.id.text1 });
            listView.setAdapter(simpleAdapter);
   }
 
   private HashMap<String, String> createRestaurants(String name, String menu, String image) {
      HashMap<String, String> restaurantNameMenu = new HashMap<String, String>();
      restaurantNameMenu.put(name, menu);
      return restaurantNameMenu;
   }
}


Може би така ? :idea: :idea: :idea:
 
3 Грешки има, които не мога да оправа.
1.
Код:
private BitmapFactory.Options options = new BitmapFactory.Options();
	   options.inPreferredConfig = Bitmap.Config.ARGB_8888;
	   private Bitmap bitmap;
Тук на options.inPreferredConfig = Bitmap.Config.ARGB_8888; - >
Syntax error on token "inPreferredConfig", VariableDeclaratorId expected after this token

2.
Код:
Bitmap = BitmapFactory.decodeFile(image, options);
	            String outPut = selected_photo.setImageBitmap(bitmap) + " " + name + "- >" + menu;
на Bitmap = BitmapFactory.decodeFile(image, options); ->
Bitmap cannot be resolved to a variable
и на String outPut = selected_photo.setImageBitmap(bitmap) + " " + name + "- >" + menu; ->
selected_photo cannot be resolved
 
Код:
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;

Слагаш ги най-отгоре, при другия import

Код:
public class Restaurants extends Activity {
   private String jsonResult;
   private String url = "http://link/app/GetRestaurants.php";
   private ListView listView;
   private BitmapFactory.Options options = new BitmapFactory.Options();
   options.inPreferredConfig = Bitmap.Config.ARGB_8888;
   private Bitmap bitmap;
 
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.restaurants);
      listView = (ListView) findViewById(R.id.listView1);
      accessWebService();
   }
 
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
   }
 
   // Async Task to access the web
   private class JsonReadTask extends AsyncTask<String, Void, String> {
      @Override
      protected String doInBackground(String... params) {
         HttpClient httpclient = new DefaultHttpClient();
         HttpPost httppost = new HttpPost(params[0]);
         try {
            HttpResponse response = httpclient.execute(httppost);
            jsonResult = inputStreamToString(
                  response.getEntity().getContent()).toString();
                  return jsonResult;

         }
 
         catch (ClientProtocolException e) {
            e.printStackTrace();
         } catch (IOException e) {
            e.printStackTrace();
         }
         return null;
      }
 
  private StringBuilder inputStreamToString(InputStream is) {
     String rLine = "";
     StringBuilder answer = new StringBuilder();
     BufferedReader rd = new BufferedReader(new InputStreamReader(is));
 
     try {
        while ((rLine = rd.readLine()) != null) {
           answer.append(rLine);
        }
     }
 
     catch (IOException e) {
        // e.printStackTrace();
        Toast.makeText(getApplicationContext(),
              "Error..." + e.toString(), Toast.LENGTH_LONG).show();
        }
     return answer;
  }
 
     @Override
     protected void onPostExecute(String result) {
        ListDrwaer();
     }
 }// end async task
 
   public void accessWebService() {
      JsonReadTask task = new JsonReadTask();
      // passes values for the urls string array
      task.execute(new String[] { url });
   }
 
   // build hash set for list view
   public void ListDrwaer() {
      List<Map<String, String>> restaurantList = new ArrayList<Map<String, String>>();
 
      try {
         JSONObject jsonResponse = new JSONObject(jsonResult);
         JSONArray jsonMainNode = jsonResponse.optJSONArray("Restaurants");
 
         for (int i = 0; i < jsonMainNode.length(); i++) {
            JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
            String name = jsonChildNode.optString("Name");
            String menu = jsonChildNode.optString("Menu");
            String image = jsonChildNode.optString("Image");
			bitmap = BitmapFactory.decodeFile(image, options);
			ImageView selected_photo = (ImageView) findViewById(R.id.image_ids)
            String outPut = selected_photo.setImageBitmap(bitmap) + " " + name + "- >" + menu;
            restaurantList.add(createRestaurants("restaurants", outPut, outPut));
         }
      } catch (JSONException e) {
         Toast.makeText(getApplicationContext(), "Error" + e.toString(),
               Toast.LENGTH_SHORT).show();
      }
 
      SimpleAdapter simpleAdapter = new SimpleAdapter(this, restaurantList,
            android.R.layout.simple_list_item_1,
            new String[] { "restaurants" }, new int[] { android.R.id.text1 });
            listView.setAdapter(simpleAdapter);
   }
 
   private HashMap<String, String> createRestaurants(String name, String menu, String image) {
      HashMap<String, String> restaurantNameMenu = new HashMap<String, String>();
      restaurantNameMenu.put(name, menu);
      return restaurantNameMenu;
   }
}

Така на сляпо малко ...

Обърни внимание на този ред
Код:
ImageView selected_photo = (ImageView) findViewById(R.id.image_ids)
 
Не смятам, че ще се получи по този начин.

Вие подавате пътя към изображението като стринг или цялото изображение като ImageView обект и очаквате listView обекта да знае, че това е изображение.

До колкото съм запознат с android, layout-ите на приложенията обикновено се правят с XML файлове. @vinsbg създавал ли си някакъв XML файл за този listview?
 
eLite каза:
Не смятам, че ще се получи по този начин.

Вие подавате пътя към изображението като стринг или цялото изображение като ImageView обект и очаквате listView обекта да знае, че това е изображение.

До колкото съм запознат с android, layout-ите на приложенията обикновено се правят с XML файлове. @vinsbg създавал ли си някакъв XML файл за този listview?
Създал съм си и xml-a
Код:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minHeight="50dp"
    android:orientation="vertical" >

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

        <ImageView
            android:id="@+id/image"
            android:layout_width="70dp"
            android:layout_height="70dp" />

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:lineSpacingExtra="3dp"
            android:paddingLeft="5dp"
            android:paddingTop="5dp"
            android:text="" />

        <TextView
            android:id="@+id/menu"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="5dp"
            android:paddingTop="5dp"
            android:text="" />
    </LinearLayout>

</LinearLayout>
@mapka7a
Импортнати са.
Въпреки на реда, който си посочил получавам пак тази грешка
The operator + is undefined for the argument type(s) void, String
+ си остава грешката на options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Syntax error on token "inPreferredConfig", VariableDeclaratorId expected after this token
Успях да го оправя. Благодаря за шомощта и насоките. :?:
 

Back
Горе