2017-02-23 43 views
2

我想回忆一下12分钟后,谁得到我的JSON时间的活动,但我不知道如何使用timertask和timershedule你能帮我吗? 我尝试这一点,但不是工作 我的程序:回想一个活动

public class recuperationJson extends AppCompatActivity implements getData.ReturnValue { 
private getData data; 
private TextView t; 
private String json_string; 
private String json_url = "http://192.168.0.14/projet/php/fichier.php"; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    data = new getData(json_url); 
    data.setReturnListener(this); 
    data.execute((Void) null); 

    Timer timer = new Timer(); 
    timer.scheduleAtFixedRate(new Testing(), 0,5000); 
} 

@Override 
public String renvoyerValeurString(String valeurARenvoyer) { 
    data = null; 
    //Ici je récupère directement mon json contenu dans la variable valeurARenvoyer 
    json_string = valeurARenvoyer; 
    Intent intent = new Intent(this,Accueil.class); 
    intent.putExtra("json_data", json_string); 
    startActivity(intent); 
    // Toast.makeText(this, json_string, Toast.LENGTH_SHORT).show(); 
    return json_string; 
} 
public class Testing extends TimerTask { 
    public void run() { 
     Toast.makeText(recuperationJson.this, "test", Toast.LENGTH_SHORT).show(); 
    } 
} 

我的日志

E/AndroidRuntime: FATAL EXCEPTION: Timer-0 
       Process: com.suprem.projetfinal, PID: 3196 
       java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
        at android.os.Handler.<init>(Handler.java:200) 
        at android.os.Handler.<init>(Handler.java:114) 
        at android.widget.Toast$TN.<init>(Toast.java:344) 
        at android.widget.Toast.<init>(Toast.java:100) 
        at android.widget.Toast.makeText(Toast.java:258) 
        at com.suprem.projetfinal.recuperationJson$Testing$override.run(recuperationJson.java:48) 
        at com.suprem.projetfinal.recuperationJson$Testing$override.access$dispatch(recuperationJson.java) 
        at com.suprem.projetfinal.recuperationJson$Testing.run(recuperationJson.java:0) 
        at java.util.Timer$TimerImpl.run(Timer.java:284) 
+0

你只是想分析或得到其持续12分钟大数据?或者在12分钟后运行代码? – mismanc

回答

1

这对我的作品。在调用课程安排你的计时器。

 Timer timer = new Timer(); 

     timer.scheduleAtFixedRate(new Testing(), 0,5000); 
在测试类

执行你的活动

 import java.util.TimerTask; 


     public class Testing extends TimerTask 
     { 

    public void run() 
    { 
     //your task here 
    } 
    } 

Timer未一旦服务器获得关机或重新启动工作。最好使用石英。

+0

我用你的方法编辑我的帖子,但不是线程的工作原因,你能帮助我吗? –

0

有两种方法提出我的想法。

1 - 处理器

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     System.out.println("RUN AFTER 12 minutes"); 

    } 
}, 12*60*1000); 

2 - AlarmManager

BroadcastReceiver receiver = new BroadcastReceiver() { 
      @Override public void onReceive(Context context, Intent _) 
      { 
       System.out.println("RUN AFTER 12 minutes"); 
       context.unregisterReceiver(this); 
      } 
     }; 

     registerReceiver(receiver, new IntentFilter("message")); 

     PendingIntent pintent = PendingIntent.getBroadcast(this, 0, new Intent("message"), 0); 
     AlarmManager manager = (AlarmManager)(this.getSystemService(Context.ALARM_SERVICE)); 

     // set alarm to fire 
     manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60*1000*12, pintent);