Android 应用程序因异步任务而失败

Android 应用程序因异步任务而失败,android,android-fragments,android-asynctask,Android,Android Fragments,Android Asynctask,我正在尝试更改另一个项目中的类,我正在使用ListActivity,我投票将应用程序分割为要编译的片段,这部分抛出一个错误: 05-06 21:58:16.928 26584-26676/com.learn2crack.tab E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1 Process: com.learn2crack.tab, PID: 26584 java.lang.RuntimeException: An error o

我正在尝试更改另一个项目中的类,我正在使用ListActivity,我投票将应用程序分割为要编译的片段,这部分抛出一个错误:

05-06 21:58:16.928  26584-26676/com.learn2crack.tab E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: com.learn2crack.tab, PID: 26584
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:300)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
            at java.util.concurrent.FutureTask.run(FutureTask.java:242)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)
     Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
            at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
            at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
            at java.net.InetAddress.getAllByName(InetAddress.java:214)
            at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
            at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
            at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
            at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
            at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
            at com.learn2crack.tab.ServiceHandler.makeServiceCall(ServiceHandler.java:75)
            at com.learn2crack.tab.ServiceHandler.makeServiceCall(ServiceHandler.java:39)
            at com.learn2crack.tab.Android$GetContacts.doInBackground(Android.java:70)
            at com.learn2crack.tab.Android$GetContacts.doInBackground(Android.java:51)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)
类异步任务:

私有类GetContacts扩展异步任务{

@Override
protected void onPreExecute() {
    super.onPreExecute();
    // Showing progress dialog
    pDialog = new ProgressDialog(getActivity());
    pDialog.setMessage("Espere, cargando datos...");
    pDialog.setCancelable(false);
    pDialog.show();

}

@Override
protected Void doInBackground(Void... arg0) {
    // Creating service handler class instance
    ServiceHandler sh = new ServiceHandler();

    // Making a request to url and getting response
    String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

    Log.d("Response: ", "> " + jsonStr);

    if (jsonStr != null) {
        try {
            JSONObject jsonObj = new JSONObject(jsonStr);

            // Conseguir nodo matriz JSON
            categories = jsonObj.getJSONArray(TAG_CONTACTS);

            // bucle a través de todos las categorias
            for (int i = 0; i < categories.length(); i++) {
                JSONObject c = categories.getJSONObject(i);

                String id = c.getString(TAG_ID);
                String title = c.getString(TAG_title);
                String slug = c.getString(TAG_slug);

                String desc = c.getString(TAG_description);


                // tmp hashmap para las ventanillas únicas
                HashMap<String, String> contact = new HashMap<String, String>();

                // adding each child node to HashMap key => value
                contact.put(TAG_ID, id);
                contact.put(TAG_title, title);
                contact.put(TAG_slug, slug);
                contact.put(TAG_description, desc);

                // añadir categoria a la lista de categorias
                contactList.add(contact);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    } else {
        Log.e("ServiceHandler", "no pudo obtener ningún dato de la url");
    }

    return null;
}

@Override
protected void onPostExecute(Void result) {
    super.onPostExecute(result);
    // Dismiss the progress dialog
    if (pDialog.isShowing())
        pDialog.dismiss();
    /**
     * Actualización de datos analizados JSON en ListView
     * */
    ListView  vista = (ListView) getActivity().findViewById(R.id.list);
    ListAdapter adapter = new SimpleAdapter(
            getActivity(), contactList,
            R.layout.list_item, new String[]{TAG_title, TAG_description,
            TAG_ID}, new int[]{R.id.name,
            R.id.desc, R.id.id}
    );

    vista.setAdapter(adapter);
}
@覆盖
受保护的void onPreExecute(){
super.onPreExecute();
//显示进度对话框
pDialog=newprogressdialog(getActivity());
pDialog.setMessage(“Espere,cargando datos…”);
pDialog.setCancelable(假);
pDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…arg0){
//创建服务处理程序类实例
ServiceHandler sh=新的ServiceHandler();
//向url发出请求并获得响应
字符串jsonStr=sh.makeServiceCall(url,ServiceHandler.GET);
Log.d(“响应:”、“>”+jsonStr);
if(jsonStr!=null){
试一试{
JSONObject jsonObj=新的JSONObject(jsonStr);
//Conseguir nodo matriz JSON
categories=jsonObj.getJSONArray(TAG_联系人);
//从分类中选择一条路线
对于(int i=0;ivalue
联系人。放置(标签号,ID);
联系人。放置(标签标题、标题);
触点。put(TAG_段塞,段塞);
联系方式(标签描述,描述);
//añadir categoria a la lista de categorias
联系人列表。添加(联系人);
}
}捕获(JSONException e){
e、 printStackTrace();
}
}否则{
Log.e(“ServiceHandler”,“没有pudo obtener ningún dato de la url”);
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
//关闭进度对话框
if(pDialog.isShowing())
pDialog.disclose();
/**
*ListView中数据分析的实施
* */
ListView vista=(ListView)getActivity().findViewById(R.id.list);
ListAdapter=新的SimpleAdapter(
getActivity(),联系人列表,
R.layout.list_项,新字符串[]{TAG_title,TAG_description,
TAG_ID},新int[]{R.ID.name,
R.id.desc,R.id.id}
);
setAdapter(适配器);
}

}您似乎没有相应的权限。将此行添加到您的
manifest.xml

<uses-permission android:name="android.permission.INTERNET"></uses-permission>


您还需要添加LogCat的“原因:”部分,请发布包含异步任务和Paninithanks提到的LogCat的代码,现在,当我更改屏幕旋转选项卡或数据reloaded@LuisRuiz您从何处执行
GetContacts
AsyncTask?@LuisRuiz在
manifest.xml
中使用此任务
android:configChanges=“orientation | keyboardHidden | screenSize”
解决了旋转屏幕的完美问题,但当tambio从一个选项卡切换到另一个选项卡并重新加载data@LuisRuiz检查这个问题的第一个答案。