【问题标题】:setText in AsyncTask androidAsyncTask android中的setText
【发布时间】:2015-12-02 14:47:33
【问题描述】:

我需要使用来自远程数据库 MYSQL 的数据更新 textView,但是当我尝试更新 AsyncTask 中的 textview 时遇到问题。我尝试了所有方法,但它总是给我一个无效的 textview。 这是我的代码:

public class Credits extends Activity implements OnClickListener{

private Button home;
private String user;
public TextView totSpesa;
private ProgressDialog pDialog;


JSONParser jsonParser = new JSONParser();

private static final String URL = "http://**********/services.php";


private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";
private static final String TAG_ERROR_MESSAGE = "error_msg";
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_credits);
    user=PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("id", ""); 
    totSpesa= (TextView)findViewById(R.id.tot_spesa);

    home = (Button)findViewById(R.id.home_btn);

    home.setOnClickListener(this);

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.home_btn:
        Intent i = new Intent(Credits.this, MainActivity.class);
        startActivity(i);
        break;

    default:
        break;
    }
}

class AttemptCredits extends AsyncTask<String, String, String> {

     /**
     * Before starting background thread Show Progress Dialog
     * */
    boolean failure = false;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(Credits.this);
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();

    }

    @Override
    protected String doInBackground(String... args) {
        // TODO Auto-generated method stub


        //Intent in = getIntent();
        //user = in.getStringExtra("id");
        String tot_spesa="";
        try {

            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("tag", "get_credits"));
            params.add(new BasicNameValuePair("username", user));

            Log.d("request!", "starting");

            JSONObject json = jsonParser.makeHttpRequest(
                    URL, "POST", params);

                tot_spesa=json.getString("tot_spesa");    


        } catch (JSONException e) {
            e.printStackTrace();
        }
        return tot_spesa;



    }
    /**
     * After completing background task Dismiss the progress dialog
     * **/
    @Override
    protected void onPostExecute(String tot_spesa) {

        totSpesa.setText(tot_spesa);   

    }

}


}

【问题讨论】:

  • 你确定doInBackground里面没有抛出异常吗?
  • 是的,我也尝试在 postexecute 中设置一个文本,但没有结果
  • 但是从哪里开始 AsyncTask 使用 new AsyncTask().execute("")
  • @ρяσѕρєяK 对不起,我不明白你的意思
  • @Rivas202:在onCreate 方法中添加new AsyncTask().execute("") setContentView(R.layout.activity_credits); 之后,更多详细信息请参见AsyncTask

标签: android mysql android-asynctask


【解决方案1】:

也许我遗漏了一些东西,但我认为您实际上并没有启动您的 AsyncTask

尝试做:

new AttemptCredits().execute(user);

onCreate, 并使用

让您的用户进入doInBackground
user = args[1];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    相关资源
    最近更新 更多