我只是在为水电站编程一个数据评估应用程序。
在那里,我需要从服务器下载数据,该数据位于其中-作为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()ListActivityListFragment上的方法。在其他情况下,例如在这种情况下,您可以在setAdapter()上调用ListView

另外,请清除您的StrictMode内容并修复您的应用,以将I / O移至后台线程。

10-06 12:09