发布到url的AsyncTask返回null异常

时间:2017-12-15 11:58:00

标签: android post android-asynctask

我在stackoverflow上得到了这个代码elswhere。它从一开始就不适合我。

要停止初始错误,我必须更改

protected void doInBackground(String... params) {

protected String doInBackground(String... params) {

我一直返回错误,但e.getmessage返回一个空值。

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

public CallAPI(){
    //set context variables if required
}

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


@Override

protected String doInBackground(String... params) {
    String urlString = params[0]; // URL to call

    String data = params[1]; //data to post

    OutputStream out = null;
    Log.i("doinbackground url=", urlString + data);


    try {

        URL url = new URL(urlString);

        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        out = new BufferedOutputStream(urlConnection.getOutputStream());

        BufferedWriter writer = new BufferedWriter (new OutputStreamWriter(out, "UTF-8"));

        writer.write(data);

        writer.flush();

        writer.close();

        out.close();

        urlConnection.connect();


    } catch (Exception e) {

        String ErrorMessageJ = "Error message is NULL";
        if (e.getMessage() != null ){ErrorMessageJ = e.getMessage();}
        Log.i("doinbackground e", ErrorMessageJ);




    }
    return null;

}
}

3 个答案:

答案 0 :(得分:2)

您将在null检查

中返回doInBackground 根据{{​​1}}

的参数,

可能需要Return String doInBackground AsyncTask

答案 1 :(得分:1)

异步任务由3种泛型类型定义,称为Params,Progress和Result。

如果在doInBackground()接受字符串中,则必须返回字符串值。

@Override
protected String doInBackground(String... params) {
    String urlString = params[0]; // URL to call
    private String response;;
    String data = params[1]; //data to post
    OutputStream out = null;
    Log.i("doinbackground url=", urlString + data);
    try {
        URL url = new URL(urlString);
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        out = new BufferedOutputStream(urlConnection.getOutputStream());
        BufferedWriter writer = new BufferedWriter (new OutputStreamWriter(out, "UTF-8"));
        writer.write(data);
        writer.flush();
        writer.close();
        out.close();
        urlConnection.connect();
        response= data[0];

    } catch (Exception e) {
        response=e.getMessage();
        String ErrorMessageJ = "Error message is NULL";
        if (e.getMessage() != null ){ErrorMessageJ = e.getMessage();}
        Log.i("doinbackground e", ErrorMessageJ);
    }
    return response;
}

快乐的编码!!

答案 2 :(得分:-1)

请使用Retrofit而不是通过AsyncTask进行调用。 AsyncTask是旧的,性能也很慢,并且存在内存泄漏等问题。

所以我更喜欢你使用改造。

请查看以下链接,它对您非常有用,并清除了许多关于接口的核心java的新概念。

https://www.androidhive.info/2016/05/android-working-with-retrofit-http-library/

希望这会有所帮助。