Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在异步任务中解析JSON时强制关闭_Android_Json_Listview - Fatal编程技术网

Android 在异步任务中解析JSON时强制关闭

Android 在异步任务中解析JSON时强制关闭,android,json,listview,Android,Json,Listview,应用程序在几秒钟后关闭。我可以在logcat中看到JSON值,但结果不会在listview中更新 我的主要活动类别代码如下: public class MainActivity extends ListActivity { private ProgressDialog dialog; private static String url="url here"; private static final String BASE_TAG="base"; privat

应用程序在几秒钟后关闭。我可以在logcat中看到JSON值,但结果不会在listview中更新

我的主要活动类别代码如下:

public class MainActivity extends ListActivity {
    private ProgressDialog dialog;
    private static String url="url here";


    private static final String BASE_TAG="base";
    private static final String RATES_TAG="rates";

    JSONParser jParser=new JSONParser();

    ArrayList<HashMap<String,String>> currentRates;

    JSONArray rates=null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        currentRates=new ArrayList<HashMap<String,String>>();

        new getRates().execute();

        ListView lv=getListView();


    }

    public class getRates extends AsyncTask<String,String,String>{

    @Override
    protected void onPreExecute(){
        super.onPreExecute();
        dialog=new ProgressDialog(MainActivity.this);
        dialog.setMessage("Please wait");
        dialog.setIndeterminate(false);
        dialog.setCancelable(false);
        dialog.show();
    }

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

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

JSONObject json=jParser.makeHttpRequest(url,"GET",params);

Log.d("Current Rates:",json.toString());

try {
    rates=json.getJSONArray(RATES_TAG);

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


        String rates=c.getString(RATES_TAG);

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

        map.put(RATES_TAG, rates);

        currentRates.add(map);
    }
} catch (JSONException e){
    e.printStackTrace();
}

            return null;
        }

        protected void onPostExecute(String url){
            dialog.dismiss();

            runOnUiThread(new Runnable(){
                public void run(){
                    ListAdapter adapter=new SimpleAdapter(MainActivity.this, currentRates ,R.layout.rates_item,new String[]{RATES_TAG},new int[]{R.id.rates});

                    setListAdapter(adapter);
                }
            });
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }


}
public类MainActivity扩展了ListActivity{
私人对话;
私有静态字符串url=“url here”;
私有静态最终字符串BASE_TAG=“BASE”;
私有静态最终字符串速率\u TAG=“RATES”;
JSONParser jParser=新的JSONParser();
ArrayList当前速率;
JSONArray速率=空;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
currentRates=新的ArrayList();
新建getRates().execute();
ListView lv=getListView();
}
公共类getRates扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
dialog=新建ProgressDialog(MainActivity.this);
setMessage(“请稍候”);
dialog.setUndeterminate(false);
对话框。可设置可取消(false);
dialog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…args){
List params=new ArrayList();
JSONObject json=jParser.makeHttpRequest(url,“GET”,参数);
Log.d(“当前速率:,json.toString());
试一试{
rates=json.getJSONArray(rates\u标记);
for(int i=0;i 07-08 19:46:13.103:E/AndroidRuntime(331):致命异常:异步任务
>#1 07-08 19:46:13.103:E/AndroidRuntime(331):java.lang.RuntimeException:执行时出错
>doInBackground()07-08 19:46:13.103:E/AndroidRuntime(331):在
>android.os.AsyncTask$3.done(AsyncTask.java:200)07-08 19:46:13.103:
>E/AndroidRuntime(331):在
>java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
>07-08 19:46:13.103:E/AndroidRuntime(331):在
>java.util.concurrent.FutureTask.setException(FutureTask.java:125)
>07-08 19:46:13.103:E/AndroidRuntime(331):在
>java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
>07-08 19:46:13.103:E/AndroidRuntime(331):在
>java.util.concurrent.FutureTask.run(FutureTask.java:138)07-08
>19:46:13.103:E/AndroidRuntime(331):在
>java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
>07-08 19:46:13.103:E/AndroidRuntime(331):在
>java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
>07-08 19:46:13.103:E/AndroidRuntime(331):在
>java.lang.Thread.run(Thread.java:1019)07-08 19:46:13.103:
>E/AndroidRuntime(331):由以下原因引起:java.lang.NullPointerException 07-08
>19:46:13.103:E/AndroidRuntime(331):在
>com.razzil.currency.MainActivity$getRates.doInBackground(MainActivity.java:69)
>07-08 19:46:13.103:E/AndroidRuntime(331):在
>com.razzil.currency.MainActivity$getRates.doInBackground(MainActivity.java:1)
>07-08 19:46:13.103:E/AndroidRuntime(331):在
>android.os.AsyncTask$2.call(AsyncTask.java:185)07-08 19:46:13.103:
>E/AndroidRuntime(331):在
>java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
>07-08 19:46:13.103:E/AndroidRuntime(331):…还有4个07-08
>19:46:15.372:E/WindowManager(331):活动
>com.razzil.currency.main活动已泄漏窗口
>com.android.internal.policy.impl.PhoneWindow$DecorView@40520830那个
>最初添加于此处07-08 19:46:15.372:E/WindowManager(331):
>android.view.windowsleek:Activity com.razzil.currency.main活动
>窗户漏水了
>com.android.internal.policy.impl.PhoneWindow$DecorView@40520830那个
>最初添加于此处07-08 19:46:15.372:E/WindowManager(331):
>在android.view.ViewRoot.(ViewRoot.java:258)07-08
>19:46:15.372:E/WindowManager(331):在
>addView(WindowManagerImpl.java:148)
>07-08 19:46:15.372:E/WindowManager(331):在
>addView(WindowManagerImpl.java:91)
>07-08 19:46:15.372:E/WindowManager(331):在
>android.view.Window$LocalWindowManager.addView(Window.java:424)07-08
>19:46:15.372:E/WindowManager(331):在
>android.app.Dialog.show(Dialog.java:241)07-08 19:46:15.372:
>E/WindowManager(331):在
>com.razzil.currency.MainActivity$getRates.onPreExecute(MainActivity.java:59)
>07-08 19:46:15.372:E/WindowManager(331):在
>android.os.AsyncTask.execute(AsyncTask.java:391)07-08 19:46:15.372:
>E/WindowManager(331):在
>com.razzil.currency.MainActivity.onCreate(MainActivity.java:43)07-08
>19:46:15.372:E/WindowManager(331):在
>android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
>07-08 19:46:15.372:E/WindowManager(331):在
>android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
>07-08 19:46:15.372:E/WindowManager(331):在
>android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
>07-08 19:46:15.372:E/WindowManager(331):在
>android.app.ActivityThread.access$1500(ActivityThread.java:117)07-08
>19:46:15.372:E/WindowManager(331):在
>android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
>07-08 19:46:15.372:E/WindowManager(331):在
>android.os.Handler.dispatchMessage(Handler.java:99)07-08
>19:46:15.372:E/WindowManager(331):在
>android.os.Looper.loop(Looper.java:123)07-08 19:46:15.372:
>E/WindowManager(331):在
>android.app.ActivityThread.main(ActivityThread.java:3683)07-08
>19:46:15.372:E/WindowManager(331):在
>java.lang.reflect.Method.Invokenactive(本机方法)07-08
>19:46:15.372:E/WindowManager(331):在
>java.lang.reflect.Method.invoke(Method.java:507)07-08 19:46:15.372:
>E/WindowManager(331):在
>com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
>07-08 19:46:15.372:E/WindowManager(331):在
>com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)07-08
>19:46:15.372:E/WindowManager(331):在
>dalvik.system.NativeStart.main(本机方法)

您正在点击空点
> 07-08 19:46:13.103: E/AndroidRuntime(331): FATAL EXCEPTION: AsyncTask
> #1 07-08 19:46:13.103: E/AndroidRuntime(331): java.lang.RuntimeException: An error occured while executing
> doInBackground() 07-08 19:46:13.103: E/AndroidRuntime(331):   at
> android.os.AsyncTask$3.done(AsyncTask.java:200) 07-08 19:46:13.103:
> E/AndroidRuntime(331):    at
> java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
> 07-08 19:46:13.103: E/AndroidRuntime(331):    at
> java.util.concurrent.FutureTask.setException(FutureTask.java:125)
> 07-08 19:46:13.103: E/AndroidRuntime(331):    at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
> 07-08 19:46:13.103: E/AndroidRuntime(331):    at
> java.util.concurrent.FutureTask.run(FutureTask.java:138) 07-08
> 19:46:13.103: E/AndroidRuntime(331):  at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
> 07-08 19:46:13.103: E/AndroidRuntime(331):    at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
> 07-08 19:46:13.103: E/AndroidRuntime(331):    at
> java.lang.Thread.run(Thread.java:1019) 07-08 19:46:13.103:
> E/AndroidRuntime(331): Caused by: java.lang.NullPointerException 07-08
> 19:46:13.103: E/AndroidRuntime(331):  at
> com.razzil.currency.MainActivity$getRates.doInBackground(MainActivity.java:69)
> 07-08 19:46:13.103: E/AndroidRuntime(331):    at
> com.razzil.currency.MainActivity$getRates.doInBackground(MainActivity.java:1)
> 07-08 19:46:13.103: E/AndroidRuntime(331):    at
> android.os.AsyncTask$2.call(AsyncTask.java:185) 07-08 19:46:13.103:
> E/AndroidRuntime(331):    at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
> 07-08 19:46:13.103: E/AndroidRuntime(331):    ... 4 more 07-08
> 19:46:15.372: E/WindowManager(331): Activity
> com.razzil.currency.MainActivity has leaked window
> com.android.internal.policy.impl.PhoneWindow$DecorView@40520830 that
> was originally added here 07-08 19:46:15.372: E/WindowManager(331):
> android.view.WindowLeaked: Activity com.razzil.currency.MainActivity
> has leaked window
> com.android.internal.policy.impl.PhoneWindow$DecorView@40520830 that
> was originally added here 07-08 19:46:15.372: E/WindowManager(331):
>   at android.view.ViewRoot.<init>(ViewRoot.java:258) 07-08
> 19:46:15.372: E/WindowManager(331):   at
> android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
> 07-08 19:46:15.372: E/WindowManager(331):     at
> android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
> 07-08 19:46:15.372: E/WindowManager(331):     at
> android.view.Window$LocalWindowManager.addView(Window.java:424) 07-08
> 19:46:15.372: E/WindowManager(331):   at
> android.app.Dialog.show(Dialog.java:241) 07-08 19:46:15.372:
> E/WindowManager(331):     at
> com.razzil.currency.MainActivity$getRates.onPreExecute(MainActivity.java:59)
> 07-08 19:46:15.372: E/WindowManager(331):     at
> android.os.AsyncTask.execute(AsyncTask.java:391) 07-08 19:46:15.372:
> E/WindowManager(331):     at
> com.razzil.currency.MainActivity.onCreate(MainActivity.java:43) 07-08
> 19:46:15.372: E/WindowManager(331):   at
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
> 07-08 19:46:15.372: E/WindowManager(331):     at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
> 07-08 19:46:15.372: E/WindowManager(331):     at
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
> 07-08 19:46:15.372: E/WindowManager(331):     at
> android.app.ActivityThread.access$1500(ActivityThread.java:117) 07-08
> 19:46:15.372: E/WindowManager(331):   at
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
> 07-08 19:46:15.372: E/WindowManager(331):     at
> android.os.Handler.dispatchMessage(Handler.java:99) 07-08
> 19:46:15.372: E/WindowManager(331):   at
> android.os.Looper.loop(Looper.java:123) 07-08 19:46:15.372:
> E/WindowManager(331):     at
> android.app.ActivityThread.main(ActivityThread.java:3683) 07-08
> 19:46:15.372: E/WindowManager(331):   at
> java.lang.reflect.Method.invokeNative(Native Method) 07-08
> 19:46:15.372: E/WindowManager(331):   at
> java.lang.reflect.Method.invoke(Method.java:507) 07-08 19:46:15.372:
> E/WindowManager(331):     at
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
> 07-08 19:46:15.372: E/WindowManager(331):     at
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 07-08
> 19:46:15.372: E/WindowManager(331):   at
> dalvik.system.NativeStart.main(Native Method)
> java.lang.Thread.run(Thread.java:1019) 07-08 19:46:13.103:
> E/AndroidRuntime(331): Caused by: java.lang.**NullPointerException** 07-08
> 19:46:13.103: E/AndroidRuntime(331):  at
> com.razzil.currency.MainActivity$getRates.doInBackground(MainActivity.java:69)
> 07-08 19:46:13.103: E/AndroidRuntime(331):    at
> com.razzil.currency.MainActivity$getRates.doInBackground(MainActivity.java:1)
> 07-08 19:46:13.103: E/AndroidRuntime(331):