我正在使用Google Maps V2 API开发一个简单的应用程序,只是为了获得基本知识,我面临着这个错误:
09-09 21:21:41.154: E/AndroidRuntime(3796): FATAL EXCEPTION: Thread-441
09-09 21:21:41.154: E/AndroidRuntime(3796): java.lang.ExceptionInInitializerError
09-09 21:21:41.154: E/AndroidRuntime(3796): at cz.vongrad.dataSourceLayer.DataMapper.loadLocation(DataMapper.java:111)
09-09 21:21:41.154: E/AndroidRuntime(3796): at cz.vongrad.dataSourceLayer.DBFacade.loadLocations(DBFacade.java:32)
09-09 21:21:41.154: E/AndroidRuntime(3796): at cz.vongrad.domainLayer.Controller.loadLocations(Controller.java:94)
09-09 21:21:41.154: E/AndroidRuntime(3796): at cz.vongrad.locator.MapActivity$1.run(MapActivity.java:199)
09-09 21:21:41.154: E/AndroidRuntime(3796): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
09-09 21:21:41.154: E/AndroidRuntime(3796): at android.os.Handler.<init>(Handler.java:121)
09-09 21:21:41.154: E/AndroidRuntime(3796): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:607)
09-09 21:21:41.154: E/AndroidRuntime(3796): at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:607)
09-09 21:21:41.154: E/AndroidRuntime(3796): at android.os.AsyncTask.<clinit>(AsyncTask.java:190)
09-09 21:21:41.154: E/AndroidRuntime(3796): ... 4 more
09-09 21:21:41.164: E/EmbeddedLogger(239): App crashed!
class LoadLocations extends AsyncTask<String, Void, ArrayList<Friend>>{
private JSONObject jSONObject;
@Override
protected ArrayList<Friend> doInBackground(String... args) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("user_name", args[1]));
jSONObject = jSONParser.makeHttpRequest(args[0], "POST", params);
Log.d(TAG, jSONObject.toString());
ArrayList<Friend> tempFriends = new ArrayList<Friend>();
try {
if(jSONObject.getInt("success") == 1){
JSONArray jsonArray = jSONObject.getJSONArray("users");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject o = jsonArray.getJSONObject(i);
tempFriends.add(new Friend(o.getString("user_name"), new LatLng(o.getDouble("loc_y"), o.getDouble("loc_x")), false));
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return tempFriends;
}
}
public ArrayList<Friend> loadLocation(String URL, String userName) throws InterruptedException, ExecutionException {
return new LoadLocations().execute(URL, userName).get();
}
public class MapActivity extends Activity implements LocationSource, LocationListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private Thread loadFriendLocations = new Thread()
{
@Override
public void run() {
Log.d(TAG, "LastKnownLocation: " + locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER));
try {
while(true) {
controller.loadLocations(LOAD_LOCATIONS);
Log.d(TAG, "Loading new locations");
Message msg = uIHandler.obtainMessage();
msg.what = ADD_MAP_PIN;
uIHandler.sendMessage(msg);
sleep(10000);
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
final Handler uIHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what==ADD_MAP_PIN){
for (Friend friend : controller.getFriends()) {
addMapPin(friend);
}
}
super.handleMessage(msg);
}
};
奇怪的是,我可以在我的模拟器(API16)上运行这个应用程序,它运行得很好,但当我试图在物理设备(API15)上运行它时,它得到了这个错误。AsyncTask在单独的类中运行,因此可能会导致此问题。如果有任何建议,我将不胜感激。提前谢了。
我有一个类似的问题,问题是我有一系列的线程从主线程。实际上,主UI线程启动了一个服务,该服务在服务上运行,然后启动了另一个线程,该线程最终有一个FileObserver(另一个线程),我必须通过弹出一个toast消息与UI线程通信。我试了几个小时,在下面试了一下,它起到了魅力的作用。
//Let this be the code in your n'th level thread from main UI thread
Handler h = new Handler(Looper.getMainLooper());
h.post(new Runnable() {
public void run() {
Toast.makeText(context, "Your message to main thread", Toast.LENGTH_SHORT).show();
}
});
这里的主键是Looper类的getMainLooper()函数,它将为您提供针对主UI线程的Looper。
问题内容: 我正在使用AsyncTask调用yahooweather API。以下是代码: } 调试代码后,我发现yahooAPI调用成功,并且可以在函数中看到XML响应。但是,一旦执行完此功能,就会引发异常: 请帮帮我。 问题答案: 从方法中删除所有Toast的from,因为此方法是从of 调用的,并且您无法从后台线程访问Toast等Ui元素(也是Ui元素)。 注意: 如果您想知道后台发生了什么
问题内容: 我收到此错误“无法在未调用Looper.prepare()的线程内创建处理程序” 你能告诉我如何解决吗? StartPayment方法: 问题答案: 您应该知道,当您尝试修改UI时, 唯一 可以执行此操作的线程是。 因此,如果要在另一个线程中修改UI,请尝试使用以下方法: 您的代码应如下所示:
我在android中点击添加学生时出错了
问题内容: 我不明白为什么会收到此错误。我正在使用AsyncTask在后台运行一些进程。 我有: 当我根据情况进入时: 每当我尝试我都会收到错误消息。 有想法吗? 问题答案: 该方法必须从被调用用户界面(UI)螺纹,而在不同的螺纹,其是主要的原因,运行被设计。 你必须调用无论是在或。 例如:
问题内容: 我知道已经有很多这样的问题,但是我看不出我做错了什么。该应用程序崩溃,但未显示任何内容。另外,该错误不会在我的设备或仿真器上发生。仅在某些设备上(例如30-40%?)。 无法在未调用Looper.prepare()的线程内创建处理程序 MainActivity.java LogCat 问题答案: 如果您的线程不在监听循环程序,您如何管理发送给处理程序的请求? Doc说:public H
问题内容: 我正在尝试使用其他EditText上传照片。我从一个在线示例中获取了示例代码,并对其进行了少量编辑,但我收到此错误: 我的Android代码: 请告诉我这里是什么问题,我该如何解决呢?预先感谢我知道,常见的答案是我需要从UI线程调用Toast.makeText(…):很抱歉,因为我很新任何人都介意对此进行更详细的解释 问题答案: 可能由于此行而出现错误 里面。必须显示在UIThread