Olá Experts!
Sei que já tem um tópico aqui de 12/2017:
No qual ninguém respondeu, pode ser que porque tem muito material e porque o cara só colocou sua duvida, porém eu já tenho o app feito mas não estou conseguindo fazer a comunicação, poderia por gentileza me auxiliar?
Tenho na MainActivity:
package br.com.claytoncalixto.seemyobject;
//Vesão do Projeto 30042018_14_43
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONObject;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Timer;
public class MainActivity extends AppCompatActivity {
Calendar calander;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss",Locale.getDefault());
TextView txtToken, txtLatitude, txtLongitude, txtAltitude, txtData_Hora;
String data_hora, curDay, curTime, data, horas, d, m, a, hor, min, sec;
Thread iniReloj = null;
Runnable r;
boolean isUpdate = false;
int dia, mes, ano, hora = 0, minuto = 0, segundo = 0;
String strData;
Timer timer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtToken = (TextView)findViewById(R.id.txtToken);
txtLatitude = (TextView)findViewById(R.id.txtLatitude);
txtLongitude = (TextView)findViewById(R.id.txtLongitude);
txtAltitude = (TextView)findViewById(R.id.txtAltitude);
txtData_Hora = (TextView)findViewById(R.id.txtData_Hora);
r = new RefreshClock();
iniReloj = new Thread(r);
iniReloj.start();
calander = Calendar.getInstance();
simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.getDefault( ));
data_hora = simpleDateFormat.format(calander.getTime());
txtData_Hora.setText(data_hora);
pedirPermissoes();
//new Reminder(1);
//new RemindTask();
// ItsTime sdf = new ItsTime();
// strData = sdf.initClock();
//ItsTime sdf = new ItsTime();
//strData = new ItsTime.Reminder(1);
//txtData_Hora.setText(strData);
txtToken.setText("SMO_0001");
}
/*No método pedirPermissoes():
O IF verifica se o app já possui permissão para a cessar a localização do usuário:
- FINE = localização precisa.
- COARSE = localização imprecisa.
Se já tiver permissão, chama o metodo configurarServiço().
*/
private void pedirPermissoes(){
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION},1);
}
else
configurarServico();
}//pedirPermissoes
/*O método onRequestPermissionsResult():
* Vai disparar para o usuário uma solicitação padrão de perimissão, informando qual o app esta pedindo a permissão.
* Para que se possa capturar a reposta do usuário, deve-se sobrescrever o metodo onRequestPermissionResult
* */
public void onRequestPermissionResult(int requestCode,
String permission[], int[] grantResults){
switch (requestCode){
case 1:{
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
configurarServico();
}else{
Toast.makeText(this, "Não vai funcionar!!!",Toast.LENGTH_LONG).show();
}
return;
}
}
}//onRequestPermissionResult
/*Método configurarServico():
* Lê o serviço do GPS do Android, invocando o objeto LocationManager.
* Ele carrega o serviço de localização do dispositivo.
* O listener ficará atento as mudanças do GPS e fará um refresh na tla
* */
public void configurarServico(){
try{
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new LocationListener() {
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onLocationChanged(Location location) {
atualizar(location);
}
public void onStatusChanged (String provider, int status, Bundle extras){}
public void onProviderEnabled(String provider) { }
public void onProviderDisabled(String provider){}
};
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);
}catch (SecurityException ex){
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}
}//configurarServico
/*Método atualizar():
* No Atualizar(), pega o método Location enviado pelo serviço de GPS.
* Estas informções são enviadas para os TextViews contido no metodo.
* */
public void enviDados(Localization localization){
//txtLatitude.setText(String.valueOf(txtAltitude.getText()));
// localization.doInBackGround(txtToken.toString());
// localization.doInBackGround(txtLatitude.toString());
// localization.doInBackGround(txtLongitude.toString());
// localization.doInBackGround(txtAltitude.toString());
// localization.doInBackGround(txtData_Hora.toString());
//RequestQueue queue = Volley.newRequestQueue(this);
//String HttpURL = "http://localhost/www/insertDevice.php";
String HttpURL = "http://claytoncalixto.orgfree.com/insertDevice.php";
//String HttpURL = "http://127.0.0.1/www/insertDevice.php";
//Connected to the target VM, address: 'localhost:8622', transport: 'socket'
StringRequest postRequest = new StringRequest(Request.Method.POST, HttpURL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
return;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
return;
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> postDataParams = new HashMap<String, String>();
postDataParams.put("token", txtToken.getText().toString());
postDataParams.put("latitude", txtLatitude.getText().toString());
postDataParams.put("longitude", txtLongitude.getText().toString());
postDataParams.put("altitude", txtAltitude.getText().toString());
postDataParams.put("data_hora", txtData_Hora.getText().toString());
new Localization().execute(String.valueOf(postDataParams));
return postDataParams;
}
};
}
@RequiresApi(api = Build.VERSION_CODES.O)
public void atualizar(Location location){
Double latPoint = location.getLatitude();
Double lngPoint = location.getLongitude();
Double altPoint = location.getAltitude();
txtLatitude.setText(latPoint.toString());
txtLongitude.setText(lngPoint.toString());
txtAltitude.setText(altPoint.toString());
RequestQueue queue = Volley.newRequestQueue(this);
String HttpURL = "http://localhost/www/insertDevice.php";
//String HttpURL = "http://claytoncalixto.orgfree.com/insertDevice.php";
//String HttpURL = "http://127.0.0.1/www/insertDevice.php";
//Connected to the target VM, address: 'localhost:8622', transport: 'socket'
StringRequest postRequest = new StringRequest(Request.Method.POST, HttpURL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
return;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
return;
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> postDataParams = new HashMap<String, String>();
postDataParams.put("token", txtToken.getText().toString());
postDataParams.put("latitude", txtLatitude.getText().toString());
postDataParams.put("longitude", txtLongitude.getText().toString());
postDataParams.put("altitude", txtAltitude.getText().toString());
postDataParams.put("data_hora", txtData_Hora.getText().toString());
return postDataParams;
}
};
// Add the request to the RequestQueue.
queue.add(postRequest);
// HttpURL = "http://my-json-feed";
// HttpURL = "http://localhost/www/insertDevice.php";
//HttpURL = "http://claytoncalixto.orgfree.com/insertDevice.php";
//HttpURL = "http://127.0.0.1/www/insertDevice.php";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
(Request.Method.POST, HttpURL, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Map<String, String> postDataParams = new HashMap<String, String>();
postDataParams.put("token", txtToken.getText().toString());
postDataParams.put("latitude", txtLatitude.getText().toString());
postDataParams.put("longitude", txtLongitude.getText().toString());
postDataParams.put("altitude", txtAltitude.getText().toString());
postDataParams.put("data_hora", txtData_Hora.getText().toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO: Handle error
}
});
// Access the RequestQueue through your singleton class.
///MySingleton.getInstance(this).addToRequestQueue(jsonObjectRequest);
}//atualizar
/**
* Método initClock():
* Basicamente, é aquele que faz a limpeza do layout a cada segundo, um simples IF é o
* que identifica se é atualizado o tempo de ajustes, se tiver que seguir
* mostrando a hora atual, o isUpdate mostra o valor que foi enviado da classe.
*/
private void initClock() {
runOnUiThread(new Runnable() {
public void run() {
try {
if (isUpdate) {
settingNewClock();
} else {
updateTime();
}
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.getDefault());
String strDate = sdf.format(cal.getTime());
txtData_Hora.setText(strDate);
} catch (Exception e) {
}
}
});
}
/*Classe RefreshClock{}:
Class RefreshLock in java.lang.Object
http://jade.cselt.it/wade/doc/api/index.html?com/tilab/wade/lock/LockTableImpl.html
*/
/**
* Método settingNewClock():
* É o responsável em passar a hora de modo que quando atinge as 24:59:59 retorna os valores de 00:00:00,
* embora na prática como mencionado em um comentário anterior, este é definido como 0: 0: 0, mas depois restaurado para
* 00:00:01
*/
private void settingNewClock() {
segundo += 1;
setZeroClock();
if (segundo >= 0 & segundo <= 59) {
} else {
segundo = 0;
minuto += 1;
}
if (minuto >= 0 & minuto <= 59) {
} else {
minuto = 0;
hora += 1;
}
if (hora >= 0 & hora <= 24) {
} else {
hora = 0;
}
}
/**
* Método updateTime():
* Este é o método inicial do relógio, a partir do qual o tempo é exibido cada segundo é o Java.Util.Calendar
*/
private void updateTime() {
Calendar c = Calendar.getInstance();
dia = c.get(Calendar.DAY_OF_MONTH);
mes = c.get(Calendar.MONTH);
ano = c.get(Calendar.YEAR);
hora = c.get(Calendar.HOUR_OF_DAY);
minuto = c.get(Calendar.MINUTE);
segundo = c.get(Calendar.SECOND);
setZeroClock();
}
/**
* Método setZeroClock():
* É definir o número 0 nesses valores menores que 10, mas não consegui resolver um pequeno inconveniente no momento da chegada
* de 0: 0: 0, portanto, em seus derivados, embora não seja por falta de lógica, revisei muito bem, mas se encontrar
* um arranjo melhor, atualizo este método.
*/
private void setZeroClock() {
if (hora >= 0 & hora <= 9) {
hor = "0";
} else {
hor = "";
}
if (minuto >= 0 & minuto <= 9) {
min = ":0";
} else {
min = ":";
}
if (segundo >= 0 & segundo <= 9) {
sec = ":0";
} else {
sec = ":";
}
}
class RefreshClock implements Runnable {
//@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
initClock();
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} catch (Exception e) {
}
}
}
}
}//MaiActivity
E a classe Locatiozation.java(mas não sei se tudo isso esta certo e como consigo testar sem ser pelo web service para até mapear onde funciona):
package br.com.claytoncalixto.seemyobject;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
class Localization extends AsyncTask<String, String, String> {
//String HttpURL = "http://localhost/www/insertDevice.php";
private String strToken = "", strLatitude = "", strLongitude = "", strAltitude = "", strData_Hora = "";
private ProgressDialog pDialog;
private HTTPURLConnection service;
private JSONObject json;
private int sucess = 0;
String response = "";
//Create hashmap Object to send parameters to web service
HashMap<String, String> postDataParams;
@Override
protected String doInBackground(String... strings) {
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
try{
URL url = new URL("http://claytoncalixto.orgfree.com/insertDevice.php");
//URL url = new URL("http://localhost/www/insertDevice.php");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.connect();
postDataParams = new HashMap<String, String>();
postDataParams.put("token", strToken);
postDataParams.put("latitude", strLatitude);
postDataParams.put("longitude", strLongitude);
postDataParams.put("altitude", strAltitude);
postDataParams.put("data_hora", strData_Hora);
//Call ServerData() method to call webservice and store result in response
//response = service.ServerData(HttpURL, postDataParams);
try {
json = new JSONObject(response);
//Get Values from JSONObject
System.out.println("sucesso=" + json.get("sucesso"));
sucess = json.getInt("sucesso");
} catch (JSONException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
if (urlConnection != null) {
urlConnection.disconnect();
}
}
return null;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog.setMessage("Aguarade...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (pDialog.isShowing()) {
pDialog.dismiss();
}
if (sucess == 1) {
//Toast.makeText(getApplicationContext(), "Dados adicionados com sucesso!!!", Toast.LENGTH_LONG).show();
}
}
}