Android只在调试时提供正确的结果
我开始在Android上开发 当我在调试模式下运行程序时,我总是得到正确的结果,但当我开始运行时,我只得到静态值(而不是从服务器检索到的值)。Android只在调试时提供正确的结果,android,debugging,listview,arraylist,Android,Debugging,Listview,Arraylist,我开始在Android上开发 当我在调试模式下运行程序时,我总是得到正确的结果,但当我开始运行时,我只得到静态值(而不是从服务器检索到的值)。 这是我的班级: public class ListFromSql extends Activity { ListView lv; TextView tv; String message_info=""; JsonParser jsonParser = new JsonParser(); private stati
这是我的班级:
public class ListFromSql extends Activity
{
ListView lv;
TextView tv;
String message_info="";
JsonParser jsonParser = new JsonParser();
private static String url_updateData = "http://myserver/getfrom_sqlserver.php";
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "message";
private ArrayList<String> your_array_list = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new ConnectToPhp().execute();
ArrayList<String> your_array_list2 = new ArrayList<String>();
your_array_list2 = PrepareList();
for(int k=0;k<5;k++)
{
int num=5-k;
your_array_list2.add("TestListView " + num);
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_1,
your_array_list2 );
lv = (ListView) findViewById(R.id.listViewFromDB);
lv.setAdapter(arrayAdapter);
}
private ArrayList PrepareList()
{
ArrayList todoItems = new ArrayList();
todoItems=your_array_list;
todoItems.add("First Line Test");
return todoItems;
}
private void populateListViewFromDB(String elements)
{
String attributes[]=elements.split("=>");
your_array_list.add(attributes[1]);
}
private class ConnectToPhp extends AsyncTask<String,Void,String>
{
protected String doInBackground(String... url)
{
try
{
String deviceIdtxt="";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id_device",deviceIdtxt));
JSONObject json = jsonParser.makeHttpRequest(url_updateData, "POST", params);
Log.d("Create Response", json.toString());
try
{
int success = json.getInt(TAG_SUCCESS);
if (success == 1)
{
message_info="La synchronisation a été faite avec succès";
String message=json.getString(TAG_MESSAGE);
int counter = 0;
for( int i=0; i<message.length(); i++ )
{
if( message.charAt(i) == ',' )
{
counter++;
}
}
if(counter>0)
{
String str[]=message.split(",");
for( int j=0; j<counter; j++ )
{
populateListViewFromDB(str[j]);
}
}
}
else if (success == 2)
{
message_info="Serveur indisponible!";
}
else
{
message_info="Problème lors de la synchronisation! ";
}
}
catch (JSONException e)
{
e.printStackTrace();
}
}
catch(Exception e)
{
e.printStackTrace();
}
return "";
}
protected void onPostExecute(String result)
{
}
}
}
公共类ListFromSql扩展活动
{
ListView lv;
文本视图电视;
字符串消息_info=“”;
JsonParser JsonParser=新的JsonParser();
私有静态字符串url_updateData=”http://myserver/getfrom_sqlserver.php";
私有静态最终字符串标记_SUCCESS=“SUCCESS”;
私有静态最终字符串标记_MESSAGE=“MESSAGE”;
private ArrayList您的_array_list=new ArrayList();
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
新建ConnectToPhp().execute();
ArrayList您的_array_list2=新建ArrayList();
您的_数组_列表2=PrepareList();
对于(int k=0;k有两个问题:
线程安全!从onPostExecute
方法更新UI数据
使用ArrayAdapter而不是数组本身更新数据
当你在调试器中运行东西时,你不会得到完整的多线程处理。这看起来没问题,因为事情不是并行发生的,而是串行发生的。我认为你的应用程序中有一些部分操作的数据可能会在你不调试时被踩到、覆盖,等等
尝试将真正的后台任务与数据库或其他任务分开,并在onPostExecute()中执行这些任务您是否尝试过独立运行php以验证它是否返回了您期望的结果?@rrirower是的,它会检索您可能从刷新中受益的所有数据。即使onPostExecute方法也存在同样的问题onPostExecute方法也存在同样的问题