【发布时间】:2018-07-19 23:11:48
【问题描述】:
我有一个类,它给我一个数据库字符串。 我在我的活动中调用类,然后使用该字符串。 因为我通过 Log.d 得到了它,所以返回了搅拌,但是我的 Activity 的字符串变量没有得到它,因为程序继续没有等待类结束。 (对不起我的英语不好)
代码: 活动:
Cargar_Imagen ci = new Cargar_Imagen();
String s = ci.Cargar_Imagen(params...);
类:
public class Cargar_Imagen {
private Map<String, String> params;
String sBitmap = "";
public String Cargar_Imagen(final String email, final String id, final String f1, final Context context, final String type, final View v){
StringRequest stringRequest = new StringRequest(Request.Method.POST, "https://feticher.webcindario.com/cargar_imagen.php",
new Response.Listener<String>() {
@Override
public void onResponse(String s) {
Log.d("Imagen", "Se cargo la foto");
try {
JSONObject jsonRespose = new JSONObject(s);
sBitmap =jsonRespose.getString("imagen");
Log.d("Imagen", "STRING: " + sBitmap);
Download_Image download_image = new Download_Image();
download_image.Download_Image(f1, type,context, v, sBitmap);
} catch (JSONException e) {
e.printStackTrace();
Log.d("Imagen", "ERROR: " + e.getMessage());
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Imagen", "No se pudo cargar la foto");
}
}) {
@Override
protected Map<String, String> getParams(){
Log.d("Imagen", "Ejecutando MAP Cargar Imagen");
Log.d("Imagen", "DATOS: " + id + " " + email + " " + f1);
Map<String, String> params = new Hashtable<String, String>();
params.put("id", id);
params.put("email", email);
params.put("foto", f1);
Log.d("Imagen", "PASO POR AKI");
return params;
}};
RequestQueue queue = Volley.newRequestQueue(context);
queue.add(stringRequest);
return sBitmap;
}
}
【问题讨论】:
-
这里似乎使用了并发和使用回调方法(观察者模式)的概念,因为在
Cargar_Imagen(...)方法结束时不会分配 sBitmap 字符串,因为它在回调方法中的不同线程中分配。