0

15 分ごとに API 投稿を介してアプリケーションの詳細を更新するようにアプリケーションをセットアップする方法を知りたいです。現在、API へのアクセス中にスレッドのローダーを作成するために、get を使用してスレッドを使用する方法を知っています。

これが私がそれを行う方法です:

private int authenticateLogin()
  {
      EditText user = ((EditText)findViewById(R.id.username));
      EditText pass = ((EditText)findViewById(R.id.password));

      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

      StrictMode.setThreadPolicy(policy); 

      String username = user.getText().toString(), password = pass.getText().toString();

      String URL = "MyUrl";
      String authData = "Basic " + Base64.encodeToString((username + ":" + password).getBytes(), Base64.NO_WRAP);
      HttpClient httpclient = new DefaultHttpClient();
      HttpGet httpget = new HttpGet(URL);
      httpget.setHeader("Authorization", authData); 
      HttpResponse response = null;
        try {
            response = httpclient.execute(httpget);
            StatusLine sl = response.getStatusLine();
            int statCode = sl.getStatusCode();
            if (statCode == 200) {
                String entityStringDrivers = EntityUtils.toString(response.getEntity());
                Intent i = new Intent(Login.this,DriverLogin.class);
                i.putExtra("stringDrivers", entityStringDrivers);
                startActivity(i);
                return 100;
            }
            else
            {
                user.setText("");
                pass.setText("");
                Toast.makeText(getBaseContext(), "Unauthorized Login", Toast.LENGTH_SHORT).show(); 
                return 100;
            }
        } catch (Exception e) {
            // Auto-generated catch block
            e.printStackTrace();
            return 100;
        }
        finally {
        }

  }

投稿時にどうすればいいのか、バックグラウンドでどうすればいいのか知りたいです。15 分ごとの POST で特別に開始する場所がわかりません。何か案は?ありがとう!

4

4 に答える 4

0

このバックグラウンドを実行する場合は、サービスを作成し、メイン アクティビティの onCreate または BroadcastReceiver で開始します。

例:( try-catch またはその他の保護コードを追加する必要があります)

public class MyService extends Service {

    @Override
    public void onStartCommand(Intent intent, int flags, int startId) {
        //Use intent to pass your username and password here
        //start a PostThread here.      
    }

    private class PostThread extends Thread {
        private static final int INTERVAL = 15 * 60 * 1000L;
        private boolean canceled = false;
        @Override
        public void run() {
            while (!canceled) {
                Post();
                Thread.sleep(INTERVAL); // or you can use a Timer to trigger this 
            }            
        }
        public void interrupt() { canceled = true; super.interrupt();} 
    }
}
于 2013-09-03T02:57:49.647 に答える
0
 Timer timer = new Timer();
    timer.schedule(new TimerTask() {

        @Override
        public void run() {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    // call your api  method here
                }
            });
        }
    }, 0, /*here define your internal*/);

// when you no longer required this api call just call "cancel" method of timer
于 2013-09-03T03:36:00.917 に答える
0

これを確認して、Intent Services を使用してバックグラウンドで実行できます。

Androidタイマー、インテントサービスについては、インテントサービスをチェックしてください

于 2013-09-03T02:50:40.263 に答える