У меня все получилось:)
Во-первых, это не разрешено, и нехорошо делать httprequest в главном потоке!Так что вы должны сделать это в AsyncTask!
Во-вторых, вам не нужно проверять, есть ли соединение или нет ... потому что вы можете быть подключены к локальному соединению или слишком медленное соединение!
Все, что вам нужно, это сделать http-запрос и проверить, есть ли ответ в точное время.Для этого вам нужно установить тайм-аут!Но только тайм-аут не работает - вам нужно проверить код состояния ... вот он:
class ConnectionTask extends AsyncTask<String, String, String> {
/**
* Before starting background thread set flag to false
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
flag = false;
}
boolean flag;
/**
* getting All products from url
* */
protected String doInBackground(String... args) {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
Log.v("url",url);
JSONObject json = jParser.makeHttpRequest(url, "GET", params);
/*is json equal to null ?*/
if( json != null )
{
// Check your log cat for JSON response
Log.d("json: ", json.toString());
try {
message = json.getString("message");
flag = true;//we succeded so we make the flag to true
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else
{//if json is null
message = "not connected to internet connection";
flag = false;
}
return null;
}
/**
* After completing background task check if there is connection or no
* **/
protected void onPostExecute(String file_url) {
// updating UI from Background Thread
if(flag)
{//flag is tro so there is connection
Log.v("connection", "conectioOOOOOoooOooooOoooooOOOOoooOOOOOO");
runOnUiThread(new Runnable() {
public void run() {
/**
* Updating parsed JSON data into textview
* */
TextView tvTest = (TextView) findViewById(R.id.testTextView);
tvTest.setText(message);
}
});
}
else
{////we catched that there is no connection!
Log.v("connection", "nooooooo conectioOOOOOoooOooooOoooooOOOOoooOOOOOO");
runOnUiThread(new Runnable() {
public void run() {
/*update ui thread*/
TextView tvTest = (TextView) findViewById(R.id.testTextView);
tvTest.setText("no connection");
Toast.makeText(getApplicationContext(), "No internet connection", Toast.LENGTH_LONG).show();
}
});
}
}
}
, так что теперь парсер json:)
public class JSONParser {
private InputStream is = null;
private JSONObject jObj = null;
private String json = "";
static int timeoutConnection = 10000;
static int timeoutSocket = 10000;
// constructor
public JSONParser() {
}
// function get json from url
// by making HTTP POST or GET method
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// check for request method
if(method == "POST"){
try{
HttpPost request = new HttpPost(url);
HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds until a connection is established.
// The default value is zero, that means the timeout is not used.
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds which is the timeout for waiting for data.
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
// create object of DefaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
request.addHeader("Content-Type", "application/json");
HttpResponse response = httpClient.execute(request);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
is = entity.getContent();
}
// convert entity response to string
}
catch (SocketException e)
{
e.printStackTrace();
return null;
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}else if(method == "GET"){
try{
HttpGet request = new HttpGet(url);
HttpParams httpParameters = new BasicHttpParams();
// Set the timeout in milliseconds until a connection is established.
// The default value is zero, that means the timeout is not used.
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
// Set the default socket timeout (SO_TIMEOUT)
// in milliseconds which is the timeout for waiting for data.
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
// create object of DefaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
request.addHeader("Content-Type", "application/json");
HttpResponse response = httpClient.execute(request);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
is = entity.getContent();
}
// convert entity response to string
}
catch (SocketException e)
{
e.printStackTrace();
return null;
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
Работает отлично!