java.lang.RuntimeException:Can';t在Android中未调用Looper.prepare()的线程内创建处理程序

java.lang.RuntimeException:Can';t在Android中未调用Looper.prepare()的线程内创建处理程序,java,android,mysql,Java,Android,Mysql,当我按下一个按钮将JSON连接到MySQL数据库以从中获取数据时,我的logcat中出现了这个错误。这就是错误: 05-15 12:09:39.569 4982-5178/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1 Process: com.example.ospitznik.enarrations, PID: 4982 java.lang.RuntimeException: An error occured while execut

当我按下一个按钮将JSON连接到MySQL数据库以从中获取数据时,我的logcat中出现了这个错误。这就是错误:

05-15 12:09:39.569    4982-5178/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: com.example.ospitznik.enarrations, PID: 4982
java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:300)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:841)
 Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
        at android.os.Handler.<init>(Handler.java:208)
        at android.os.Handler.<init>(Handler.java:122)
        at android.app.Activity.<init>(Activity.java:765)
        at com.example.ospitznik.enarrations.NarracionesActivity.<init>(NarracionesActivity.java:7)
        at com.example.ospitznik.enarrations.VisorActivity.filtrarDatos(VisorActivity.java:180)
        at com.example.ospitznik.enarrations.VisorActivity.access$400(VisorActivity.java:30)
        at com.example.ospitznik.enarrations.VisorActivity$Mostrar.doInBackground(VisorActivity.java:217)
        at com.example.ospitznik.enarrations.VisorActivity$Mostrar.doInBackground(VisorActivity.java:213)
        at android.os.AsyncTask$2.call(AsyncTask.java:288)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-15 12:09:39.569 4982-5178/?E/AndroidRuntime﹕ 致命异常:AsyncTask#1
流程:com.example.ospiznik.enarrations,PID:4982
java.lang.RuntimeException:执行doInBackground()时出错
在android.os.AsyncTask$3.done(AsyncTask.java:300)
位于java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
位于java.util.concurrent.FutureTask.setException(FutureTask.java:222)
位于java.util.concurrent.FutureTask.run(FutureTask.java:242)
在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
运行(Thread.java:841)
原因:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
位于android.os.Handler.(Handler.java:208)
android.os.Handler.(Handler.java:122)
在android.app.Activity.(Activity.java:765)
位于com.example.ospiznik.enarrations.NarracionesActivity.(NarracionesActivity.java:7)
在com.example.ospiznik.enarrations.VisorActivity.filtrarDatos上(VisorActivity.java:180)
访问com.example.ospiznik.enarrations.VisorActivity.access$400(VisorActivity.java:30)
位于com.example.ospiznik.enarrations.VisorActivity$Mostrar.doInBackground(VisorActivity.java:217)
位于com.example.ospiznik.enarrations.VisorActivity$Mostrar.doInBackground(VisorActivity.java:213)
在android.os.AsyncTask$2.call(AsyncTask.java:288)
位于java.util.concurrent.FutureTask.run(FutureTask.java:237)

我的活动是:

public class VisorActivity extends Activity  {


private EditText etNarracion;
private TextView tvUsu;
private ImageView mostrar;
private ImageView mas;
private ImageView menos;
private ImageView ivBotonInicio;
private int posicion=0;
private List<NarracionesActivity> listaNarraciones;
private NarracionesActivity narraciones;
@SuppressLint("InlinedApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_visor);
    tvUsu = (TextView) findViewById(R.id.etUsu);
    etNarracion = (EditText) findViewById(R.id.etNarracion);
    ivBotonInicio = (ImageView) findViewById(R.id.ivBotonInicio);


    Bundle extras = getIntent().getExtras();
    String usuario = extras.getString("usuario");
    tvUsu.setText(usuario);



    listaNarraciones=new ArrayList<NarracionesActivity>();

    ivBotonInicio.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Bundle extras = getIntent().getExtras();
            String usuario = extras.getString("usuario");

            Intent i = new Intent(VisorActivity.this, NarracionActivity.class);
            i.putExtra("usuario", usuario);
            startActivityForResult(i, 0);
            finish();

        }
    });


    //Mostramos los datos de la persona por pantalla.
    mostrar=(ImageView)findViewById(R.id.ivBotonMostrar);
    mostrar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            new Mostrar ().execute();

        }
    });

    mas = (ImageView) findViewById(R.id.ivBotonDer);
    mas.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(!listaNarraciones.isEmpty()){
                if(posicion>=listaNarraciones.size()-1){
                    posicion=listaNarraciones.size()-1;
                    mostrarNarracion(posicion);
                }else{
                    posicion++;

                    mostrarNarracion(posicion);
                }
            }
        }

    });
    //Se mueve por nuestro ArrayList mostrando el objeto anterior
    menos=(ImageView)findViewById(R.id.ivBotonIzq);

    menos.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(!listaNarraciones.isEmpty()){
                if(posicion<=0){
                    posicion=0;
                    mostrarNarracion(posicion);
                }
                else{
                    posicion--;
                    mostrarNarracion(posicion);
                }
            }
        }
    });
}


private String mostrar(){
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://www.enarrations.com/selectAllJSON.php");
    String resultado="";
    HttpResponse response;
    try {
        response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        InputStream instream = entity.getContent();
        resultado= convertStreamToString(instream);
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return resultado;
}

private String convertStreamToString(InputStream is) throws IOException {
    if (is != null) {
        StringBuilder sb = new StringBuilder();
        String line;
        try {
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(is, "UTF-8"));
            while ((line = reader.readLine()) != null) {
                sb.append(line).append("\n");
            }
        }
        finally {
            is.close();
        }
        return sb.toString();
    } else {
        return "";
    }
}

private boolean filtrarDatos(){
    listaNarraciones.clear();
    String data=mostrar();
    if(!data.equalsIgnoreCase("")){
        JSONObject json;
        try {
            json = new JSONObject(data);
            JSONArray jsonArray = json.optJSONArray("narraciones");
            for (int i = 0; i < jsonArray.length(); i++) {
                narraciones=new NarracionesActivity();
                JSONObject jsonArrayChild = jsonArray.getJSONObject(i);
                narraciones.setUs_cod(jsonArrayChild.optString("us_cod"));
                narraciones.setUs_email(jsonArrayChild.optString("us_email"));
                narraciones.setUs_narracion(jsonArrayChild.optString("us_narracion"));

                listaNarraciones.add(narraciones);
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return true;
    }
    return false;
}
private void mostrarNarracion(final int posicion){



    runOnUiThread(new Runnable() {


        @Override
        public void run() {
            // TODO Auto-generated method stub

            NarracionesActivity narraciones = listaNarraciones.get(posicion);
            etNarracion.setText(narraciones.getUs_narracion());

        }
    });
}
class Mostrar extends AsyncTask<String,String,String> {
    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        if(filtrarDatos())mostrarNarracion(posicion);
        return null;
    }
}
}
公共类VisorActivity扩展活动{
私人编辑文本等;
私有文本视图tvUsu;
私人图像视图mostrar;
私有图像视图mas;
私有ImageView菜单;
私有图像视图IVBOTONICIO;
私有int posicion=0;
私有列表列表;
私人narraciones活动narraciones;
@SuppressLint(“InlinedApi”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_visor);
tvUsu=(TextView)findViewById(R.id.etUsu);
etNarracion=(EditText)findViewById(R.id.etNarracion);
IVBOTONICIO=(ImageView)findViewById(R.id.IVBOTONICIO);
Bundle extras=getIntent().getExtras();
String usuario=extras.getString(“usuario”);
tvUsu.setText(usuario);
listaNarraciones=newarraylist();
ivbotonicio.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Bundle extras=getIntent().getExtras();
String usuario=extras.getString(“usuario”);
意向i=新意向(VisorActivity.this,NarracionActivity.class);
i、 putExtra(“usuario”,usuario);
startActivityForResult(i,0);
完成();
}
});
//这是一个很好的例子。
mostrar=(ImageView)findViewById(R.id.ivBotonMostrar);
mostrar.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
新的Mostrar().execute();
}
});
mas=(ImageView)findViewById(R.id.ivBotonDer);
mas.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
如果(!listaNarraciones.isEmpty()){
if(posicion>=listaNarraciones.size()-1){
posicion=listaNarraciones.size()-1;
mostrarNarracion(Posicon);
}否则{
posicion++;
mostrarNarracion(Posicon);
}
}
}
});
//这是一个新的阵列列表
menos=(ImageView)findViewById(R.id.ivBotoniq);
menos.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
如果(!listaNarraciones.isEmpty()){

if(posicion因为当前使用
AsyncTask
doInBackground
方法中的web服务获取数据,所以无需使用
runOnUiThread
更新TextView中的文本,只需使用
onPostExecute
更新视图中的数据:

@Override
protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            if(result !=null)
              etNarracion.setText(result);  
}
并将
doInBackground
方法更改为:

@Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        if(filtrarDatos()){
             return listaNarraciones.get(posicion).getUs_narracion();
           }else
             return null;
    }