android - 我的日期更改时如何调用异步任务。?

标签 android android-asynctask

我有一个 Date Picker ,当我从 Date Picker 选择日期时,我想加载我的 asyncTask , 我的代码在这里

datepicker.setOnClickListener(new OnClickListener() {

        @SuppressWarnings("deprecation")
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            showDialog(DATE_DIALOG_ID);
        }
    });
     new ParentInputData().execute();


}

public void onStart(final Node node) {
    Looper.prepare();
}

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        // set date picker as current date
        return new DatePickerDialog(getParent().getParent().getParent(),
                datePickerListener, year, month, day);
    }
    return null;
}

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {

    // when dialog box is closed, below method will be called.
    public void onDateSet(DatePicker view, int selectedYear,
            int selectedMonth, int selectedDay) {
        year = selectedYear;
        month = selectedMonth;
        day = selectedDay;

        // set selected date into textview
        currDate.setText(new StringBuilder().append(month + 1).append("/")
                .append(day).append("/").append(year).append(" "));

        date = new StringBuilder().append(month + 1).append("/")
                .append(day).append("/").append(year).append(" ");

        currentDate = currDate.getText().toString();
         getParentInput();



    }

};
class ParentInputData extends AsyncTask<String, String, JSONObject> {


    String loginUrl = ("http://54.152.108.131/iphone111/getParentInput?child_id="+id+"&date="+date);

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

    }

    @Override
    protected JSONObject doInBackground(String... params) {
    System.out.println(loginUrl);

     JSONParser jParser = new JSONParser();
        JSONObject json = jParser.getJSONFromUrl(loginUrl);

        String nihal = json.toString();

        Log.d("JSIN RESPONSE :", nihal);

        return json;



    }

    @Override
    protected void onPostExecute(JSONObject json) {
        try {

            json_array = json.getJSONArray("CenterInfoData");
            for (int i = 0; i < json_array.length(); i++) {
                JSONObject c = json_array.getJSONObject(i);
                c = c.getJSONObject("ParentInput");

                String wake_up_time = c.getString("wake_up_time");
                String sleep_quality = c.getString("sleep_quality");
                String person_picking_child = c.getString("person_picking_child");
                String pick_up_time = c.getString("pick_up_time");
                String last_diaper_bm = c.getString("last_diaper_bm");
                String last_bottle_feeding = c.getString("last_bottle_feeding");
                String last_medication_name = c.getString("last_medication_name");
                String additional_notes = c.getString("additional_notes");

问题是如何在我的 JSON URL 中动态设置日期以在我从日期选择器中选择日期时获取数据。请帮助我。

我的 LogCat 详细信息在这里

01-20 05:08:34.547: E/AndroidRuntime(11352): FATAL EXCEPTION: AsyncTask #1
01-20 05:08:34.547: E/AndroidRuntime(11352): Process: com.MyKidzDay, PID: 11352
01-20 05:08:34.547: E/AndroidRuntime(11352): java.lang.RuntimeException: An error occured while executing doInBackground()
01-20 05:08:34.547: E/AndroidRuntime(11352):    at android.os.AsyncTask$3.done(AsyncTask.java:300)
01-20 05:08:34.547: E/AndroidRuntime(11352):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
01-20 05:08:34.547: E/AndroidRuntime(11352):    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
01-20 05:08:34.547: E/AndroidRuntime(11352):    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
01-20 05:08:34.547: E/AndroidRuntime(11352):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
01-20 05:08:34.547: E/AndroidRuntime(11352):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
01-20 05:08:34.547: E/AndroidRuntime(11352):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
01-20 05:08:34.547: E/AndroidRuntime(11352):    at java.lang.Thread.run(Thread.java:841)
01-20 05:08:34.547: E/AndroidRuntime(11352): Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 75: http://54.152.108.131/iphone111/getParentInput?child_id=6272&date=1/20/2016 
01-20 05:08:34.547: E/AndroidRuntime(11352):    at java.net.URI.create(URI.java:727)
01-20 05:08:34.547: E/AndroidRuntime(11352):    at org.apache.http.client.methods.HttpPost.<init>(HttpPost.java:79)
01-20 05:08:34.547: E/AndroidRuntime(11352):    at com.MykidzDayUpdate.JSONParser.getJSONFromUrl(JSONParser.java:36)
01-20 05:08:34.547: E/AndroidRuntime(11352):    at com.KidsTabs.KidSummary$ParentInputData.doInBackground(KidSummary.java:1674)
01-20 05:08:34.547: E/AndroidRuntime(11352):    at com.KidsTabs.KidSummary$ParentInputData.doInBackground(KidSummary.java:1)
01-20 05:08:34.547: E/AndroidRuntime(11352):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
01-20 05:08:34.547: E/AndroidRuntime(11352):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
01-20 05:08:34.547: E/AndroidRuntime(11352):    ... 4 more

最佳答案

How to set date dynamically in my JSON URL to get data when I select date from date Picker

OnDateSetListeneronDateSet 方法中调用 ParentInputData().execute() 并将更新的 url 作为参数传递给 execute 方法如:

   public void onDateSet(DatePicker view, int selectedYear,
            int selectedMonth, int selectedDay) {
       ....your code here

        date = new StringBuilder().append(month + 1).append("/")
                .append(day).append("/").append(year).append(" ");
       String loginUrl="...?child_id="+id+"&date="+URLEncoder.encode(date.toString());
       ParentInputData().execute(loginUrl);
       ....your code here
    }

现在在 doInBackground 中使用 params[0] 获取 url :

    @Override
    protected JSONObject doInBackground(String... params) {

    JSONParser jParser = new JSONParser();
    JSONObject json = jParser.getJSONFromUrl(params[0]);
    ....
  }

关于android - 我的日期更改时如何调用异步任务。?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34896374/

相关文章:

Android gradle 项目构建非常缓慢

java - android 异步启动屏幕不显示内容 View

android - AsyncTask 和 Thread 之间的真正区别

android - 机器人 :name attribute in the <fragment>

java - 三星 Galaxy S4 的 Avd 无法正常工作

java - BG 音乐重播

android - ListView header 占据一个位置是否有充分的理由?

android - 使用 viewpager + imageview 时出现内存不足错误,即使使用缓存内存和异步任务也是如此

android - 异步任务奇怪的行为

android - ASynctask 的doInBackground() 中return 语句的作用是什么?