【问题标题】:I can not get result from AsyncTask?我无法从 AsyncTask 获得结果?
【发布时间】:2014-07-17 10:23:13
【问题描述】:

这段代码是真的吗?我正在使用 AsyncTask 获取结果,但看不到任何结果,我正在使用 WampServer。我认为我的错误逻辑在我的getter/setter 中:

public class NotesActivity extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
                WebPageTask task = new WebPageTask();
                task.execute(new String[] { "http://192.168.5.170:8081/note-server/" });
    }

    private class WebPageTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... urls) {
            String response = "";
            for (String url : urls) {
                DefaultHttpClient client = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(url);
                try {
                    HttpResponse execute = client.execute(httpGet);
                    InputStream content = execute.getEntity().getContent();

                    BufferedReader buffer = new BufferedReader(
                            new InputStreamReader(content));
                    String s = "";
                    while ((s = buffer.readLine()) != null) {
                        response += s;
                    }

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

        @Override
        protected void onPostExecute(String result) {
            ArrayList<StructTask> nettasks = new ArrayList<StructTask>();
            JSONObject object = null;
            JSONArray tasks = null;
            StructTask task = new StructTask();
            try {
             tasks = new JSONArray(result);
                for (int i = 0; i < tasks.length(); i++) {
                    object = tasks.getJSONObject(i);

                    task.setid(object.getLong("task_id"));
                    task.settitle(object.getString("task_title"));
                    task.setdesc(object.getString("task_desc"));
                    task.settone(object.getBoolean("task_done"));
                    nettasks.add(task);
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
            Log.i("LOG","dd");
            for (StructTask taskesss : nettasks) {
                Log.i("LOG", "Taskes: " + taskesss.getid()+"|"+taskesss.gettitle()+"|"+taskesss.getdesc() + "-" + taskesss.getdone());
            }

        }
    }
}

这是Getter/Setter 中的StructTask.java。我认为我的class getter/setter 有逻辑错误:

public class StructTask {
    private long id;
    private String title;
    private String desc;
    private boolean done;

    public long getid() {
        return this.id;
    }

    void setid(long id) {
        this.id = id;
    }

    public String gettitle() {
        return this.title;
    }

    void settitle(String title) {
        this.title = title;
    }

    public String getdesc() {
        return this.desc;
    }

    void setdesc(String desc) {
        this.desc = desc;
    }

    public boolean getdone() {
        return this.done;
    }

    void setdone(boolean done) {
        this.done = done;
    }
}

下面的代码不返回任何结果:

    for (StructTask taskesss : nettasks) {
        Log.i("LOG", "Taskes: " + taskesss.getid()+"|"+taskesss.gettitle()+"|"+taskesss.getdesc() + "-" + taskesss.getdone());
    }

这是我的 sql 页面:

【问题讨论】:

  • 这是什么错误?你从哪里得到的?
  • 你能在你的安卓浏览器中获取 URL 吗??
  • log.i 的值是多少,值设置是否正确?
  • 是的,我可以获取 URL 等。我知道我的逻辑错误在 :task.setid(object.getLong("task_id")); task.settitle(object.getString("task_title")); task.setdesc(object.getString("task_desc")); task.settone(object.getBoolean("task_done")); nettasks.add(task);

标签: java android mysql multithreading android-asynctask


【解决方案1】:

你的代码是真的。但是:

1- 在您的getter/setter 班级中:

private boolean done;
public boolean getdone() {
    return this.done;
}

void setdone(boolean done) {
    this.done = done;
}

改为:

private int done;
public int getdone() {
    return this.done;
}

void setdone(int done) {
    this.done = done;
}

2- 并更改为:

.....你的代码...

@Override
protected void onPostExecute(String result) {
    ArrayList<StructTask> nettasks = new ArrayList<StructTask>();
    try {
        JSONArray tasks = new JSONArray(result);
        for (int i = 0; i < tasks.length(); i++) {
            JSONObject object = tasks.getJSONObject(i);
            StructTask task = new StructTask();
            task.setid(object.getLong("task_id"));
            task.settitle(object.getString("task_title"));
            task.setdesc(object.getString("task_desc"));
            task.setdone(object.getInt("task_done"));
            nettasks.add(task);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

...您的代码...

3- 并使用Thethering &amp; Wi-Fi hotspot 连接到您的电脑和安卓,此选项在您的setting 手机中,然后通过 Wi-Fi 电脑连接到您的手机。现在你可以看到你最喜欢的结果了。

好看

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    相关资源
    最近更新 更多