Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中使用命令模式并结合Http请求处理程序来处理其结果_Java_Android_Command Pattern - Fatal编程技术网

Java 在Android中使用命令模式并结合Http请求处理程序来处理其结果

Java 在Android中使用命令模式并结合Http请求处理程序来处理其结果,java,android,command-pattern,Java,Android,Command Pattern,我的实际问题在页面底部,可能不需要您查看我的所有代码 因此,我想在我的Android应用程序中使用命令模式。我有一个类HttpRequestHandler,它扩展了AsyncTask,因此有doInBackground和onPostExecute方法HttpRequestHandler将URL和HttpRequest类型作为参数 我想做的是将一个方法(以接口的形式)传递给HttpRequestHandler,以便在onPostExecute中调用该方法,并让它在给定的textview中显示从Ht

我的实际问题在页面底部,可能不需要您查看我的所有代码

因此,我想在我的Android应用程序中使用命令模式。我有一个类
HttpRequestHandler
,它
扩展了AsyncTask
,因此有
doInBackground
onPostExecute
方法
HttpRequestHandler
将URL和HttpRequest类型作为参数

我想做的是将一个方法(以接口的形式)传递给
HttpRequestHandler
,以便在
onPostExecute
中调用该方法,并让它在给定的textview中显示从Http请求获得的结果。这样我就不必在我的
onPostExecute

不过我需要一些帮助来执行死刑。在本例中,我有两个单独的类来实现命令

public interface Command{
    public void execute(JSONObject json);
}

public class DisplayResult implements Command{

    public TextView textview;

    public DisplayResult(TextView textview){
        this.textview = textview;
    }
    @Override
    public void execute(JSONObject output){
        textview.setText(output.getString("mystring")
    }
}

public class ConfirmPost implements Command{

    public ConfirmPost(){
    }
    @Override
    public void execute(JSONObject output){
        Log.d("Success! ","POST successfull");
    }
}
两个调用
HTTPRequestHandler
,一个调用传递
DisplayResult
,另一个调用传递
ConfirmPost
类。 公共静态空间

TextView mytextview = (TextView) findViewById(R.id.mytextview);
new HttpRequestHandler(new DisplayResult(mytextview)).execute("myurl","GET");

new HttpRequestHandler(new ConfirmPost()).execute("myurl","POST");
现在,问题出在我的
HttpRequestHandler

public class HttpRequestHandler extends AsyncTask<String, String, String>{
Command presenter;

    Public HttpRequestHandler(Object presenter){    
        this.presenter = (Command) presenter;
    }

    Public String doInBackground(String... uri){
       ...
    }

    Public onPostExecute(String result){
        presentation = new JSONObject(result);
        presenter.execute();
    }

这一切都很好,我似乎可以将任何旧的
命令实现传递给它,但我似乎无法在网上找到任何具有相同语法或功能的引用。我听过一些关于工厂模式的介绍,但我觉得命令模式并不依赖于其他模式来实现这样的功能。任何方向都行。

事实上,这是泛型的问题。通过使用
T
extend
Command
,我可以确保我的参数将是
Command

HttpRequestHandler
现在应该是这样的

public class HttpRequestHandler extends AsyncTask<String, String, String>{

    Command presenter;

    public <T extends Command> HttpRequestHandler(T presenter){
        this.presenter =  presenter;
    }

    presenter.execute("Success!");
}
公共类HttpRequestHandler扩展异步任务{
指挥演示者;
公共HttpRequestHandler(T演示者){
this.presenter=演示者;
}
执行(“成功!”);
}

不需要可怕的演员阵容。

结尾的“温柔”部分显示了一个初学者是多么害怕提出可能有意义的问题,这是因为一些头脑发热的人赢得了良好的声誉,但没有体面。这是一个信号,伙计们。“温柔一点”我刚刚问了那么多关于编程的看似无害的问题,结果却因为一些真正愚蠢的事情而受到严厉的谴责。
public class HttpRequestHandler extends AsyncTask<String, String, String>{

    Command presenter;

    public <T extends Command> HttpRequestHandler(T presenter){
        this.presenter =  presenter;
    }

    presenter.execute("Success!");
}