如何将我的AsyncTask中的文本设置为片段中的textview?

时间:2014-08-03 06:39:32

标签: java android android-fragments android-asynctask textview

这里是我的OnCreateView代码

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_profile, container, false);
    tvMemberName = (TextView) v.findViewById(R.id.member_name);
    UrlPostHelper uph = new UrlPostHelper();
    uph.execute();
    return v;
}

和AsyncTask

    private class UrlPostHelper extends AsyncTask<Void, Void, String> {
    @Override
    protected String doInBackground(Void... params) {
        String url = "http://localhost:8080/MP/Profile";
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);

        HttpResponse response;
        String data = "no response";
        try {
            response = httpClient.execute(httpGet);
            data = EntityUtils.toString(response.getEntity());
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        String s = "yow";


        try {
            JSONArray ja = new JSONArray(data);
            for (int i = 0 ; i < ja.length(); i++ ){
                JSONObject j = ja.getJSONObject(i);
                String firstName = j.getString("firstName");
                String lastName = j.getString("lastName");
                System.out.println(firstName);
                s = firstName +" " + lastName;
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return s;

    }

    protected void onPostExecute(String result){
        super.onPostExecute(result);
        Log.i("TAG", result );
        tvMemberName.setText(result);
    }


}

我的问题是,在我的Android应用程序中,它最初没有显示任何内容,但过了一段时间,大约1-2分钟,“yow”将显示。但它不会被成员名称替换。我尝试运行我的servlet,它工作得很好。请帮我。

1 个答案:

答案 0 :(得分:0)

  • AsyncTask<Params, Progress, Result>

    private class UrlPostHelper extends AsyncTask<Void, Void, String>{
    private EditText tvMemberName;
    public UrlPostHelper(EditText tv){
      this.tvMemberName = tv;
    }
    
  • 后台任务完成后返回文本。

    @Override
    protected String doInBackground(Void... params) {
    
    HttpResponse response;
    String data = "no response";
    try {
        response = httpClient.execute(httpGet);
        data = getJSONString(response.getEntity());
    } catch (Exception e) {
        e.printStackTrace();
    }
    
       return data; //Text to set TvMember Value
    }
    
  • 从响应中获取字符串。

    public String getJSONString(InputStream is) throws IOException {
    BufferedReader in = new BufferedReader(new InputStreamReader(is));
    String inputLine;
    StringBuffer response = new StringBuffer();
    
    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();
    return response.toString();
    } 
    
  • 设置EditText onPostExecute。

    protected void onPostExecute(String result){
       Log.i("TAG", result );
       tvMemberName.setText(result);
    }
    
  • 使用UrlPostHelper调用传递EditText。

    new UrlPostHelper(tvMemberName).excute();