>
Nas video aulas somente ensina como passar os dados para o banco Mysql queria saber se alguem pode me ajudar na captura dos dados no servidor mysql e mostra-los na aplicação
adicione uma query com a busca na aplicacao
Cara, para utilizar mysql eu custumo utilizar Json. Talvez também funcione pra você.
Também tenho esta duvida. Alguém tem algum exemplo pratico de como usar essa integração de android com mysql??
Pessoal,
Basta fazer um consulta no banco de dados, por exemplo, via PHP. Igual ao curso que temos aqui no portal, de Android Online e Android Best Practices.
Antes de exibir eles, codifica para JSON.
No Android, basta chamar via HTTP e decodificar o JSON.
Links que podem auxiliar:
http://php.net/manual/en/function.json-encode.php
Eu desenvolvi um exemplo para vocês, segue o link abaixo:
http://rlsystem.com.br/forum/disco/Exemplo-JSON-PHP-Android.rar
Os arquivos principais do exemplo em Android são: MainActivity.java e ClientAdapter.java
E no exemplo abaixo, seria seu PHP, que iria retornar os dados via JSON. Esse seria chamado via Android.
$conn = mysql_connect("localhost", "root", "");
$db = mysql_select_db("estoque");
$sth = mysql_query("SELECT * FROM produtos");
$rows = array();
while($r = mysql_fetch_assoc($sth)) {
$rows[] = $r;
}
print json_encode($rows);
Rafael,
A forma mais utilizada hoje em dia pra comunicação de um banco externo como SQLite é este processo em PHP.... ? Ou acha melhor o uso talvez de webservices?? Qual sua opnião?
[quote]
Rafael,
A forma mais utilizada hoje em dia pra comunicação de um banco externo como SQLite é este processo em PHP.... ? Ou acha melhor o uso talvez de webservices?? Qual sua opnião?
[/quote]
Bruno,
As duas formas são válidas, usando via JSON (PHP) ou via Web Services. A primeira é mais simples e mais fácil.
Rafael,
Criei no meu projeto a classe ClientAdapter
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Environment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class ClienteAdapater extends BaseAdapter {
private Context ctx;
JSONArray jsonArray;
public ClienteAdapater(Context ctx) {
this.ctx = ctx;
String readHttp = readHttp();
try {
jsonArray = new JSONArray(readHttp);
} catch (Exception e) {
e.printStackTrace();
}
}
public String readHttp() {
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://brunomartins.com.br/php/select_exames.php");
try {
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} else {
Log.e(Main.class.toString(), "Erro ao ler JSON!");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return builder.toString();
}
public int getCount() {
return jsonArray.length();
}
public Object getItem(int position) {
JSONObject ob = null;
try {
ob = jsonArray.getJSONObject(position);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ob;
}
public long getItemId(int arg0) {
return 0;
}
public View getView(int position, View view, ViewGroup arg2) {
LayoutInflater layout = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = layout.inflate(R.layout.model_clientes, null);
try {
JSONObject obj = (JSONObject) getItem(position);
TextView textView1 = (TextView) v.findViewById(R.id.textView1);
textView1.setText(obj.getString("acesso_number"));
TextView textView2 = (TextView) v.findViewById(R.id.textView2);
textView2.setText(obj.getString("descricao"));
} catch (Exception ex) {
}
return v;
}
}
public void BuscaExames(View v){
Toast. makeText(Main.this, "teste", Toast.LENGTH_LONG).show();
return;
}
Opa Bruno.
Basta adicionar um ListView no projeto, recuperar ele e no setAdapater, passar a instância da classe ClienteAdapater.
Algo assim:
ListView ltwClientes = findViewById(R.id.ID_DO_SEU_LISTVIEW);
ltwClientes.setAdapter(new ClienteAdapater(getBaseContext()));
Rafael,
Obrigado pela atenção.
Como teste, criei um campo texto simples onde pega o método do getCount do ClienteAdapater e colocar em um campo abaixo quando clicado no botão.
Fiz desta forma
public void BuscaExames(View v){
TextView count = (TextView) findViewById(R.id.count);
count.setText(new ClienteAdapater(getBaseContext()).getCount());
Toast. makeText(Main.this, "teste", Toast.LENGTH_LONG).show();
return;
}
public void BuscaExames(View v){
ClienteAdapater ca = new ClienteAdapater(getBaseContext());
Toast. makeText(Main.this, "teste", Toast.LENGTH_LONG).show();
return;
}
$link = mysql_connect('localhost', 'brunomartins', '147258');
if (!$link) {
die('Não foi possível conectar: ' . mysql_error());
}
$db_selected = mysql_select_db('nucleomamografia', $link);
if (!$db_selected) {
die ('Can\'t use foo : ' . mysql_error());
}
$SQL = "SELECT distinct exame.exame_id,
exame.acesso_number,
exame.data,
exame.descricao
FROM aluno_exame,
exame
WHERE aluno_exame.exame = exame.exame_id
AND aluno_exame.aluno = 1";
$sth = mysql_query($SQL);
$rows = array();
while($r = mysql_fetch_assoc($sth)){
$rows[] = $r;
}
print json_encode($rows);
//mysql_close($link);
?>
Opa
Faça o teste novamente.
Quando der o erro, copia todo o log do logcat e cole aqui.
No aguardo
Opa... ai esta o Logcat....
http://rlsystem.com.br/forum/disco/uploads/63f7c45fae2e1fa8788990ce859b5379-logcat.txt
Valeu
Opa
Faz o seguinte.
Muda tem readhttp (seu método), para o exemplo daqui:
http://rlsystem.com.br/forum/disco/Exemplo-JSON-PHP-Android.rar
Então... mas o meu método esta igual a este ai... eu copiei exatamente deste seu examplo, só mudei o caminho do PHP.
Estive pesquisando no google agora e vi que este erro dá porque estou tentando fazer um processo longo no método Main, quanto é com android 4, versões anteriores aceitavam. Vi em alguns sites e achei um legal com 3 soluções... usei a segunda por enquanto.... abrindo uma thread para instanciar uma classe... assim...
public void BuscaExames(View v){
new Thread(new Runnable()
{
public void run() {
ClienteAdapater ca = new ClienteAdapater(getBaseContext());
ca.populaExame();
}
}).start();
return;
}
HttpResponse response = client.execute(httpGet);
Opa
Confesso que não entendi a questão que você alterou. Na verdade era pra funcionar igual.
O que você fez foi criar uma thread para isolar este processo e deixar a activity livre.
Inclusive você pode por uma barra de progresso dentro dela.
Quanto a fazer um loop no array é simples.
Você precisa pegar a string de retorno e atribuir a um JSONArray.
Veja:
// Ali em RESULT deve colocar a string de retorno do http
JSONArray jsonArray = new JSONArray(RESULT);
for (int i = 0; i < jsonArray.length(); i ) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
// Para pegar um valor
jsonObject.getString("NOMEDOCAMPO");
}
// Dentro do JsonArray você tem vários JSONObject.
Show....
Deu certo...valeu pela ajuda.... pelo que falam o erro NetworkOnMainThreadException é por nas versões novas do android não poder fazer operações que demoram muito ... bom por fim... acho que é isso.. usando a thead funcionou....
Deu certo também o loop... valeu.. agora vou testar incluir nas tabelas dos SQLite... que acho que não é complicado não.... qualquer coisa eu grito dinovo....
Valeu pela ajuda...
Abraços....
Opa Bruno,
Perfeito.
Na verdade é sempre bom usar as Thread, principalmente para não testarmos a paciência do usuário e fazer ele travar a aplicação.
Além de ser uma boa prática.
Se possível, poste seu código ao pessoal, irá ajudar depois outras pessoas.
Até mais.