Android 在片段中加载JSON内容

Android 在片段中加载JSON内容,android,android-fragments,Android,Android Fragments,我对Android环境非常陌生。我一直想从网页中检索JSON内容,所以我发现本教程可以从url()中获取JSON内容,并且它也可以正确地处理我的数据 现在,我想做的是:一个选项卡应用程序,其中一个选项卡使用该代码检索JSON数据。我使用了fragment,并试图修改代码以与fragment兼容,无论如何,当我启动相关选项卡时,应用程序崩溃 由于前面的教程工作正常,我很确定问题出在我的新手代码上 FragmentTab1.Java package com.alessandrobocci.fenic

我对Android环境非常陌生。我一直想从网页中检索JSON内容,所以我发现本教程可以从url()中获取JSON内容,并且它也可以正确地处理我的数据

现在,我想做的是:一个选项卡应用程序,其中一个选项卡使用该代码检索JSON数据。我使用了fragment,并试图修改代码以与fragment兼容,无论如何,当我启动相关选项卡时,应用程序崩溃

由于前面的教程工作正常,我很确定问题出在我的新手代码上

FragmentTab1.Java

package com.alessandrobocci.fenice;
import java.util.ArrayList;
import java.util.HashMap;
import com.alessandrobocci.fenice.library.JSONParser;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;


public class FragmentTab1 extends Fragment {
    ListView list;
    TextView title;
    TextView name;
    TextView api;
    Button Btngetdata;
    ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();

    //URL to get JSON Array
    private static String url = "http://10.0.2.2/test/read.php";

    //JSON Node Names 
    private static final String TAG_OS = "todo";
    private static final String TAG_VER = "title";

    JSONArray arr = null;
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        //Inflate the layout for this fragment
        //This layout contains your list view 
        View view = inflater.inflate(R.layout.fragmenttab1, container, false);
        title = (TextView)getView().findViewById(R.id.vers);
        //now you must initialize your list view
        list =(ListView)view.findViewById(R.id.listnews);
        new JSONParse().execute();

        return view;
    }
    private class JSONParse extends AsyncTask<String, String, JSONObject> {
     private ProgressDialog pDialog;
    @Override
       protected void onPreExecute() {
           super.onPreExecute();
           pDialog = new ProgressDialog(getActivity());
           pDialog.setMessage("Getting Data ...");
           pDialog.setIndeterminate(false);
           pDialog.setCancelable(true);
           pDialog.show();            
    }

    @Override
       protected JSONObject doInBackground(String... args) {

        JSONParser jParser = new JSONParser();
        // Getting JSON from URL
        JSONObject json = jParser.getJSONFromUrl(url);
        return json;
    }
     @Override
    protected void onPostExecute(JSONObject json) {
         pDialog.dismiss();
         try {
            // Getting JSON Array from URL
            arr = json.getJSONArray(TAG_OS);
            for(int i = 0; i < arr.length(); i++){
            JSONObject c = arr.getJSONObject(i);
            // Storing  JSON item in a Variable
            String ver = c.getString(TAG_VER);
            // Adding value HashMap key => value
            HashMap<String, String> map = new HashMap<String, String>();
            map.put(TAG_VER, ver);
            oslist.add(map);
            //list=(ListView) getView().findViewById(R.id.list);
            ListAdapter adapter = new SimpleAdapter(getActivity(), oslist,
                R.layout.list_v,
                new String[] { TAG_VER }, new int[] {
                    R.id.vers});
            list.setAdapter(adapter);
            list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                                            int position, long id) {
                        Toast.makeText(getActivity(), "You Clicked at "+oslist.get(+position).get("title"), Toast.LENGTH_SHORT).show();
                    }
                });
            }
        } catch (JSONException e) {
          e.printStackTrace();
        }
       }
   }
}
如果有必要,我还将发布其他代码,我不认为它有用,例如MainActivity.Java(包含选项卡)使用简单的FragmenTab代码检索一些文本。 希望我说的很清楚,谢谢。

改变这个

title = (TextView)getView().findViewById(R.id.vers);

title
可能为空,导致
NullPointerException
,如果您发布stacktrace,则可以确认该异常


还有一个提示,在for循环中设置了适配器。没必要那样做。将项目添加到列表并将适配器设置为listview一次

如果您发布logcat输出,我们将能够更好地帮助您。好的,我将发布,谢谢:)@Markviduka发布完整的stacktrace。你的更新没有帮助我不理解连接被拒绝的错误,而在另一个项目中它工作了。在我的问题上添加了logcat的第一行错误,现在我将尝试你的更新tip@Markviduka更新没有帮助。张贴完整的堆栈trace@Markviduka什么是
FragmentTab1.java
80行方法
onPostExecute()
从第77行开始,第80行是try&catch@Markviduka那么你的stacktrace没有指出NPE在正确的位置。进一步阅读
title = (TextView)getView().findViewById(R.id.vers);
title = (TextView)view.findViewById(R.id.vers);