Como você postou não menciona um arquivo PHP funcional, vou incluí-lo por uma questão de completude. Este pode ser um longo (longo ) publicar....
Então, primeiro. Este é um exemplo de um arquivo PHP que é armazenado com o nome my_test.php neste local:
c:\wamp\www\some_folder_name\my_test.php
(Veja o histórico de edição do código ) Agora, deixe-me explicar as partes importantes deste PHP. Esses parâmetros devem ser configurados para usar suas configurações:
$DB_HOST = 'YOUR_IP_ADDRESS';
$DB_UNAME = 'MYSQL_USERNAME';
$DB_PWD = 'MYSQL_USER'S_PASSWORD';
$DB_DATABASE = 'DATABASE_NAME';
O endereço IP deve ser localhost ou o endereço IP do computador que hospeda o banco de dados MySQL. De preferência um endereço IP para que você possa testar em dispositivos físicos. usando localhost funcionaria apenas em dispositivos virtuais.
O próximo passo é adicionar as colunas a um array que irá construir um único registro (linha ) na resposta JSON. Dê uma olhada nesta linha por exemplo:
$stuff["id"] = $row['id'];
O
$stuff["id"]
basicamente se tornará a tag no objeto JSON resultante, enquanto o $row['id']
é o que indica o nome da coluna da tabela do seu banco de dados. Portanto, o $row["...."]
deve ser idêntico aos nomes das colunas na tabela DB. Enquanto o $stuff["...."]
pode ser qualquer coisa. Desde que faça sentido para você. Esta linha
echo(json_encode($response));
irá converter a resposta em um formato JSON. Agora vamos ver o código Java. Em primeiro lugar, há uma classe que o ajudará a analisar o resultado. Foi retirado um tutorial de um site (não lembro qual ). Basta copiar e colar o seguinte código em uma classe Java. Não há necessidade de alterar nada neste arquivo. Dê uma boa leitura para entender como ele funciona. Eu o nomeei JSONParser (Veja o histórico de edição do código ):
Finalmente, como obter o JSON resultante e analisá-lo em uma
Activity
/ Fragment
. Eu analiso os dados em um
AsyncTask
, que é necessário de qualquer maneira, considerando que você estará executando uma operação de rede. (Veja o histórico de edição do código ) Pontos a serem observados neste Java:
- Esta
String URL_TO_PHP = "http://IP_ADDRESS/some_folder_name/my_test.php";
precisa ter um endereço IP como 192.168.0.x ou se você estiver testando em um dispositivo virtual, deve ser 10.0.2.2 . Quanto mais cedo (192.. ) não funcionará em um emulador e o posterior (10.0... ) não funcionará em um dispositivo físico. - Neste:
String TAG_STUFF = "stuff";
, o"stuff"
corresponde a isso do arquivo PHP:$response["stuff"] = array();
. OTAG_STUFF
deve basicamente usar o que está em$response["stuff"]
.
Espero que tudo o que foi dito acima faça sentido. Comente se precisar de ajuda.;-)
ATUALIZADO COM SOLUÇÃO DE FUNCIONAMENTO:
Isso é muito estranho mesmo. Mas, eu tenho uma solução de trabalho. Ao usar o código do OP, o aplicativo realmente trava. Por falta de tempo para testar por que ele trava, estou postando uma solução diretamente.
Primeiro, em vez de manter
testing
como uma classe independente, crie-a como uma classe interna de volta ao MainActivity
. class testing extends AsyncTask<Void, Void, Void> {
....
}
Segundo, declare as variáveis globalmente (o
jParser
, URL_TO_PHP
, etc ), em comparação com as declarações atuais antes do onPreExecute()
. Veja a solução completa abaixo para maior clareza... public class MainActivity extends Activity {
JSONParser jParser;
String URL_TO_PHP = "http://testbox.site50.net/test.php";
String TAG_SUCCESS = "success";
String TAG_STUFF = "stuff";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
....
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
new testing().execute();
break;
default:
break;
}
}
private class testing extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... args) {
/* Building Parameters */
List<NameValuePair> params = new ArrayList<>();
/* getting JSON string from URL */
JSONObject json = jParser.makeHttpRequest(URL_TO_PHP, "GET", params);
try {
/* Checking for SUCCESS TAG */
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
JSONArray JAStuff = json.getJSONArray(TAG_STUFF);
/** CHECK THE NUMBER OF RECORDS **/
int intStuff = JAStuff.length();
if (intStuff != 0) {
for (int i = 0; i < JAStuff.length(); i++) {
JSONObject JOStuff = JAStuff.getJSONObject(i);
Log.e("ALL THE STUFF", JOStuff.toString());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}
}
Durante o teste, também tirei uma captura de tela dos resultados. Aqui está:
Novamente, como estou um pouco esticado no momento, não poderei descobrir o que realmente está causando a falha no código do OP. Mas é intrigante o suficiente para descobrir ..