当前位置: 首页 > 知识库问答 >
问题:

无法在未调用Looper.Prepare()3的线程内创建处理程序

黄正浩
2023-03-14
public class AddStudentActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_student);
}

public void add2(View view){
    //create 3 editText  ,  1 Textview
    EditText et_name, et_age;
    RadioButton rb_male;
    TextView tv_msg;

    //bind with xml widget
    et_name = (EditText)findViewById(R.id.et_name);
    et_age = (EditText)findViewById(R.id.et_age);
    rb_male = (RadioButton)findViewById(R.id.rb_male);
    tv_msg = (TextView)findViewById(R.id.tv_msg);
    //retrieve values
    String name = et_name.getText().toString();
    String age = et_age.getText().toString();
    String gender = "";
    if (rb_male.isChecked())
        gender = "male";
    else
        gender = "female";
    //call php
    new AddStudent(this, tv_msg).execute(name, age, gender);
   }
}

class AddStudent extends AsyncTask<String, Void, String> {
private Context context;
//CHANGE HERE....ADD PARAMATER
TextView tv_msg;

public AddStudent(Context context,TextView tv_msg) {
    this.context = context;
    this.tv_msg = tv_msg;

}

@Override
protected String doInBackground(String[] arg) {
    //CHANGE HERE ...... RETRIEVE STRING ARGUMENTS
   String name = arg[0];
    String age = arg[1];
    String gender = arg[2];

    String link;
    String data;
    BufferedReader bufferedReader;
    String result;

    try {
        //CHANGE HERE .... PARAMETERS
          data = "?name=" + URLEncoder.encode(name, "UTF-8");
        data += "&age="+ URLEncoder.encode(age, "UTF-8");
        data += "&gender="+ URLEncoder.encode(gender, "UTF-8");
        //CHANGE HERE .... PHP PAGE
          link = "http://10.0.2.2/fashionstudio/ADD3.php" + data;

        URL url = new URL(link);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();

        bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
        result = bufferedReader.readLine();

        return result;
    } catch (Exception e) {
        Log.d("msg here", e.getMessage());
        Toast.makeText(context, "Error Exception", Toast.LENGTH_SHORT).show();
        return new String("Exception: " + e.getMessage());

    }
}

@Override
protected void onPostExecute(String result) {
    if (result != null) {
        try {
            JSONObject reader = new JSONObject(result);
            //CHANGE HERE... RETRIEVE VALUES
            String msg = reader.getString("msg");
            tv_msg.setText(msg);
        } catch (Exception e) {
            e.printStackTrace();
            Log.d("msg here", e.getMessage());
            Toast.makeText(context, "Error parsing JSON data.", Toast.LENGTH_SHORT).show();
        }
    } else {
        Toast.makeText(context, "Couldn't get any JSON data.", Toast.LENGTH_SHORT).show();
    }
  }
}

我在android中点击添加学生时出错了

共有1个答案

郭通
2023-03-14

你不能

Toast.makeText(context, "Error Exception", Toast.LENGTH_SHORT).show();

doInbackground方法中。toast.maketext(...)必须在UI线程中执行。

 类似资料:
  • 问题内容: 我收到此错误“无法在未调用Looper.prepare()的线程内创建处理程序” 你能告诉我如何解决吗? StartPayment方法: 问题答案: 您应该知道,当您尝试修改UI时, 唯一 可以执行此操作的线程是。 因此,如果要在另一个线程中修改UI,请尝试使用以下方法: 您的代码应如下所示:

  • 问题内容: 我正在使用AsyncTask调用yahooweather API。以下是代码: } 调试代码后,我发现yahooAPI调用成功,并且可以在函数中看到XML响应。但是,一旦执行完此功能,就会引发异常: 请帮帮我。 问题答案: 从方法中删除所有Toast的from,因为此方法是从of 调用的,并且您无法从后台线程访问Toast等Ui元素(也是Ui元素)。 注意: 如果您想知道后台发生了什么

  • 问题内容: 我不明白为什么会收到此错误。我正在使用AsyncTask在后台运行一些进程。 我有: 当我根据情况进入时: 每当我尝试我都会收到错误消息。 有想法吗? 问题答案: 该方法必须从被调用用户界面(UI)螺纹,而在不同的螺纹,其是主要的原因,运行被设计。 你必须调用无论是在或。 例如:

  • 我正在使用Google Maps V2 API开发一个简单的应用程序,只是为了获得基本知识,我面临着这个错误: 奇怪的是,我可以在我的模拟器(API16)上运行这个应用程序,它运行得很好,但当我试图在物理设备(API15)上运行它时,它得到了这个错误。AsyncTask在单独的类中运行,因此可能会导致此问题。如果有任何建议,我将不胜感激。提前谢了。

  • 问题内容: 我知道已经有很多这样的问题,但是我看不出我做错了什么。该应用程序崩溃,但未显示任何内容。另外,该错误不会在我的设备或仿真器上发生。仅在某些设备上(例如30-40%?)。 无法在未调用Looper.prepare()的线程内创建处理程序 MainActivity.java LogCat 问题答案: 如果您的线程不在监听循环程序,您如何管理发送给处理程序的请求? Doc说:public H

  • 问题内容: 我正在尝试使用其他EditText上传照片。我从一个在线示例中获取了示例代码,并对其进行了少量编辑,但我收到此错误: 我的Android代码: 请告诉我这里是什么问题,我该如何解决呢?预先感谢我知道,常见的答案是我需要从UI线程调用Toast.makeText(…):很抱歉,因为我很新任何人都介意对此进行更详细的解释 问题答案: 可能由于此行而出现错误 里面。必须显示在UIThread