0

我尝试解析 json,但我有问题,当我运行我的应用程序时,我有下一个错误。我尝试打印日志,但没有打印出来。他看不懂我的 rss.json?还是另一个问题?

我收到 FATAL EXCEPTION : AsyncTask #1 这个错误在 log cat 我能够在 AVD 4.1.2 上运行代码

日志猫

 FATAL EXCEPTION: AsyncTask #1
 java.lang.RuntimeException: An error occured while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:299)
    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
    at java.lang.Thread.run(Thread.java:856)
 Caused by: java.lang.NullPointerException
    at java.io.Reader.<init>(Reader.java:64)
    at java.io.InputStreamReader.<init>(InputStreamReader.java:79)
    at com.gazetaimage.MainActivity$backTask.doInBackground(MainActivity.java:112)
    at com.gazetaimage.MainActivity$backTask.doInBackground(MainActivity.java:1)
    at android.os.AsyncTask$2.call(AsyncTask.java:287)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    ... 5 more

异步任务代码

class backTask extends AsyncTask<String, Void, JSONObject>{     
    InputStream ips;
    String jstring = null;
    JSONObject jsonObj = null;
    MainActivity activity;
    @Override
    protected JSONObject doInBackground(String... params) {

        try {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost("http://mysite.com/RSS/gazeta.js");            
        HttpResponse response = client.execute(post);
        HttpEntity entity = response.getEntity();           
        ips = entity.getContent();
        Log.d("Log", ips.toString());
        } catch (ClientProtocolException e) {               
            e.printStackTrace();
        } catch (IOException e) {               
            e.printStackTrace();
        }

        try {
            //MainActivity.java:112 ERROR --->
            BufferedReader bufff = new BufferedReader(new InputStreamReader(ips, "UTF-8"));
            Log.d("Log", bufff.toString());
            StringBuilder sb = new StringBuilder();
            String line = "";

            while ((line = bufff.readLine()) != null){
                sb.append(line + "\n");
            }

            ips.close();
            jstring = sb.toString();


        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            jsonObj = new JSONObject(jstring);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return jsonObj;
    }       
    protected void onPostExecute(JSONObject result){
        super.onPostExecute(result);            
    }
    public void link(MainActivity mainActivity) {
        activity = mainActivity;        
    }       
    public void unlink() {
        activity = null;
    }
}
4

1 回答 1

1

您可能做的最好的事情就是在您的任务上设置一个断点并逐步完成它。在我看来(请注意,您只需看一眼代码即可)到您的第二个 try 块被命中时,您的 ips 变量为空。

如果是这种情况,您可以尝试做的一件事是将 try 块压缩为一个块并组合 catch 语句(因为它们都做同样的事情),看看是否有帮助。

干杯。

于 2012-12-08T09:56:50.193 回答