java.lang.RuntimeException:不能在未调用Looper.prepare()的线程中创建处理程序 [英] java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

查看:726
本文介绍了java.lang.RuntimeException:不能在未调用Looper.prepare()的线程中创建处理程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  progressD = ProgressDialog.show(MenuUtama.this, ,将文件上传到服务器.....,false); 
Thread thread = new Thread(new Runnable(){
public void run(){
// doFileUpload();
try {
// setiap parameter yang akan dikirim melalui http
// harus encode agar
// dapat terbaca dengan baik oleh server
Cursor c = helper.getAll1(almagId);
Cursor cr = helper.getUpImage( almagId);
if(c.moveToFirst()){
// progressD = ProgressDialog.show(context,title,message)
do {
String kdstore = URLEncoder.encode (helper.getKdStore(c).toString(),utf-8);
String nama = URLEncoder.encode(helper.getNama(c).toString(),utf-8);
String alamat = URLEncoder.encode(helper.getAlamat(c).toString(),utf-8);
String kdpos = URLEncoder.encode(helper.getKdPos(c).toString(), UTF-8\" );
String notelp = URLEncoder.encode(helper.getNotel(c).toString(),utf-8);
String lng = URLEncoder.encode(helper.getlng(c).toString(),utf-8);
String lat = URLEncoder.encode(helper.getLat(c).toString(),utf-8);
String perush = URLEncoder.encode(helper.getPerus(c).toString(),utf-8);
// String gambar = URLEncoder.encode(helper.getGamb(c).toString(),utf-8);

//Toast.makeText(this,kdstore,Toast.LENGTH_LONG).show();
//System.out.println(gambar);
url + =?kode_toko =+ kdstore +&& nama =+ nama +&& alamat =+ alamat +
& kode_pos =+ kdpos +& "=+ notelp +&&& longitude =+ lng +&& latitude =+ lat +
&& perusahaan =+ perush;
getRequest(url);
url =http://10.234.165.232/upload_get.php;
} while(c.moveToNext());
}
if(cr.moveToFirst()){
do {
String kdstore = URLEncoder.encode(helper.getKdstore1(cr),utf-8);
String gambar = URLEncoder.encode(helper.getGam1(cr),utf-8);
url1 + =?kode_toko1 =+ kdstore +&& gambar1 =+ gambar;
getRequest1(url1);
url1 =http://10.234.165.232/upload_get2.php;
} while(cr.moveToNext());
}

} catch(UnsupportedEncodingException e){
// TODO自动生成的catch块
e.printStackTrace();
}
MenuUtama.this.runOnUiThread(new Runnable(){
public void run(){
if(progressD.isShowing())
progressD.dismiss( );
}
});
}
});
thread.start();
return(true);

并出现如下错误:

  FATAL EXCEPTION:Thread-9 
java.lang.RuntimeException:
无法在没有调用Looper.prepare()
的线程中创建处理程序.o.inand (Toast.java:231)
at com.sat.alfaloc.MenuUtama.getRequest(MenuUtama.java:160)
at com.sat.alfaloc.MenuUtama $ 1.run(MenuUtama.java:101)
在java.lang.Thread.run(Thread.java:1096)

如果活动保存数据到服务器我命令进度条可以运行,但如果不是这不工作...我应该如何解决这个问题?

解决方案

可能是因为您使用活动上下文的线程而导致错误。



您应该使用 AsyncTask 代替正常的线程。
在AsyncTask中,在主线程上执行一个方法 onPreExecute() onPostExecute()并且有一个方法 doInBackground(),它将在后台执行,以便您可以轻松实现长时间的实时进程。



您可以参考此示例


hi i have a problem with my code..my code is

progressD = ProgressDialog.show(MenuUtama.this, "", "Uploading files to server.....", false);
Thread thread = new Thread(new Runnable(){
       public void run(){
           //doFileUpload();
           try {
            // setiap parameter yang akan dikirim melalui http
            // harus encode agar
            // dapat terbaca dengan baik oleh server
            Cursor c = helper.getAll1(almagId);
            Cursor cr = helper.getUpImage(almagId);
                if(c.moveToFirst()){
                    //progressD = ProgressDialog.show(context, title, message)
                        do{
                            String kdstore = URLEncoder.encode(helper.getKdStore(c).toString(), "utf-8");
                            String nama = URLEncoder.encode(helper.getNama(c).toString(), "utf-8");
                            String alamat = URLEncoder.encode(helper.getAlamat(c).toString(), "utf-8");
                            String kdpos = URLEncoder.encode(helper.getKdPos(c).toString(), "utf-8");
                            String notelp = URLEncoder.encode(helper.getNotel(c).toString(), "utf-8");
                            String lng = URLEncoder.encode(helper.getlng(c).toString(), "utf-8");
                            String lat = URLEncoder.encode(helper.getLat(c).toString(), "utf-8");
                            String perush = URLEncoder.encode(helper.getPerus(c).toString(), "utf-8");
                            //String gambar = URLEncoder.encode(helper.getGamb(c).toString(), "utf-8");

                            //Toast.makeText(this, kdstore, Toast.LENGTH_LONG).show();
                            //System.out.println(gambar);
                            url += "?kode_toko=" + kdstore + "&&nama=" + nama + "&&alamat=" + alamat + 
                            "&&kode_pos=" + kdpos + "&&no_telp=" + notelp + "&&longitude=" + lng + "&&latitude=" + lat +
                            "&&perusahaan=" + perush;
                            getRequest(url);
                            url = "http://10.234.165.232/upload_get.php";
                        }while(c.moveToNext());
            }
            if(cr.moveToFirst()){
                do{
                    String kdstore = URLEncoder.encode(helper.getKdstore1(cr), "utf-8");
                    String gambar = URLEncoder.encode(helper.getGam1(cr), "utf-8");
                    url1 += "?kode_toko1=" + kdstore + "&&gambar1=" + gambar;
                    getRequest1(url1);
                    url1 = "http://10.234.165.232/upload_get2.php";
                }while(cr.moveToNext());
            }

            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           MenuUtama.this.runOnUiThread(new Runnable(){
               public void run() {
                   if(progressD.isShowing())
                       progressD.dismiss();
               }
           });
       }
});
thread.start();
return(true);

and error like this :

FATAL EXCEPTION: Thread-9
java.lang.RuntimeException: 
Can't create handler inside thread that has not called Looper.prepare()
    at android.os.Handler.<init>(Handler.java:121)
    at android.widget.Toast.<init>(Toast.java:68)
    at android.widget.Toast.makeText(Toast.java:231)
    at com.sat.alfaloc.MenuUtama.getRequest(MenuUtama.java:160)
    at com.sat.alfaloc.MenuUtama$1.run(MenuUtama.java:101)
    at java.lang.Thread.run(Thread.java:1096)

if activity save data in to server I command the progress bar can run,but if not this not worked..what should i do to fix this problem??

解决方案

Probably you are getting error because of the thread in which you are using the context of the activity.

You should use the AsyncTask instead of a normal thread. In AsyncTask there is a method onPreExecute() and onPostExecute() which are executing on the main thread and there is a method doInBackground() which will execute on background so that you can easily implement the long live process.

You can refer this example

这篇关于java.lang.RuntimeException:不能在未调用Looper.prepare()的线程中创建处理程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆