我只是在为水电站编程一个数据评估应用程序。
在那里,我需要从服务器下载数据,该数据位于其中-作为MySQL表格式化为JSON数组。
现在,经过数十个小时的工作,我完成了连接服务器,下载数据并将其输出到自动生成的ListView布局(使用this.setListAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1,结果));)
但这只是连接的测试应用程序。
在主应用程序中,我需要片段之一的特定ListView中来自服务器的数据输出。再次尝试约数小时后仍未成功,我决定问您。
setListAdapter在FragmentActivity中不再起作用。
还有另一个问题:从我们的服务器下载数据后,是否可以将这些数据保存在特定的变量中?
来自美丽的奥地利的问候,
沙丘的
package at.duned.hydroevaluation;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.os.StrictMode;
import android.os.StrictMode.ThreadPolicy;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
import java.util.List;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class Fragment2_DataOutput extends Fragment {
InputStream is;
ArrayList<String> results =new ArrayList<String>();
JSONObject json_data;
TextView tw09;
ListView list;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
super.onCreate(savedInstanceState);
View V=inflater.inflate(R.layout.fragment_2_dataoutput,container, false);
TextView tw09 = (TextView)V.findViewById(R.id.TextView09);
ListView list = (ListView)V.findViewById(R.id.list);
StrictMode.ThreadPolicy policy = new
StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
getData();
//tw09.setText((CharSequence) is);
return V;
}
private void getData() {
String result = "";
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://patrickhartl.lima-city.de/eva1.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("log_tag", "Fehler bei der http Verbindung "+e.toString());}
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "n");
}
is.close();
result=sb.toString();
}catch(Exception e){Log.e("log_tag", "Error converting result "+e.toString());}
try{
JSONArray jArray = new JSONArray(result);
for(int i=0;i<jArray.length();i++){
json_data = jArray.getJSONObject(i);
results.add((String) json_data.get("Messdaten") + " "+ json_data.get("Wert") + " " + json_data.get("Einheit"));
}
fillList();
}
catch(JSONException e){
Log.e("log_tag", "Error parsing data "+e.toString());
}
}
public void fillList() {
this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));
}
}
最佳答案
setListAdapter在FragmentActivity中不再起作用setListAdapter()
是ListActivity
或ListFragment
上的方法。在其他情况下,例如在这种情况下,您可以在setAdapter()
上调用ListView
。
另外,请清除您的StrictMode
内容并修复您的应用,以将I / O移至后台线程。