2017-12-15 15 views
-1

이 코드는 elswhere에서 가져 왔습니다. 그것은 처음부터 나를 위해 작동하지 않았다. url에 게시 할 AsyncTask가 null 예외를 반환합니다.

내가 오류를 반환 계속하지만 null 값이 e.getmessage 반환

protected String doInBackground(String... params) { 

protected void doInBackground(String... params) { 

을 변경했다 초기 오류를 중지하십시오. 당신의 null 반환하는

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; 

} 
} 
+1

당신은 null이 아닌 doInBackground의 URL을 반환합니다. – matip

답변

2

당신의 doInBackground

비동기 작업이 일반적인 3에 의해 정의된다 당신의 AsyncTask

+0

글쎄, 여전히 도움이되지 않는 문자열을 반환하려고했습니다. ** "Hello World"를 반환하십시오 ** – jim

+0

@jim 그것이 효과가 있습니까? –

+0

죄송합니다. 당신의 도움을 주셔서 감사합니다. – jim

1

당신의 doInBackground에 따라 PARAMS 일부 StringReturn 할 필요가있을 수 있습니다 확인 유형 (Params, Progress and 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; 
} 

해피 코딩 !!

-1

AsyncTask를 통해 호출하는 대신 Retrofit을 사용하십시오. AsyncTask가 오래되었고 성능 또한 느리며 메모리 누수 문제와 같은 몇 가지 단점이 있습니다.

그래서 저는 개조를 선호합니다.

아래 링크를 확인해 주시면 인터페이스와 관련하여 핵심 Java에 대한 많은 새로운 개념을 분명히 해드립니다. 이 도움이

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

희망.

+0

AsyncTask가 더 느리지 않다면 Retrofit ... retrofit은 같은 방식으로 사용될 때 메모리 누수를 일으킬 것입니다 ... 또한 개조는 AsynTask 대체가 아니며 단순한 문자열을 얻으려는 것이 좋은 선택이 아닙니다. 또한 androidhive 나쁜 refference입니다 – Selvin