ورود

View Full Version : تکرار عملhttppostهر چند ثانیه یه بار



kavakeb
سه شنبه 22 اردیبهشت 1394, 00:59 صبح
باسلام
من یه برنامه نوشتم که با httppost درمقدار عددی رابه یه صفحه php میفرسته در اونجا باهم جمعذ میشن وجواب به برنامه فرستاده میشه
من میخوام به این کدها تایمر اضافه بکنم یعنی هر چن ثانیه یه بار سرور رو پک بکنه


package com.mayahi.httppost;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity ;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;


import android.support.v7.app.ActionBarActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;




public class HttpPostActivity extends ActionBarActivity {


Timer timer=new Timer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_http_post);


new NetCheck().execute();


}

private class NetCheck extends AsyncTask<String,String,Boolean>
{
private ProgressDialog nDialog;


@Override
protected void onPreExecute(){
super.onPreExecute();
nDialog = new ProgressDialog(HttpPostActivity.this);
nDialog.setTitle("Checking Network");
nDialog.setMessage("Loading..");
nDialog.setIndeterminate(false);
nDialog.setCancelable(true);
nDialog.show();
}
/**
* Gets current device state and checks for working internet connection by trying Google.
**/
@Override
protected Boolean doInBackground(String... args){


ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected()) {
try {
URL url = new URL("http://www.google.com");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(3000);
urlc.connect();
if (urlc.getResponseCode() == 200) {
return true;
}
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return false;


}
@Override
protected void onPostExecute(Boolean th){


if(th == true){
nDialog.dismiss();
new GetData().execute();
}
else{
nDialog.dismiss();
Toast.makeText(getApplicationContext(), "Error in Network Connection", Toast.LENGTH_SHORT).show();
}
}
}


/**
* Async Task to get data from URL
**/
private class GetData extends AsyncTask<String, String, String> {


private ProgressDialog pDialog;
private InputStream is = null;
private String url = "http://www.w100.ir/php/httppostandroid.php";
private String page_output = "";


@Override
protected void onPreExecute() {
super.onPreExecute();


pDialog = new ProgressDialog(HttpPostActivity.this);
pDialog.setTitle("Contacting Servers");
pDialog.setMessage("Logging in ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}


@Override
protected String doInBackground(String... args) {


try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("num1", "3"));
params.add(new BasicNameValuePair("num2", "27"));
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));


HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
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();
page_output = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}

return page_output;
}


@Override
protected void onPostExecute(String page_output) {
pDialog.dismiss();
try {
// display output of internet page (page_output string)
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(page_output);

} catch (Exception e) {
e.printStackTrace();
}
}
}


}





کدی که کن پیدا کردم اینه


Timer timer=new Timer();
timer.schedule(new TimerTask(){

@Override
public void run() {
// TODO Auto-generated method stub

}


},1000);

این تایمرهریک ثانیه یکبار عملی را انجام می دهد و این کار را ده بار انجام می دهد
ولی نمیدونم کجای برنامه ازش استفاده بکنم

JYasProgramer
سه شنبه 22 اردیبهشت 1394, 08:23 صبح
به نظر من در متد تایمر متد HttpPostActivity رو فراخونی کن و مدت زمان چرخه تایمر رو 5 ثانیه قرار بده

kavakeb
سه شنبه 22 اردیبهشت 1394, 20:22 عصر
اول از همه ممنون بابت جوابتون

یعنی این شکلی




timer.schedule(new TimerTask(){Timer timer = new Timer();
timer.schedule(new TimerTask() {


@Override
public void run() {

// DO some thing
httppost().execute();
}

},1000);

یه سوال دیگه اینکه کجای برنامه بذارم اینو

JYasProgramer
چهارشنبه 23 اردیبهشت 1394, 08:08 صبح
بهتره داخل یک اسینک تسک یک نمونه از کلاس بسازی و داخل اون اسینک تسک متد اصلی کلاس رو فراخونی کنی و او اسینک تسک رو داخل یک تایمر هر چند ثانیه فراخونی کنی
البته راه های بهتری هم میتونه وجود داشته باشه

kavakeb
جمعه 25 اردیبهشت 1394, 23:12 عصر
من توی اکتیویتی main این تایع رو گذاشتک و درست کارکرد .گفتم بذارم اینجا اگر کسی میخواست.

timer.scheduleAtFixedRate(new TimerTask() {

@Override
public void run() {

runOnUiThread(new Runnable() {
public void run() {
​// DO some thing

}
});

}
}, 1000, 100000);