Android 片段中的异步任务存在问题

Android 片段中的异步任务存在问题,android,android-fragments,android-activity,actionbarsherlock,Android,Android Fragments,Android Activity,Actionbarsherlock,我正在尝试将代码转换为使用片段。我对Android非常陌生,一开始我制作了很多类,只是使用意图从一个活动切换到另一个活动。我正在使用我的一个类,该类从服务器读取JSON数组,并将表表示为列表,并尝试将其转换为片段。为此,我遵循了此处提供的教程: 这意味着我应该将onCreate更改为onStart并包含onCreateView,我已经完成了这项工作。我还将出现的“ClassName.this”更改为“getActivity()”。在尝试将代码转换为片段之前,代码运行良好,但现在我在尝试使用片段

我正在尝试将代码转换为使用片段。我对Android非常陌生,一开始我制作了很多类,只是使用意图从一个活动切换到另一个活动。我正在使用我的一个类,该类从服务器读取JSON数组,并将表表示为列表,并尝试将其转换为片段。为此,我遵循了此处提供的教程:

这意味着我应该将onCreate更改为onStart并包含onCreateView,我已经完成了这项工作。我还将出现的“ClassName.this”更改为“getActivity()”。在尝试将代码转换为片段之前,代码运行良好,但现在我在尝试使用片段时遇到了问题。我认为这与任务有关

在下面的代码块中,jParser是我创建的JSONParser类的一个实例,它处理JSON数据的解析。我还进行了检查,以确保传递给该方法的URL返回要解析的有效JSON。这个类和我上面调用的方法作为一个活动运行良好;当我在一个片段中操作时,有没有理由不能简单地做同样的事情

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View view = inflater.inflate(R.layout.read_options, container, false);
    return view;
}
@Override
public void onStart() {
    super.onStart();
    // TODO Auto-generated method stub
    optionsList = new ArrayList<HashMap<String, String>>();
    new LoadOptions().execute();
    ListView lv = getListView();
    ...
    (Code to launch new activity when an item in list is pressed)
    ...
}


class LoadOptions extends AsyncTask<String, String, String>{
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(getActivity());
        pDialog.setMessage("Loading options.  Please wait...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }

    protected String doInBackground(String... args){
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        JSONObject json = jParser.makeHttpRequest(url_options, "GET", params);
        Log.d("All Options: ", json.toString());

        try{
            int success = json.getInt(TAG_SUCCESS);
            if (success == 1){
                // Options Found, Iterate Through
                options = json.getJSONArray(TAG_OPTIONS);
                for(int i = 0; i < options.length(); i++){
                    JSONObject c = options.getJSONObject(i);
                    String id = c.getString(TAG_OPTIONID);
                    String duration = c.getString(TAG_DURATION);
                    String reward = c.getString(TAG_REWARD);

                    HashMap<String, String> map = new HashMap<String, String>();
                    map.put(TAG_OPTIONID,  id);
                    map.put(TAG_DURATION, duration);
                    map.put(TAG_REWARD, reward);

                    optionsList.add(map);
                }
            } else {
                // Options are not available or server is down.
                // Dismiss the loading dialog and display an alert onPostExecute
                pDialog.dismiss();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    protected void onPostExecute(String file_url){
        pDialog.dismiss();
        getActivity().runOnUiThread(new Runnable() {
            public void run() {
                ListAdapter adapter = new SimpleAdapter(
                        getActivity(), optionsList, R.layout.list_options, new String[] 
                                {TAG_OPTIONID, TAG_DURATION, TAG_REWARD},
                                new int[] {R.id.tvOption, R.id.tvDuration, R.id.tvReward});
                setListAdapter(adapter);

                // Check for whether or not there are options available and display alert
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                JSONObject json = jParser.makeHttpRequest(url_options, "GET", params);
                int success = 0;
                try {
                    success = json.getInt(TAG_SUCCESS);
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                if (success == 0){
                AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
                alertDialog.setTitle("No Options Available!");
                alertDialog.setMessage("No options currently available.  You will receive a " + 
                "notification when there are options available.  Click 'Okay' to return to main screen");
                alertDialog.setCancelable(false);
                alertDialog.setPositiveButton("Okay", new DialogInterface.OnClickListener(){
                    public void onClick(DialogInterface dialog, int id){
                        Intent i = new Intent(getActivity().getApplicationContext(), MainActivity.class);
                        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(i);
                    }
                });
                alertDialog.show(); 
                }

            }
        });
    }
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//TODO自动生成的方法存根
视图=充气机。充气(R.layout.read_选项,容器,false);
返回视图;
}
@凌驾
public void onStart(){
super.onStart();
//TODO自动生成的方法存根
optionsList=newarraylist();
新的LoadOptions().execute();
ListView lv=getListView();
...
(按下列表中的项目时启动新活动的代码)
...
}
类LoadOptions扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=newprogressdialog(getActivity());
setMessage(“正在加载选项。请稍候…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(假);
pDialog.show();
}
受保护的字符串doInBackground(字符串…args){
List params=new ArrayList();
JSONObject json=jParser.makeHttpRequest(url_选项,“GET”,参数);
Log.d(“所有选项:,json.toString());
试一试{
int success=json.getInt(TAG_success);
如果(成功==1){
//已找到选项,请遍历
options=json.getJSONArray(TAG_options);
对于(int i=0;i
错误日志如下所示:

03-03 23:30:50.812: W/System.err(28019): java.net.SocketException: Permission denied
03-03 23:30:50.863: W/System.err(28019):    at org.apache.harmony.luni.platform.OSNetworkSystem.socket(Native Method)
03-03 23:30:50.863: W/System.err(28019):    at dalvik.system.BlockGuard$WrappedNetworkSystem.socket(BlockGuard.java:335)
03-03 23:30:50.863: W/System.err(28019):    at org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:216)
03-03 23:30:50.863: W/System.err(28019):    at java.net.Socket.checkOpenAndCreate(Socket.java:821)
03-03 23:30:50.863: W/System.err(28019):    at java.net.Socket.connect(Socket.java:967)
03-03 23:30:50.863: W/System.err(28019):    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
03-03 23:30:50.863: W/System.err(28019):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:156)
03-03 23:30:50.863: W/System.err(28019):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
03-03 23:30:50.867: W/System.err(28019):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
03-03 23:30:50.867: W/System.err(28019):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359)
03-03 23:30:50.867: W/System.err(28019):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
03-03 23:30:50.867: W/System.err(28019):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
03-03 23:30:50.867: W/System.err(28019):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
03-03 23:30:50.867: W/System.err(28019):    at com.example.abtest.JSONParser.makeHttpRequest(JSONParser.java:62)
03-03 23:30:50.867: W/System.err(28019):    at com.example.abtest.ReadOptionsFragment$LoadOptions.doInBackground(ReadOptionsFragment.java:111)
03-03 23:30:50.867: W/System.err(28019):    at com.example.abtest.ReadOptionsFragment$LoadOptions.doInBackground(ReadOptionsFragment.java:1)
03-03 23:30:50.867: W/System.err(28019):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
03-03 23:30:50.867: W/System.err(28019):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
03-03 23:30:50.867: W/System.err(28019):    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
03-03 23:30:50.871: W/System.err(28019):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
03-03 23:30:50.871: W/System.err(28019):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
03-03 23:30:50.871: W/System.err(28019):    at java.lang.Thread.run(Thread.java:1019)
03-03 23:30:50.871: E/Buffer Error(28019): Error converting result java.lang.NullPointerException
03-03 23:30:50.871: E/JSON Parser(28019): Error parsing data org.json.JSONException: End of input at character 0 of 
03-03 23:30:50.882: W/dalvikvm(28019): threadid=10: thread exiting with uncaught exception (group=0x4001e578)
03-03 23:30:50.882: E/AndroidRuntime(28019): FATAL EXCEPTION: AsyncTask #1
03-03 23:30:50.882: E/AndroidRuntime(28019): java.lang.RuntimeException: An error occured while executing doInBackground()
03-03 23:30:50.882: E/AndroidRuntime(28019):    at android.os.AsyncTask$3.done(AsyncTask.java:200)
03-03 23:30:50.882: E/AndroidRuntime(28019):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
03-03 23:30:50.882: E/AndroidRuntime(28019):    at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
03-03 23:30:50.882: E/AndroidRuntime(28019):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
03-03 23:30:50.882: E/AndroidRuntime(28019):    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
03-03 23:30:50.882: E/AndroidRuntime(28019):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
03-03 23:30:50.882: E/AndroidRuntime(28019):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
03-03 23:30:50.882: E/AndroidRuntime(28019):    at java.lang.Thread.run(Thread.java:1019)
03-03 23:30:50.882: E/AndroidRuntime(28019): Caused by: java.lang.NullPointerException
03-03 23:30:50.882: E/AndroidRuntime(28019):    at com.example.abtest.ReadOptionsFragment$LoadOptions.doInBackground(ReadOptionsFragment.java:112)
03-03 23:30:50.882: E/AndroidRuntime(28019):    at com.example.abtest.ReadOptionsFragment$LoadOptions.doInBackground(ReadOptionsFragment.java:1)
03-03 23:30:50.882: E/AndroidRuntime(28019):    at android.os.AsyncTask$2.call(AsyncTask.java:185)
03-03 23:30:50.882: E/AndroidRuntime(28019):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
03-03 23:30:50.882: E/AndroidRuntime(28019):    ... 4 more
03-03 23:30:56.742: E/WindowManager(28019): Activity com.example.abtest.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4055c690 that was originally added here
03-03 23:30:56.742: E/WindowManager(28019): android.view.WindowLeaked: Activity com.example.abtest.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@4055c690 that was originally added here
03-03 23:30:56.742: E/WindowManager(28019):     at android.view.ViewRoot.<init>(ViewRoot.java:263)
03-03 23:30:56.742: E/WindowManager(28019):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:171)
03-03 23:30:56.742: E/WindowManager(28019):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:114)
03-03 23:30:56.742: E/WindowManager(28019):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
03-03 23:30:56.742: E/WindowManager(28019):     at android.app.Dialog.show(Dialog.java:242)
03-03 23:30:56.742: E/WindowManager(28019):     at com.example.abtest.ReadOptionsFragment$LoadOptions.onPreExecute(ReadOptionsFragment.java:104)
03-03 23:30:56.742: E/WindowManager(28019):     at android.os.AsyncTask.execute(AsyncTask.java:391)
03-03 23:30:56.742: E/WindowManager(28019):     at com.example.abtest.ReadOptionsFragment.onStart(ReadOptionsFragment.java:62)
03-03 23:30:56.742: E/WindowManager(28019):     at android.support.v4.app.Fragment.performStart(Fragment.java:1332)
03-03 23:30:56.742: E/WindowManager(28019):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:906)
03-03 23:30:56.742: E/WindowManager(28019):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
03-03 23:30:56.742: E/WindowManager(28019):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
03-03 23:30:56.742: E/WindowManager(28019):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
03-03 23:30:56.742: E/WindowManager(28019):     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
03-03 23:30:56.742: E/WindowManager(28019):     at android.os.Handler.handleCallback(Handler.java:587)
03-03 23:30:56.742: E/WindowManager(28019):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-03 23:30:56.742: E/WindowManager(28019):     at android.os.Looper.loop(Looper.java:130)
03-03 23:30:56.742: E/WindowManager(28019):     at android.app.ActivityThread.main(ActivityThread.java:3687)
03-03 23:30:56.742: E/WindowManager(28019):     at java.lang.reflect.Method.invokeNative(Native Method)
03-03 23:30:56.742: E/WindowManager(28019):     at java.lang.reflect.Method.invoke(Method.java:507)
03-03 23:30:56.742: E/WindowManager(28019):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
03-03 23:30:56.742: E/WindowManager(28019):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
03-03 23:30:56.742: E/WindowManager(28019):     at dalvik.system.NativeStart.main(Native Method)
03-03 23:30:50.812:W/System.err(28019):java.net.SocketException:权限被拒绝
03-03 23:30:50.863:W/System.err(28019):位于org.apache.harmony.luni.platform.OSNetworkSystem.socket(本机方法)
03-03 23:30:50.863:W/System.err(28019):位于dalvik.System.BlockGuard$WrappedNetworkSystem.socket(BlockGuard.java:335)
03-03 23:30:50.863:W/System.err(28019):位于org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:216)
03-03 23:30:50.863:W/System.err(28019):位于java.net.Socket.checkOpenAndCreate(Socket.java:821)
03-03 23:30:50.863:W/系统错误(28019)
 <uses-permission android:name="android.permission.INTERNET"/>