我从另一个类useActivity多次调用类DrawingView的静态方法updateHistory(String message)。 updateHistory方法中的语句(标记在代码部分中)将运行时异常创建为
A/libc(8006): @@@ ABORTING: LIBC: ARGUMENT IS INVALID HEAP ADDRESS IN dlfree addr=0x6552d4a8
A/libc(8006): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 8015 (FinalizerDaemon)
useActivity.java
public class UseActivity extends Activity implements Observer {
public void onCreate(Bundle savedInstanceState){...}
...
public void updateHistory{
...
for loop(10 times){
DrawingView.updateHistory(message); //called 10 times & message is a string changes every time
}
...
...
}//class ends
DrawingView.java
public class DrawingView extends View implements OnTouchListener {
public static DrawingView my_View=null;
public DrawingView(Context context, AttributeSet attr) {
super(context);
my_View=this;
...
}
public static void updateHistory(String json){
Gson gson2=new Gson();
ArrayList<Pair<Path, Paint>> my_Paths=gson2.fromJson(json,new TypeToken<ArrayList<Pair<Path,Paint>>>(){}.getType());
//The above statement creates problem
...
}
}//class ends
我如何更改该语句,因为gson2.fromJson每次调用该方法时都会创建新的arraylist对象。
注意
我的基本目标是将json字符串(先前从Path的ArrayList编码)转换为Paths的ArrayList并在画布上绘制它们。
答案 0 :(得分:0)
从this看起来你的libc堆已经损坏了;你有加载和运行的本地库吗?
答案 1 :(得分:0)
我使用fromJson
方法注意到了这个问题。
要避免此错误,请将此部分代码更改为:
JSONObject json = new JSONObject(str);
Location objLocation = new Location("");
objLocation.setLatitude(json.getDouble("mLatitude"));
objLocation.setLongitude(json.getDouble("mLongitude"));
objLocation.setTime(json.getLong("mTime"));
objLocation.setAccuracy( (float)
json.getDouble("mAccuracy"));
objLocation.setAltitude( json.getDouble("mAltitude"));
objLocation.setBearing( (float) json.getDouble("mBearing"));
objLocation.setElapsedRealtimeNanos( json.getLong("mElapsedRealtimeNanos"));
objLocation.setSpeed( (float) json.getDouble("mSpeed"));