当我运行以下代码时......
JSONObject jsonObject = null;
JSONParser parser=new JSONParser(); // this needs the "json-simple" library
try
{
Object obj = parser.parse(responseBody);
jsonObject=(JSONObject)obj;
}
catch(Exception ex)
{
Log.v("TEST","Exception1: " + ex.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
...在运行时我在日志输出中看到以下内容:
Exception1: org.json.simple.JSONObject cannot be cast to org.json.JSONObject
Run Code Online (Sandbox Code Playgroud)
我不明白为什么.
我有很多结构,例如:
typedef struct
{
int a;
int b;
int c;
etc...
}
data_type;
data_type data[100000];
Run Code Online (Sandbox Code Playgroud)
我有一堆单独的线程,每个线程都想对data []中的元素进行更改。我需要确保没有线程尝试同时访问相同的数据元素。准确地说:一个线程执行数据[475] .a = 3;另一个线程执行data [475] .b = 7; 不允许同时执行,但一个线程执行数据[475] .a = 3; 而另一个线程执行data [476] .a = 7; 被允许。该程序对速度至关重要。我的计划是为每个数据元素创建一个单独的关键部分,如下所示:
typedef struct
{
CRITICAL_SECTION critsec;
int a;
int b;
int c;
etc...
}
data_type;
Run Code Online (Sandbox Code Playgroud)
从某种意义上说,我认为它应该都能正常工作,而且我应该没有真正的问题,但是我对多线程编程没有太多的经验,我对拥有如此多的关键部分感到有些不安。我想知道它们的纯粹数量是否会造成某种效率低下。我也想知道其他一些多线程技术是否可能更快?我应该放松一下并继续执行计划A吗?
我有一个速度关键的多线程程序,它涉及树结构中的数据.实施如下:
typedef struct
{
// data pertaining to linkages, defining the architecture of the tree
int parent_node;
int child_node[MAX_CHILD_NODES];
int number_of_children;
// data pertaining to info at each node
float interesting_info_A;
char interesting_info_B[STRING_LEN];
long interesting_info_C;
}
node_type;
node_type node[MAX_NUMBER_OF_NODES];
CRITICAL_SECTION node_critsec[MAX_NUMBER_OF_NODES];
Run Code Online (Sandbox Code Playgroud)
程序进入并离开由node_critsec []控制的关键部分.因此,当我需要处理节点n的interesting_info_A/B/C时,我进入该节点的临界区(node_critsec [n]),进行处理然后离开.该计划蜿蜒在树周围,通过与父母和孩子的链接,采取各种复杂的路径.该程序还将增长树,即添加新节点并相应地修改其他节点的父/子链接(树永远不会缩小).我尝试确保每个线程一次只锁定一个节点,以避免死锁的风险.但后来我遇到了问题 - 如果我正在添加一个新节点,那么我可能想要锁定节点的父节点,以便我可以调整其子节点列表.在没有死锁或两个线程尝试修改同一节点中的数据的情况下让所有人工作将变得有点噩梦.是否有一些指导原则我应该关注何时以及锁定/解锁哪些节点我应该遵循 - 或者我是否必须超级智能并找出可能发生的每个事件的排列?
我编写了以下函数将时间(以毫秒为单位)转换为格式为mins:seconds的字符串.作为一名前C程序员,我认为"ans"必须是静态的才能正常工作,但在String之前放置静态似乎是不允许的.
我的问题是 - 这个功能是否有效 - 如果没有,那么哪些改变将使其发挥作用.
public String time_to_string(long t) // time in milliseconds
{
String ans;
int mins,secs;
if (t < 0)
{
return "-";
}
else
{
secs = (int)(t/1000);
mins = secs/60;
secs = secs - (mins * 60);
ans = ""+mins+":"+String.format("%02d", secs);
return ans;
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个似乎工作正常的Android应用程序 - 但我希望确保我不仅没有逃脱内存泄漏,线程锁定等问题.是否有一些实用程序,或在eclipse中的模式,将突出潜在的问题可能在将来发生.
我想使用setAnimationStyle()为弹出窗口尝试不同的动画样式,但我很难理解文档.
developer.android.com,说:"当弹出窗口显示和消失时使用的动画样式.默认动画设置为-1,无动画设置为0,显式动画设置为资源标识符."
它没有提供任何示例,也没有告诉我可用的资源选择.我怀疑为我的目的最好的动画将从右边滑入...这是作为一个选项存在吗?这些东西我可以从列表中选择还是我必须以某种方式创建自己的?
编辑:我目前制作弹出窗口的代码是这样的(简化):
public void completed_dialog()
{
runOnUiThread(new Runnable()
{
public void run()
{
View layout = inflater.inflate(R.layout.endofgame, null, false);
Button b1 = (Button) layout.findViewById(R.id.pu_menu);
Button b2 = (Button) layout.findViewById(R.id.pu_repeat);
Button b3 = (Button) layout.findViewById(R.id.pu_next);
b1.setBackgroundResource(R.drawable.custom_menu_but);
b2.setBackgroundResource(R.drawable.custom_repeat_but);
b3.setBackgroundResource(R.drawable.custom_next_but);
b1.setOnClickListener(menu_button_click_listener);
b2.setOnClickListener(repeat_button_click_listener);
b3.setOnClickListener(next_button_click_listener);
final PopupWindow pw = new PopupWindow(layout, canvas_width,
canvas_width /2, true);
pw.setAnimationStyle(android.R.style.Animation_Dialog);
pw.showAtLocation(game_frame_layout, Gravity.CENTER, 0, 0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我现在将以下内容放在res/anim/test.xml文件中:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="0.3" android:toXScale="1.0"
android:fromYScale="0.3" android:toYScale="1.0"
android:pivotX="0%" android:pivotY="0%"
android:duration="@android:integer/config_shortAnimTime"
/>
<alpha
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0" …Run Code Online (Sandbox Code Playgroud) 我已经设置了新的应用内结算(v3)系统,并且可以在应用中使用它。但是现在我想知道在欧洲想要以欧元购买的人会怎样。这与“模拟地点”有关吗?还是仅仅假设我在度假并且仍然以自己的货币给出价格?
编辑:再想一想,我想这可能是您的Google帐户附带的信用卡/借记卡定义的货币。
我正在制作一个相当专业的相机应用程序,用于一个物理上总是以横向方向保持的设备.该规范的一部分是它必须能够以纵向方式预览和拍摄照片 - 请参阅下面的配置"A".

(现在在任何人投票结束这个问题之前,这表明这是另一个问题的重复,让我指出另一个问题只是解决了是否可能 - 声称的答案是肯定的.这个问题,是关于怎么做.)
我已经为预览设置了一个TextureView并调用了camera.setPreviewTexture(),所以我在屏幕上看到了相机的图像.我还有代码和运行代码,它可以完成我需要的横向版本,请参阅下面的配置"B".
为了设置摄像机参数,我首先使用getParameters()读取摄像机自己的设置,然后修改我想要更改的设置.因此,在配置'B'的情况下,只需执行以下代码:
camera_parameters = camera.getParameters();
camera_parameters.setPreviewSize(640,480);
camera_parameters.setPictureSize(640,480);
camera.setParameters(camera_parameters);
Run Code Online (Sandbox Code Playgroud)
(编辑:我已经检查过640x480可用于预览和图片尺寸).该应用程序然后工作正如我所期望的那样.
试图让配置'A'工作时出现问题.这次,我将纹理视图设置得比它高,并执行以下代码:
camera_parameters = camera.getParameters();
camera_parameters.set("orientation", "portrait");
camera_parameters.setPreviewSize(640,480);
camera_parameters.setPictureSize(640,480);
camera.setParameters(camera_parameters);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这并没有完成这项工作.应用程序运行时我最终得到的结果更像是这样的:
正如您所看到的,此预览中显示的图像本质上是一个比它高的图像,它已经变形为一个比它更宽的矩形.生成的保存的jpeg图像文件也比它高.
我想也许我需要将代码更改为以下内容:
camera_parameters = camera.getParameters();
camera_parameters.set("orientation", "portrait");
camera_parameters.setPreviewSize(480,640);
camera_parameters.setPictureSize(480,640);
camera.setParameters(camera_parameters);
Run Code Online (Sandbox Code Playgroud)
但这会导致异常"setParameters failed".
所以我的问题是,我应该设置哪些参数,camera.getParameters();以及setParameters(camera_parameters);?之间的值?
我正在编写一个需要在root xyla z(Android 4.4.2,内部版本号10.5.A.0.230)上工作的应用程序.该应用程序通过传递以下字符串之一来读取四个核心的核心速度...
"/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"
"/sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq"
"/sys/devices/system/cpu/cpu2/cpufreq/scaling_cur_freq"
"/sys/devices/system/cpu/cpu3/cpufreq/scaling_cur_freq"
Run Code Online (Sandbox Code Playgroud)
...到下面的功能......
long sysfilenum(String str)
{
String text = null;
try
{
File file = new File(str);
BufferedReader br = new BufferedReader(new FileReader(file));
text = br.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
return Long.valueOf(text);
}
Run Code Online (Sandbox Code Playgroud)
此函数每秒执行一次:
一切都很完美.我在我的应用程序中显示数字,我发现它们的行为完全符合我的预期.核心速度通常彼此不同,当核心加热太多时(我也读取CPU温度),速度会降低.所以我相信这些数字正在被正确阅读.
现在这就是神秘的开始.如果我打开一个adb shell到我的设备,然后键入"su"作为我的第一个命令.我可以毫无问题地导航到"/ sys/devices/system/cpu/cpu0/cpufreq /"目录.但是,如果我尝试导航到核心1,2或3的目录.我得到"没有这样的文件或目录".我很困惑.
编辑:我刚刚使用在设备上运行的终端仿真器进行了测试,发现我可以访问所有核心的目录.所以它的adb shell表现得很奇怪.
编辑:只是在预感我试过su -c "ls cpu1/cpufreq/"它工作,我看到了cpu1目录.所以也许在adb shell中输入su 并没有给我超级用户访问权限?
编辑:天啊!我只是su -c "ls cpu1/cpufreq/"一遍又一遍地执行,发现有时它工作(即我看到目录列表),有时它没有(即我没有这样的文件或目录)!
编辑::根据这个文件,似乎目录是虚拟的.有一次它说" cd/sys/devices/system/cpu#一个虚拟目录被设备驱动程序看到 ".嗯,也许我搞砸了设备驱动程序?
我有以下代码,它每天两分钟执行一次:
int sucessfully_deleted = DeleteFile(dest_filename);
if (!sucessfully_deleted)
{
// this never happens
}
rename(source_filename,dest_filename);
Run Code Online (Sandbox Code Playgroud)
每隔几个小时一次,rename()将失败并且errno = 13(EACCES).所涉及的文件都位于DropBox目录中,我有一种预感,DropBox可能是原因.我认为可能有可能DeleteFile()函数可能返回非零的success_deleted,但实际上DropBox仍然忙着做一些与删除相关的事情,阻止rename()成功.我接下来要做的是将rename()更改为my_rename(),这将尝试重命名(),并且在任何失败时将Sleep()暂停一秒并尝试第二次.从那时起,它确实运作良好.更重要的是,我每隔几个小时就会收到一条显示首次尝试失败的诊断消息.它在第二次尝试时从未失败过.
所以你可以说这个问题已经完全解决了......但我想了解可能发生的事情,以便更好地保护自己免受未来任何相关的DropBox问题的影响......
我真的想要一个新的super_delete()函数,它在文件被正确删除并在所有方面完成后才会返回.