簡體   English   中英

致命異常:AsyncTask#2 java.lang.RuntimeException:執行doInBackground()時發生錯誤

[英]FATAL EXCEPTION: AsyncTask #2 java.lang.RuntimeException: An error occured while executing doInBackground()

我試圖從android應用程序調用Web服務方法,但我在執行doInBackground()時出錯java.lang.RuntimeException錯誤,並且應用程序停止了,我看到了很多與此相關的問題,但是他們通過在清單文件中添加Internet權限來解決了但是它對

這是我的代碼

package com.yeftaandrea.plesirsolo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

import com.yeftaandrea.plesirsolo.adapter.JsonAttractionAdapter;

public class KaranganyarAttractionFragment extends Fragment {

    // URL to get contacts JSON
    // JSON Node names
    public static final String TAG_ID = "ID";
    public static final String TAG_NAME = "Name";
    public static final String TAG_ADDRESS = "Address";
    public static final String TAG_PHONE = "Phone";
    public static final String TAG_PICPATH = "PicPath";

    // Hashmap for ListView
    ArrayList<HashMap<String, String>> attractionList;
    ListView list;

    JsonAttractionAdapter adapter;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_attraction_karanganyar, container, false);

        list = (ListView) rootView.findViewById(R.id.list);

        list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                // TODO Auto-generated method stub
            }
            });

        // Calling async task to get json
        new LoadTask().execute();

        return rootView;
    }

    private void loadAttraction(){
        attractionList = new 
                ArrayList<HashMap<String, String>>();
        JSONParser parser = new JSONParser();

        List<NameValuePair> params = new ArrayList<NameValuePair>();

        try {
            JSONArray attraction = parser.makeHttpRequestArray("http://plesirsolo.meximas.com/plesir/attraction/wisata/getWisata/id/1", "GET", params);
            // JSONArray attraction = parser.makeHttpRequestArray("http://192.168.56.1:8080/examples/json.html", "GET", params);
            // looping through All messages
            for (int i = 0; i < attraction.length(); i++) {
                JSONObject c = attraction.getJSONObject(i);

                // Storing each json item in variable
                String id = c.getString(TAG_ID);
                String nama = c.getString(TAG_NAME);
                String address = c.getString(TAG_ADDRESS);
                String phone = c.getString(TAG_PHONE);
                String picPath = c.getString(TAG_PICPATH);

                // creating new HashMap
                HashMap<String, String> map = new HashMap<String, String>();

                // adding each child node to HashMap key => value
                map.put(TAG_ID, id);
                map.put(TAG_NAME, nama);
                map.put(TAG_ADDRESS, address);
                map.put(TAG_PHONE, phone);
                map.put(TAG_PICPATH, picPath);

                // adding HashList to ArrayList
                attractionList.add(map);
            }

            adapter = new JsonAttractionAdapter(
                    getActivity(), attractionList);

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    private class LoadTask extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {
            loadAttraction();
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            list.setAdapter(adapter);
            Log.i("JSON", "TEST");
            Log.i("JSON", attractionList.toString());
        }       

    }

}

和logcat

06-02 09:35:33.245: E/AndroidRuntime(1322): FATAL EXCEPTION: AsyncTask #2
06-02 09:35:33.245: E/AndroidRuntime(1322): java.lang.RuntimeException: An error occured while executing doInBackground()
06-02 09:35:33.245: E/AndroidRuntime(1322):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
06-02 09:35:33.245: E/AndroidRuntime(1322):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
06-02 09:35:33.245: E/AndroidRuntime(1322):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
06-02 09:35:33.245: E/AndroidRuntime(1322):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
06-02 09:35:33.245: E/AndroidRuntime(1322):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
06-02 09:35:33.245: E/AndroidRuntime(1322):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
06-02 09:35:33.245: E/AndroidRuntime(1322):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
06-02 09:35:33.245: E/AndroidRuntime(1322):     at java.lang.Thread.run(Thread.java:841)
06-02 09:35:33.245: E/AndroidRuntime(1322): Caused by: java.lang.NullPointerException
06-02 09:35:33.245: E/AndroidRuntime(1322):     at com.yeftaandrea.plesirsolo.KaranganyarAttractionFragment.loadAttraction(KaranganyarAttractionFragment.java:74)
06-02 09:35:33.245: E/AndroidRuntime(1322):     at com.yeftaandrea.plesirsolo.KaranganyarAttractionFragment.access$0(KaranganyarAttractionFragment.java:63)
06-02 09:35:33.245: E/AndroidRuntime(1322):     at com.yeftaandrea.plesirsolo.KaranganyarAttractionFragment$LoadTask.doInBackground(KaranganyarAttractionFragment.java:110)
06-02 09:35:33.245: E/AndroidRuntime(1322):     at com.yeftaandrea.plesirsolo.KaranganyarAttractionFragment$LoadTask.doInBackground(KaranganyarAttractionFragment.java:1)
06-02 09:35:33.245: E/AndroidRuntime(1322):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
06-02 09:35:33.245: E/AndroidRuntime(1322):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)
06-02 09:35:33.245: E/AndroidRuntime(1322):     ... 4 more

我需要你的幫助,謝謝

檢查吸引力!=在執行for循環之前為null

JSONArray attraction = parser.makeHttpRequestArray("http://plesirsolo.meximas.com/plesir/attraction/wisata/getWisata/id/1", "GET", params);

if(attraction!=null){
  // do something
}

您的變量atraction似乎為null因為此調用

JSONArray attraction = parser.makeHttpRequestArray("http://plesirsolo.meximas.com/plesir/attraction/wisata/getWisata/id/1", "GET", params);

返回null ,稍后您嘗試訪問該變量

for (int i = 0; i < attraction.length(); i++) {
    JSONObject c = attraction.getJSONObject(i);

在進入attraction對象之前,請檢查它是否已初始化;如果它為null請不要進入loop 您還應該閱讀: 什么是NullPointerException,以及如何解決?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM