2017-01-01 3 views
0

클래스를 만들고 AsyncTask로 확장했습니다. 이제이 클래스를 throw하는 다른 활동으로 문자열을 반환하고 싶습니다. 그 MySQL의에서 jsonstring 점점AsyncTask에서 다른 활동으로 문자열을 반환하는 방법

enter code here 

public class GetJson extends AsyncTask<Void,Void,String> { 
String JSON_STRING; 
String json_url; 
public String pasString; 
Activity ab; 
@Override 
protected void onPreExecute() { 
    json_url="https://XXXXXXX.000webhostapp.com/Json_getData_Survey.php"; 
} 

public GetJson(Activity b) { 
    ab=b; 
} 

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

    try { 
     URL url =new URL(json_url); 
     HttpURLConnection httpURLConnection =(HttpURLConnection) url.openConnection(); 
     InputStream inputStream =httpURLConnection.getInputStream(); 
     BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream)); 
     StringBuilder stringBuilder=new StringBuilder(); 

     while ((JSON_STRING=bufferedReader.readLine())!=null) 
     { 

      stringBuilder.append(JSON_STRING+"\n"); 
     } 


     bufferedReader.close(); 
     inputStream.close(); 
     httpURLConnection.disconnect(); 

     String strings =stringBuilder.toString().trim(); 
     return strings; 

    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

@Override 
protected void onProgressUpdate(Void... values) { 
    super.onProgressUpdate(values); 
} 

@Override 
protected void onPostExecute(String result) { 

    pasString=result; 

    // Toast.makeText(ab,pasString,Toast.LENGTH_LONG).show(); 
    // json_string1=result; 
} 

} 난 그냥 내 다른 활동에 문자열 1을 반환해야

, 난이 문자열을 반환해서 getJSON 클래스의 또 다른 mehtod을 creaetd 한 mDatabase하지만 난이를 표시 할 때 그것은 아무것도 표시되지 그 안에. 도와주세요

+0

AsyncTask뿐만 아니라 좀 더 많은 코드를 게시 할 수 있다면 도움이 될 것입니다. – Distjubo

+2

[인터페이스를 사용한 통신] (https://developer.android.com/training/basics/fragments/communicating.html) 및 [LocalBroadCastManager] (https://developer.android.com/reference/android/)를보십시오. 지원/v4/content/LocalBroadcastManager.html) –

답변

4

https://developer.android.com/training/basics/intents/result.html 의 이

public interface ResponseListener() { 
     void onResponseReceive(String data); 
} 

를 다음과 같은 인터페이스 클래스를 만들 때 지금이

public class GetJson extends AsyncTask<Void,Void,String> { 
String JSON_STRING; 
String json_url; 
public String pasString; 
Activity ab; 

// this is new code 
ResponseListener listener; 
public void setOnResponseListener(ResponseListener listener) { 
    this.listener = listener; 
} 

@Override 
protected void onPreExecute() { 
    json_url="https://XXXXXXX.000webhostapp.com/Json_getData_Survey.php"; 
} 

// now add this code in onPost function 

@Override 
protected void onPostExecute(String result) { 

    pasString=result; 
    listener.onResponseReceive(pasString); 

    // Toast.makeText(ab,pasString,Toast.LENGTH_LONG).show(); 
    // json_string1=result; 
} 

처럼 당신을해서 getJSON 클래스를이 클래스의 인스턴스를 추가 매우 간단합니다 당신의 활동에서 GetJson을 호출하십시오.

GetJson json = new GetJson(Activity.this); 
json.setOnResponseListener(new ResponseListener() { 
     @Override 
     public void onResponseReceived(String data) { 
      // here you will get your response            
     } 
}); 

희망하시는 분은 이해 해주십시오. :)

+0

을 사용하여 AsyncTask의 결과를 얻을 수 있습니다. – Abubakar

1

활동 결과를 사용해보십시오. 하나의 액티비티에 반환 값을 설정하고 액티비티가 종료 될 때 반환 값을 가져올 수 있습니다.

+0

하나의 활동에서 다른 활동으로 값을 전달하는 방법을 알고 있지만 여기에 문제가 있습니다. class.java는 활동이 아니며 활동에 무언가를 전달하려고합니다. – Abubakar

+0

@Abubakar 왜 그 줄을 따라 콜백이나 무언가를 전달하면 되겠습니까? 또한 [AsyncTask # get] (https://developer.android.com/reference/android/os/AsyncTask.html#get%28%29) – Distjubo

관련 문제